flutter dio网络请求

初始化网络请求

BaseOptions option = BaseOptions();
//初始化cotentType
option.contentType = ContentType.parse("application/json;charset=UTF-8");
//设置请求头参数
option.headers = {'token':'ab2343sdfsdfsfsdf1213123'};
//创建Dio
Dio dio = Dio(option);

发起get或者post请求
get

 /*get请求*/
  static Future<AjaxResult> get(String url, {Map params}) async {
    if (params != null && params.isNotEmpty) {
      // 如果参数不为空,则将参数拼接到URL后面
      StringBuffer sb = StringBuffer("?");
      params.forEach((key, value) {
        sb.write("$key" + "=" + "$value" + "&");
      });
      String paramStr = sb.toString();
      paramStr = paramStr.substring(0, paramStr.length - 1);
      url += paramStr;
    }
    print('url---> $url');
    Dio dio = getDio();
    try {
      Response res = await dio.get(url);
      // var re = Utf8Decoder().convert(res.data);
      final re = AjaxResult.fromJson(json.decode(res.data));
      return re;
    } on DioError catch (e) { 
      print(e);
      FuntionUtil.toast(e.message);
    }
  }

post请求

  static Future<AjaxResult> post(String url, {Map params}) async {
    // final paramsjson = jsonEncode(params);
    print('url---> $url params--->$params');
    Dio dio = getDio();
    try {
      // var body = json.encode(paramsjson);
      Response res = await dio.post(url, data: params);
      print(res);
      final re = AjaxResult.fromJson(json.decode(res.data));
      return re;
      // var re = Utf8Decoder().convert(res.data);
    } on DioError catch (e) {
      print(e);
      FuntionUtil.toast(e.message);
    }
  }

图片上传

static Future<AjaxResult> upload(String url, File imgfile,
      {Map<String, String> params}) async {
    // final paramsjson = jsonEncode(params);
    String path = imgfile.path;
    var name = path.substring(path.lastIndexOf("/") + 1, path.length);
    FormData formData = new FormData.from({
      "Filedata": new UploadFileInfo(File(path), name),
      "size":"0",
      "majia":"zhaowojie",
      // 'Files[]': [new UploadFileInfo(File(path), "sa"),new UploadFileInfo(File(path), name)],
    });

    Dio dio = getDio();
    try {
      // var body = json.encode(paramsjson);
      Response res = await dio.post(url, data: formData);
      print(res);
      final re = AjaxResult.fromJson(json.decode(res.data));
      return re;
    } on DioError catch (e) {
      print(e);
      FuntionUtil.toast(e.message);
    }
  }

完整代码

import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutte_xms/model/ajaxresult.dart';
import 'package:flutte_xms/model/usermodel.dart';
import 'package:flutte_xms/util/func_util.dart';
import 'package:flutte_xms/util/usermanager.dart';

class DioReq {
  /*get请求*/
  static Future<AjaxResult> get(String url, {Map params}) async {
    if (params != null && params.isNotEmpty) {
      // 如果参数不为空,则将参数拼接到URL后面
      StringBuffer sb = StringBuffer("?");
      params.forEach((key, value) {
        sb.write("$key" + "=" + "$value" + "&");
      });
      String paramStr = sb.toString();
      paramStr = paramStr.substring(0, paramStr.length - 1);
      url += paramStr;
    }
    print('url---> $url');
    Dio dio = getDio();
    try {
      Response res = await dio.get(url);
      // var re = Utf8Decoder().convert(res.data);
      final re = AjaxResult.fromJson(json.decode(res.data));
      return re;
    } on DioError catch (e) { 
      print(e);
      FuntionUtil.toast(e.message);
    }
  }

  /*post请求*/
  static Future<AjaxResult> post(String url, {Map params}) async {
    // final paramsjson = jsonEncode(params);
    print('url---> $url params--->$params');
    Dio dio = getDio();
    try {
      // var body = json.encode(paramsjson);
      Response res = await dio.post(url, data: params);
      print(res);
      final re = AjaxResult.fromJson(json.decode(res.data));
      return re;
      // var re = Utf8Decoder().convert(res.data);
    } on DioError catch (e) {
      print(e);
      FuntionUtil.toast(e.message);
    }
  }

  /*图片上传*/
  static Future<AjaxResult> upload(String url, File imgfile,
      {Map<String, String> params}) async {
    // final paramsjson = jsonEncode(params);
    String path = imgfile.path;
    var name = path.substring(path.lastIndexOf("/") + 1, path.length);
    FormData formData = new FormData.from({
      "Filedata": new UploadFileInfo(File(path), name),
      "size":"0",
      "majia":"zhaowojie",
      // 'Files[]': [new UploadFileInfo(File(path), "sa"),new UploadFileInfo(File(path), name)],
    });

    Dio dio = getDio();
    try {
      // var body = json.encode(paramsjson);
      Response res = await dio.post(url, data: formData);
      print(res);
      final re = AjaxResult.fromJson(json.decode(res.data));
      return re;
    } on DioError catch (e) {
      print(e);
      FuntionUtil.toast(e.message);
    }
  }

  static Dio getDio() {
    BaseOptions option = BaseOptions();
    option.contentType = ContentType.parse("application/json;charset=UTF-8");
    //如果用户登录成功 将token带上
    if (UserManager.shared.isLogin) {
      UserInfo info = UserManager.shared.userInfo;
      print('appLoginToken:${info.userId}');
      if (info != null) {
        option.headers = {
          'userId': info.userId,
        };
      }
    }
    return Dio(option);
  }
}

关于AjaxResult Model


const AjaxResultStateSuccess = 0;

class AjaxResult {
  int status;
  String msg;
  Map data;

  AjaxResult({this.status, this.msg, this.data});

  AjaxResult.fromJson(Map<String, dynamic> json) {
    status = json['status'];
    msg = json['msg'];
    data = json['data'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> datas = new Map<String, dynamic>();
    datas['status'] = this.status;
    datas['msg'] = this.msg;
    datas['data'] = this.data;

    return datas;
  }
}

怎么使用 post get upload

   DioReq.post(请求的url, params: {
      'mobile': phone,
      'authCodeType': 1,  
    }).then(
      (res) {
        if (res.status == AjaxResultStateSuccess){
          print('验证码发送成功');
        }else{
          FuntionUtil.toast(res.msg);
        }
      },
    );
    //图片上传
    DioReq.upload(请求的url, forgroundImg).then((res){
      if(res.status == AjaxResultStateSuccess){
          FuntionUtil.toast(res.msg);
          print(res);
      }else{
        FuntionUtil.toast(res.msg);
      }
    });

猜你喜欢

转载自www.cnblogs.com/qqcc1388/p/12371930.html