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请求的使用。为后续实战打好基础。

感兴趣的同学学起来吧!

相关推荐
AI大法师5 小时前
Android应用性能监测与调优:掌握Profiler和LeakCanary等关键工具
android
2501_9151063210 小时前
iOS混淆工具实战 金融支付类 App 的安全防护与合规落地
android·ios·小程序·https·uni-app·iphone·webview
alexhilton11 小时前
运行时着色器实战:实现元球(Metaballs)动效
android·kotlin·android jetpack
從南走到北12 小时前
JAVA国际版东郊到家同城按摩服务美容美发私教到店服务系统源码支持Android+IOS+H5
android·java·开发语言·ios·微信·微信小程序·小程序
LinXunFeng12 小时前
Flutter - 详情页初始锚点与优化
前端·flutter·开源
苦逼的搬砖工13 小时前
Flutter 文本输入:让用户与你的应用对话
flutter
苦逼的搬砖工13 小时前
Flutter Text 组件深度解析:从入门到精通
flutter
苦逼的搬砖工13 小时前
# 🎨 Flutter UI 组件深度指南
flutter
观熵14 小时前
Android 相机系统全景架构图解
android·数码相机·架构·camera·影像
Huntto14 小时前
在Android中使用libpng
android