热门搜索 :
考研考公
您的当前位置:首页正文

Flutter POST/GET网络请求

来源:东饰资讯网

前言

实践

首先我们需要集成dio,在pubspec.yaml文件中添加dio(注意格式):

dependencies:
  flutter:
    sdk: flutter
  dio: ^1.0.6

接下来我们对dio进行封装
1、导入dio包

import 'package:dio/dio.dart';
import 'package:worker_sp/model/Api.dart';// 这个包为自定义Api地址

2、开始对dio进行封装

import 'package:dio/dio.dart';
import 'package:worker_sp/model/Api.dart';
import 'dart:io';

class NetService {
  static const String Base_URL = Api.Base_Url;
  static const String GET = 'GET';
  static const String POST = 'POST';

  //get请求
  static void get(String url, Function successCallBack,
      {Map<String, String> params, Function errorCallBack}) {
    _request(url, successCallBack,
        method: GET, params: params, errorCallBack: errorCallBack);
  }

  //post请求
  static void post(String url, Function successCallBack,
      {Map<String, String> params, Function errorCallBack}) {
    _request(url, successCallBack,
        method: POST, params: params, errorCallBack: errorCallBack);
  }

  // 请求部分
  static void _request(String url, Function callBack,
      {String method, Map<String, String> params, Function errorCallBack}) async {
    String errorMsg = "";
    int statusCode;

    try {
      Response response;
      Options options= new Options(
        // 15s 超时时间
        connectTimeout:15000,
        receiveTimeout:15000,
        baseUrl: Base_URL,
      // dio库中默认将请求数据序列化为json,此处可根据后台情况自行修改
        contentType: new ContentType('application',  'utf-8')
      );
      Dio dio = new Dio(options);

      if (method == GET) {
        response = await dio.get(url,data: params);
      } else {
        response = await dio.post(url,data: params);
      }
      statusCode = response.statusCode;
      //处理错误部分
      if (statusCode < 0) {
        errorMsg = "网络请求错误,状态码:" + statusCode.toString();
        _handError(errorCallBack, errorMsg);
        return;
      }

      if (callBack != null) {
        callBack(response);
        print(response.statusCode);
      }
    } catch (exception) {
      _handError(errorCallBack, exception.toString());
    }
  }
  //处理异常
  static void _handError(Function errorCallback, String errorMsg) {
    if (errorCallback != null) {
      errorCallback(errorMsg);
    }
  }
}
注:在iOS中,允许使用http请求时,需要在plist文件中添加以下内容
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

目前在使用中暂时只使用到GET/POST请求,后续使用到文件上传等其他内容会继续更新。

文章内容有不正确的地方,请指正。感谢!
Top