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

感兴趣的同学学起来吧!

相关推荐
像风一样自由202016 分钟前
量化压缩实战:INT8 / INT4 / AWQ / GPTQ 全面对比
android·人工智能·语言模型·大模型
brycegao32140 分钟前
Android MVI进阶:纯原生实现Slot化可插拔架构
android·kotlin·架构设计·mvi·viewmodel
2601_961194021 小时前
27考研资料|百度网盘|夸克网盘
android·xml·考研·ios·iphone·xcode·webview
故渊at1 小时前
第二板块:Android 四大组件标准化学理 | 第十篇:ContentProvider 数据共享与 SQLite 引擎
android·jvm·数据库·sqlite·contentprovider
Kapaseker1 小时前
你遇到过 Kotlin 协程中的竞争问题吗?
android·kotlin
与水同流1 小时前
Android13 AIDL HAL服务实现Demo
android·hal·aidl
吴梓穆2 小时前
Python 基础语法2 if 运算符 循环
android·开发语言·python
流星白龙2 小时前
【MySQL高阶】27.事务(2)-锁
android·mysql·adb
我命由我123452 小时前
Kotlin 开发 - Kotlin 反引号转义关键字
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
码云骑士2 小时前
【1.2Java基础】Win10环境变量配置详解-从原理到排雷
android·java