美文网首页
Flutter - 网络请求

Flutter - 网络请求

作者: hyq1101 | 来源:发表于2022-12-08 11:48 被阅读0次

1、dio三方库
dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等...
dio三方库github地址:https://github.com/flutterchina/dio

2、添加依赖
使用dio三方库需要先在pubspec.yaml中依赖它


image.png

3、dio库封装
confic.dart

class HttpConfig {
  static const String baseUrl = "";
  static const int timeout = 超时时长;
}

http_request.dart

import 'package:dio/dio.dart';
import 'package:learn_flutter/service/config.dart';

class HttpRequest {
  static final BaseOptions baseOptions = BaseOptions(baseUrl: HttpConfig.baseUrl, connectTimeout: HttpConfig.timeout);
  static final Dio dio = Dio(baseOptions);
  static Future<T> request<T>(String url, {String method = "get", Map<String, dynamic>? params, Interceptor? inter}) async {
    // 1、创建单独配置
    final options = Options(method: method);
    // 全局拦截器
    // 创建默认的全局拦截器
    // 2.添加第一个拦截器
    Interceptor dInter = InterceptorsWrapper(
        onRequest: (options, handler) {
          print("请求拦截");
          // Do something before request is sent
          return handler.next(options); //continue
          // 如果你想完成请求并返回一些自定义数据,你可以resolve一个Response对象 `handler.resolve(response)`。
          // 这样请求将会被终止,上层then会被调用,then中返回的数据将是你的自定义response.
          //
          // 如果你想终止请求并触发一个错误,你可以返回一个`DioError`对象,如`handler.reject(error)`,
          // 这样请求将被中止并触发异常,上层catchError会被调用。
        },
        onResponse: (response, handler) {
          print("响应拦截");
          // Do something with response data
          return handler.next(response); // continue
          // 如果你想终止请求并触发一个错误,你可以 reject 一个`DioError`对象,如`handler.reject(error)`,
          // 这样请求将被中止并触发异常,上层catchError会被调用。
        },
        onError: (DioError e, handler) {
          print("错误拦截");
          // Do something with response error
          return  handler.next(e);//continue
          // 如果你想完成请求并返回一些自定义数据,可以resolve 一个`Response`,如`handler.resolve(response)`。
          // 这样请求将会被终止,上层then会被调用,then中返回的数据将是你的自定义response.
        }
    );


    List<Interceptor> inters = [dInter];
    if (inter != null) {
      inters.add(inter);
    }
    dio.interceptors.addAll(inters);
    // 2、发送网络请求
    try {
      Response response = await dio.request(url, queryParameters: params, options: options);
      return response.data;
    } on DioError catch(e) {
      return Future.error(e);
    }
  }
}

代码调用:

HttpRequest.request("接口地址", method: "get",).then((value) {
      print(value);
    }).catchError((onError) {
      print(onError);
    });

相关文章

  • Flutter 网络请求框架封装

    Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 Htt...

  • Flutter 网络请求框架封装

    Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 Htt...

  • Flutter常用的Package

    Flutter搜索库 网络 dio 网络请求 http 网络请求 connectivity 网络状态改变(i...

  • flutter网络请求封装

    Flutter 网络请求框架封装

  • Flutter dio网络请求需在请求secret后的方式二:匿

    上一篇: Flutter dio网络请求需在请求secret后的方式一:请求时判断下一篇Flutter dio网络...

  • flutter抓包

    前言 老项目集成flutter以后,flutter页面网络请求使用的dio框架,发现charles无法抓取请求包 ...

  • Flutter 网络请求

    HttpClient(Dart内置API) http第三方库 Dio第三方库 1.HttpClient(Dart内...

  • Flutter网络请求

    在Flutter中常见的网络请求方式有三种:HttpClient、http库、dio库;注意:async 和 aw...

  • flutter网络请求

    在flutter中进行网络请求有多种方式,这里我使用的是dio。dio这个库被封装的很好,使用起来也很简单,但为了...

  • Flutter网络请求

    一. 网络请求的方式 在Flutter中常见的网络请求方式有三种:HttpClient、http库、dio库; 1...

网友评论

      本文标题:Flutter - 网络请求

      本文链接:https://www.haomeiwen.com/subject/eitafdtx.html