Flutter基础之网络框架Dio

简介

在Flutter中,虽然官方提供了HttpClient网络请求框架,但是由于其封装性差,使用步骤繁琐。大多数Flutter开发者更喜欢使用简单高效的第三方网络框架Dio。本文主要介绍Dio的引入及基本使用。

引入

在Flutter工程的pubspec.yaml文件中,添加dio最新版本依赖,然后点击编译工具上的提示 Pub get或者命令行输入flutter pub get即可导入库文件。

基本使用

  1. GET请求
dart 复制代码
import 'package:dio/dio.dart';
static _getDataWithDio(String url) async{
    return await Dio().get(url).timeout(const Duration(milliseconds: 3000));
  }

构造函数

dart 复制代码
  Future<Response<T>> get<T>(
    String path,//请求链接
    {
    Object? data,//请求数据
    Map<String, dynamic>? queryParameters, //请求参数
    Options? options,//基本配置
    CancelToken? cancelToken, //取消token
    ProgressCallback? onReceiveProgress, //进度回调
  });
  • path:请求链接
  • data:请求数据
  • queryParameters:请求参数
  • options:基本配置
  • cancelToken:取消token
  • onReceiveProgress:返回数据进度回调
  1. POST请求
dart 复制代码
import 'package:dio/dio.dart';
static _postDataWithDio(String url,Map<String,dynamic> parameters ) async{
    return await Dio().post(url,queryParameters: parameters).timeout(const Duration(milliseconds: 10000));
  }

构造函数

dart 复制代码
Future<Response<T>> post<T>(
    String path, {
    Object? data,
    Map<String, dynamic>? queryParameters,
    Options? options,
    CancelToken? cancelToken,
    ProgressCallback? onSendProgress,
    ProgressCallback? onReceiveProgress,
  });
  • path:请求链接
  • data:请求数据
  • queryParameters:请求参数
  • options:基本配置
  • cancelToken:取消token
  • onSendProgress:发送数据进度回调
  • onReceiveProgress:返回数据进度回调

重要参数

Options可以选择配置各种公共参数。

重要参数如下:

参数名称 类型 参数含义
method String 请求方式:GET,POST
baseUrl String 请求基地址
headers Map<String, dynamic> Http请求头
connectTimeout int (毫秒) 连接超时时间
receiveTimeout int (毫秒) 数据接收超时时间
path String 请求地址
contentType String 请求内容类型,默认默认值是"application/json; charset=utf-8
responseType ResponseType 数据响应类型,默认是json

使用示例

  1. 定义网络请求工具
csharp 复制代码
import 'package:dio/dio.dart';
class ApiManager{
    static getMainKnowledge() async{
    return await _getDataWithDio(_mainKnowledge);
  }
    
   static _getDataWithDio(String url) async{
    return await  Dio().get(url).timeout(const Duration(milliseconds: 10000));
  }
}
  1. 发起网络请求,initState为StateFulWiget的生命周期方法。对StateFulWidget和StatelessWidget不太熟悉的同学可以查看上一篇文章
scss 复制代码
@override
  void initState() {
   _getMainKnowledgeList();
    super.initState();
  }
_getMainKnowledgeList() async {
    Response response = await ApiManager.getMainKnowledge();

    if (response.statusCode == NetCode.succeed) {
      setState(() {
        list.clear();
        list.addAll(MainKnowledge.fromJson(jsonDecode(response.toString())).data);
      });
    }
    _refreshController.refreshCompleted();
  }
  
  1. 展示请求结果内容,这里使用的接口是wan android的接口。

总结

Dio支持的功能很多,支持get,post,formData,拦截器,Cookie,文件上传和下载,还支持进度回调。总之Dio是一个功能强大的Dart网络请求库,本文只是介绍常见的get,post请求的使用。为后续实战打好基础。

感兴趣的同学学起来吧!

相关推荐
文人sec5 小时前
MySQL主库出问题了,从库怎么办?备库为什么会延迟好几个小时?
android·数据库·mysql
淡写成灰5 小时前
「Flutter 文件保存太难了?」一个插件打通 7 大平台,我把方案开源了 🎉
flutter·harmonyos
hai_android5 小时前
不用 AIDL,手把手教你手写 Binder 代理类
android·kotlin
mmsx6 小时前
osmdroid 地图实战 03|地图的"分层世界":离线方案、图层模型与 Overlay 体系
android·前端
张文是假的啊7 小时前
IOC依赖注入问题:@Primary 和 @Qualifier的使用
android
换元不配限7 小时前
ConstraintLayout核心用法详解(三):引导线、屏障、组和占位
android·placeholder·barrier·约束布局·guideline
心平气和量大福大8 小时前
android studio(AS)工具-调试-统计总行数
android·ide·android studio
坚果的博客10 小时前
Flutter 三方库 phone_state 的 OpenHarmony 适配实战
flutter
你的坚定10 小时前
SurfaceFlinger合成一帧的完整流程
android
爱笑鱼12 小时前
Android 系统启动机制(七):进入 SystemServer.main() 以后,system_server 还是一个空进程吗?
android·linux