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

感兴趣的同学学起来吧!

相关推荐
通信侠1 小时前
android下拉栏添加媒体音量调节
android
CYRUS_STUDIO4 小时前
逆向 JNI 函数找不到入口?动态注册定位技巧全解析
android·逆向·源码阅读
sean9087 小时前
Flutter 学习 之 const
flutter·dart·const
whysqwhw8 小时前
Egloo 中Kotlin 多平台中的 expect/actual
android
程序员老刘8 小时前
智能体三阶:LLM→Function Call→MCP
flutter·ai编程·mcp
用户2018792831678 小时前
《Android 城堡防御战:ProGuard 骑士的代码混淆魔法》
android
用户2018792831678 小时前
🔐 加密特工行动:Android 中的 AES 与 RSA 秘密行动指南
android
liang_jy9 小时前
Android AIDL 原理
android·面试·源码
用户20187928316710 小时前
Android开发的"魔杖"之ADB命令
android
_荒10 小时前
uniapp AI流式问答对话,问答内容支持图片和视频,支持app和H5
android·前端·vue.js