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

感兴趣的同学学起来吧!

相关推荐
Rex叶然4 小时前
ScreenMatch适配安卓屏幕脚本,用于老项目
android·screenmatch·安卓屏幕适配
阿pin4 小时前
Android随笔-Activity启动流程深度分析
android·activity启动流程
zzq77975 小时前
加固包闪退四象限定位:targetSdk 与保护策略实战解析
android·安全·安卓·安全架构
SharpCJ5 小时前
Dart 基础入门
flutter·dart
我命由我123456 小时前
Android 开发问题:Cannot resolve method ‘repeat‘ in ‘String‘
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
光头闪亮亮7 小时前
Fyne ( go跨平台GUI )项目实战-scanner摄像头扫码组件开发技术详解
android·go
Android打工仔7 小时前
Continuation 到底是谁创建的?
android·kotlin
DeepAgent8 小时前
AI Agent 工程实践(17):Agent 为什么需要可观测性(Observability)?
android·llm·agent
提笔了无痕8 小时前
MySQL SQL 从 EXPLAIN 到索引优化,搞懂 SQL 为什么慢
android·sql·mysql
zhangphil8 小时前
Android OAID是什么?有什么功用?
android