精华内容
下载资源
问答
  • 题记 —— 执剑天涯,从你的点滴积累开始,所及之处,必...在实际应用开发中,我们会有像 token、appVersionCode 等等这些每个接口请求都需要传的参数 ,称之为公共请求参数,公共请求参数配置方式总结有三: 在get

    题记
    —— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精。

    【x1】点击查看提示

    【x2】各种系列的教程

    一个程序员的修炼日记


    本文章将讲述
    1.get请求中配置公共参数
    2.post请求配置公共参数
    3.请求header配置

    1 引言

    在实际应用开发中,我们会有像 token、appVersionCode 等等这些每个接口请求都需要传的参数 ,称之为公共请求参数,公共请求参数配置方式总结有三:

    • 在get与post请求时将参数配置进去,也可以通过请求header配置
    • 通过请求header将参数配置进去
    • 通过拦截器将请求参数配置到参数配置中或者是header中
    2 dio 配制公共请求参数

    那么在这里 dio 的请求中我们可以考虑这样来配制:

      String application = "V 1.2.2";
      int appVersionCode = 122;
      ///[url]网络请求链接 
      ///[data] post 请求时传的json数据
      ///[queryParameters] get请求时传的参数
      void configCommonPar(url,data,Map<String, dynamic> queryParameters){
        ///配制统一参数
        if (data != null) {
          data['application'] = application;
          data['appVersionCode'] = appVersionCode.toString();
        } else if (queryParameters != null) {
          queryParameters['application'] = application;
          queryParameters['appVersionCode'] = appVersionCode.toString();
        } else {
          ///url中有可能拼接着其他参数
          if (url.contains("?")) {
            url += "&application=$application&appVersionCode=$appVersionCode";
          } else {
            url += "?application=$application&appVersionCode=$appVersionCode";
          }
        }
      }
    }
    
    
    3 dio 配制Content-Type 与请求 header

    我们在创建 Dio对象时,会初始化一个 BaseOptions 来创建 Dio

          BaseOptions options = BaseOptions();
          ///请求header的配置
          options.headers["appVersionCode"]=406;
          options.headers["appVersionName"]="V 4.0.6";
          
          options.contentType="application/json";
          options.method="GET";
          options.connectTimeout=30000;
          ///创建 dio
          Dio dio = new Dio(options);
    

    我们也可以在每次发送 get 、post 等不同的请求时,通过 dio 获取到 默认的 options 然后修改一下

    void getRequestFunction2() async {
        ///用户id
        int userId = 3;
        ///创建 dio
        Dio dio = new Dio();
    
        ///请求地址
        ///传参方式1
        String url = "http://192.168.0.102:8080/getUser/$userId";
        ///在这里修改 contentType
        dio.options.contentType="application/json";
        ///请求header的配置
        dio.options.headers["appVersionCode"]=406;
        dio.options.headers["appVersionName"]="V 4.0.6";
        ///发起get请求
        Response response = await dio.get(url);
    
      ...
      }
    

    完毕【视频教程 感兴趣的伙伴可以瞅瞅】

    展开全文
  • flutter dio请求post产生错误

    千次阅读 2019-10-23 14:36:32
    dio请求服务端没有收到参数或者直接当成get请求原因: 原因是post传递参数方式不正确 1.传递错误的方式,在dio中传递参数,如下: 2.以上的方式参数传递不正确,请求错误,需要如下方式传递参数: 上面的...

    dio请求服务端没有收到参数或者直接当成get请求原因:

    原因是post传递参数方式不正确

    1.传递错误的方式,在dio中传递参数,如下:

    2.以上的方式参数传递不正确,请求错误,需要如下方式传递参数:

    上面的方式参数传递才正确。或者说当前后台需要的传递方式是下面那种。

    展开全文
  • 由于 http请求常用的是GET和POST方法, 请求参数格式要么JSON,要么XML,所以我在第一次封装dio http请求时用了四个方法:Get with Json, GET with XML, Post with Json, Post with xml。 完成后发现好多重复代码...

    首先 pubspec.yaml里面添加dio依赖模块

    dio: ^3.0.10

     

    由于 http请求常用的是GET和POST方法, 请求参数格式要么JSON,要么XML, 所以我在第一次封装dio http请求时用了四个方法:Get with Json, GET with XML, Post with Json, Post with xml。

    完成后发现好多重复代码,于是就相办法把四个方法合并成一个方法,调用的时候传入需要的参数即可

    譬如 请求method, 可传入“GET”, 或“POST”,

            请求参数类型contentType  可传入“JSON” 或“XML”   

            回调函数  onSuccess, onError

        

    具体代码如下

    
    import 'dart:convert' show json;
    
    import 'dart:io';
    
    
    
    import 'package:dio/dio.dart';
    
    
    
    class DioUtils {
    
      /// global dio object
    
      static Dio dio;
    
      /// http request methods
    
      static Map<String, dynamic> jsonHeaders = {
    
        'Accept': 'application/json,*/*',
    
        'Content-Type': 'application/json',
    
      };
    
    
    
      static Map<String, dynamic> xmlHeaders = {
    
        'Accept': 'application/xml,*/*',
    
        'Content-Type': 'application/xml;charset=UTF-8',
    
      };
    
    
    
      static void requestHttp<T>(String url,   //请求地址url
    
          {parameters,  //get 请求时的param list
    
          method, // “GET” 或者 “POST”
    
          data, // post 请求时上传的数据
    
          contentType, // 请求data 是 json 或者 xml
    
          Function(T t) onSuccess, //请求成功时的回调函数
    
          Function(String error) onError //请求失败时的回调函数
    
          }) async {
    
        method = method ?? 'GET';
    
        contentType = contentType ?? 'JSON';
    
    
    
        Map<String, dynamic> httpHeaders;
    
        if (contentType == 'XML') {
    
          httpHeaders = jsonHeaders;
    
        } else {
    
          httpHeaders = xmlHeaders;
    
        }
    
    
    
        var options = BaseOptions(
    
            connectTimeout: 3000,
    
            receiveTimeout: 3000,
    
            responseType: ResponseType.json,
    
            validateStatus: (status) {
    
              // 不使用http状态码判断状态,使用AdapterInterceptor来处理(适用于标准REST风格)
    
              return true;
    
            },
    
            baseUrl: "");
    
    
    
        try {
    
          if (dio == null) {
    
            dio = new Dio(options);
    
          }
    
          dio.options.headers = httpHeaders;
    
          Response response;
    
          if (method == "GET") {
    
            if (parameters == null) {
    
              response = await dio.get(url);
    
            } else {
    
              response = await dio.get(url, queryParameters: parameters);
    
            }
    
          } else if (method == "POST") {
    
            if (data == null) {
    
              response = await dio.post(url);
    
            } else {
    
              response = await dio.post(url, data: data);
    
            }
    
          }
    
          var responseData = response.data;
    
          if (response.statusCode == 200) {
    
            if (onSuccess != null) {
    
              onSuccess(responseData);
    
            }
    
          } else {
    
            throw Exception('erroMsg:${response.statusCode}');
    
          }
    
          print('响应数据:' + response.toString());
    
        } catch (e) {
    
          print('请求出错:' + e.toString());
    
          if (onError != null) onError(e.toString());
    
        }
    
      }
    
    }

    GET  方法调用例子:

    onSuccess(var responseData) {
    
      print("callback funtion onSuccess called");
    
    
    
    }
    
    
    
    onError(var error) {
    
      print("callback funtion onError error:$error");
    
    }
    
    
    
    
    await DioUtils.requestHttp("http://XXXXXXX,
    
        method: "GET",
    
        onSuccess: onSuccess,
    
        onError: onError);

     

    POST 方法调用例子:

     

    g
    onSuccess(var responseData) {
      print("callback funtion onSuccess called");
    
    }
    
    onError(var error) {
      print("callback funtion onError error:$error");
    }
    
    getPageData() async {
      var _data = "<request key=\"xxxxx\">……</request>";
    
      await DioUtils.requestHttp("http://XXXXXXXX",
          data: _data,
          method: "POST",
          contentType: "XML",
          onSuccess: onSuccess,
          onError: onError);
    }
    
     
    以上代码基本上能满足一个简单app的http Get/Post请求。

     

    展开全文
  • 用Flutter编写好登录界面后,我需要将从界面中获取的账号和密码与后端提供的api交互,在这里使用dio实现get请求和post请求的方法。 首先需要在pubspec.yaml中dependencies下添加dio插件,插件版本可以在网上搜索...

    用Flutter编写好登录界面后,我需要将从界面中获取的账号和密码与后端提供的api交互,在这里使用dio实现get请求和post请求的方法。

    首先需要在pubspec.yaml中dependencies下添加dio插件,插件版本可以在网上搜索最新版本;

    添加完插件后,在登录界面所在的文件中添加引用;

    import 'package:flutter/material.dart';
    import 'package:dio/dio.dart';

    添加完引用后,在登录按钮对应的动作中调用与后端交互的方法loadDataByDio();

    onPressed: () {
        if (_formKey.currentState.validate()) {
            ///只有输入的内容符合要求通过才会到达此处
            _formKey.currentState.save();
            //TODO 执行登录方法
            print('Phone:$_phone , Password:$_password');
                loadDataByDio();
        }
    }

    loadDataByDio()方法之get请求如下:

    loadDataByDio() async {
        try {
        print('登陆中');
        Response response;
        Dio dio = new Dio();
        response = await dio.get(
        "接口地址?phone=$_phone&password=$_password");
        if (response.statusCode == 200) {
            _result = 'success';
            print(_result);
        } else {
            _result = 'error code : ${response.statusCode}';
            print(_result);
        }
        } catch (exception) {
            print('exc:$exception');
        }
        setState(() {});
    }

    loadDataByDio()方法之post请求如下:

    loadDataByDio() async {
        try {
        print('登陆中');
        Response response;
        Dio dio = new Dio();
        response = await dio.get(
        "接口地址", data: {"phone": _phone, "password": _password});
        if (response.statusCode == 200) {
            _result = 'success';
            print(_result);
        } else {
            _result = 'error code : ${response.statusCode}';
            print(_result);
        }
        } catch (exception) {
            print('exc:$exception');
        }
        setState(() {});
    }

    最终结果:

    报错情况:

    1、DioError [DioErrorType.RESPONSE]: Http status error [405]

    可能存在的问题:与api要求的请求方式不一致,如api要求使用post请求,但传递给api的确实get请求;

    2、DioError [DioErrorType.RESPONSE]: Http status error [400]

    可能存在的问题:请求的参数出错,可能是参数名称、参数类型与api中规定的不一致;

    展开全文
  • 因为首次用这种方式,感觉也是比较坑,后面通过摸索,查看源码发现,需要用fromdata方式包装进去放到请求参数中。 正确的做法应该是如下图: 在初始化中进行数据格式的设置, static Dio _instance() { Map<...
  • flutter网络dio框架get请求使用总结

    千次阅读 2020-06-04 19:41:36
    本文章将讲述 1.使用dio发送基本的get请求 2.使用dio发送get请求的传参方式 3.解析响应json数据
  • Flutter之dio数据请求

    千次阅读 2019-03-18 22:59:39
    dio 数据请求 注意:Flutter 官方提供了 HttpClient 发起的请求,但 HttpClient 本身功能较弱,很多常用功能都不支持。 所以,官方建议使用 dio 来发起网络请求,它是一个强大易用的 dart http 请求库,支持 Restful...
  • 但好在dio有定义好的cookie管理库 dio.interceptors.add(CookieManager(CookieJar())); 但是你知道的,有的后台cookie不知道会给你放在哪····而且要是用session和token就没办法了,这次遇到的问题是在 options...
  • import 'package:dio/dio.dart'; import 'package:flustars/flustars.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'dart:convert' as convert; class HttpGo { static fi.
  • Flutter Dio包网络请求抓包解决方案

    千次阅读 2020-08-17 11:59:26
    在Flutter中进行网络请求时,我们可以使用的库有3个,即Http请求库、HttpClient请求库和Dio请求库(详细介绍请参考:Flutter开发之Http网络请求),使用得最多的就是Dio请求库。因为相比Http请求库和HttpClient请求...
  • flutter中网络请求dio使用分析

    千人学习 2020-02-28 11:22:45
    本课程讲述在 flutter 跨平台开发中,网络请求构架 dio 的基本使用,有如下内容分析  flutter 中 dio get、post、put 请求  flutter 异步请求方式使用与封装接口回调 dio 设置网络代理  dio 设置拦截...
  • 网络请求作为应用中必不可少的功能,是必须掌握的,在app中我们可能会书写大量的网络请求的操作,为了书写和维护方面的考虑,我们一般都会对网络请求进行封装,但是目前网上很多关于dio网络请求封装的示例个人感觉...
  • 系列阅读 Flutter(一) 安装部署与认识Dart语言 Flutter(二)Android集成Flutter项目并实现跳转到 Flutter 界面 Flutter(三)Flutter与Android原生Activity交互及传递​​数据 ...dio是一个Flutter的网络请求...
  • flutter中网络请求一般使用 Dio库,下面我就来基于Dio库做一下简单封装和使用实例以及遇到的问题。 具体请去官网l了解:https://pub.dev/packages/dio 首先在项目的 pubspec.yaml文件中 引入相关库: # 网络...
  • Flutter之dio网络请求--生成bean

    千次阅读 2019-01-15 17:30:59
      引入dio以及jsonAnnotation做数据解析使用。 dependencies: flutter: sdk: flutter cupertino_icons: ^0.1.2 json_annotation: ^1.2.0 dio: ^1.0.6 dev_dependencies: flutter_test: sdk: flut...
  • Flutter 网络请求框架dio使用详解

    万次阅读 2019-11-01 16:12:11
    dio是一款Flutter 网络请求框架,在GitHub上目前有超过5.9k个star。由国人(Flutter中文网)开发,所以中文文档非常完善。 这里copy了dio官方的文档,便于自己开发时查阅,基于dio 3.0.4版本,若想查看最新版本文档...
  • > 本文章将讲述 > 1.使用dio发送基本的get请求 > 2.使用dio发送get请求的传参方式 > 3.解析响应json数据 > 4....> 5....> 6....> 7....> 8....> 9....> 10.配制dio请求header以及公共请求参数 > 11.dio 取消网络请求
  • 前言Flutter官方建议您使用 dio 来发起网络请求,在学习过程中,也尝试过用dart io中的HttpClient发起的请求,这里主要讲一下dio的使用以及CookieJar、CookieManager管理cookie。diodio是一个强大易用的dart http...
  • Dio是一个强大的Dart Http请求库,支持拦截器,全局配置,FormData,请求取消,文件下载,超时等。 添加依赖 在pubspec.yaml中添加依赖。 dependencies: dio: 2.1.7 import 'package:dio/dio.dart'; class ...
  • 前面关于Flutter的讲解部分我把关于flutter的基础入门部分带着大家梳理了一遍,那从本篇博客开始,我们开始进入新的领域,也算是给进阶篇开个头,今天我们来一块学习一下Flutter中的网络请求库--->`Dio`,关于...
  • Flutter http请求dio稳定版发布

    千次阅读 2019-02-28 09:40:31
    dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等... 自dio开源至今,收到了大量国内外开发者的反馈,到目前为止,dio在pub...
  • dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等… 添加依赖,注意3.0.+是不兼容升级 dependencies: dio: ^3.0.9 一个极简示.
  • 引入库:dio: ^2.1.13 可直接运行的代码:包含了post,get 下载文件 import 'package:flutter/material.dart'; import 'package:dio/dio.dart'; void main() { runApp(new MaterialApp( title: 'Container ...
  • dio库支持文件的上传和下载,Cookie管理、FormData、请求/取消、拦截器等,和Android中的OkHttp库相似 基本用法 import 'package:dio/dio.dart'; _loadDataGet() async {   try {    &...
  • Flutter Dio 网络接口与请求数据

    千次阅读 2019-11-16 10:24:37
    Flutter Dio 网络接口与请求数据 想了想,感觉没什么好说的,像什么get,post,delete,download啥的,基本插件的使用文档都有,没什么好说的,但是我们实际项目写的时候,可不能那样写,容易引起别人笑话,所以说最...
  • Dio支持Restful API、formData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等 二 Dio 2.1 地址信息 GitHub地址:https://github.com/flutterchina/dio pub地址:...
  • 以下有dialog 自行删除...import 'package:dio/dio.dart'; import 'dart:convert'; import 'package:cookie_jar/cookie_jar.dart'; import 'package:fl_wuliu/common/app_global.dart'; import 'package:fl_wuliu/co...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,532
精华内容 612
关键字:

dio的请求参数