IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter Dio源码分析(一)--Dio介绍 -> 正文阅读

[移动开发]Flutter Dio源码分析(一)--Dio介绍

文章系列

Flutter Dio源码分析(一)–Dio介绍

Flutter Dio源码分析(二)–HttpClient、Http、Dio对比

Flutter Dio源码分析(三)–深度剖析

Flutter Dio源码分析(四)–封装

视频系列

Flutter Dio源码分析(一)–Dio介绍视频教程

Flutter Dio源码分析(二)–HttpClient、Http、Dio对比视频教程

Flutter Dio源码分析(三)–深度剖析视频教程

Flutter Dio源码分析(四)–封装视频教程

源码仓库地址

github仓库地址

前言

Flutter中网络请求有三种实现方式

  1. 系统自带的HttpClient

  2. 网络请求第三方库Http

  3. 网络请求第三方库Dio

    Dio是目前比较流行的网络请求库,里面包含了很多如 Restful API拦截器自定义适配器实现无缝切换其他网络库 等操作。

目的

本文主要是对Dio网络请求库进行源码分析,最后会对Dio封装一个通用且使用方便的类。

本文中所用到的所有网络请求均为请求本地网络请求,目的是为了方便调试,由SpringBoot驱动。

Dio介绍

dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等。

关键词解释

1、Restful API

1.1 API

API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。 目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

1.2 REST

REST即表述性状态传递(英文:Representational State Transfer,简称REST)。简单来说,就是用URI表示资源,用HTTP方法(GET, POST, PUT, DELETE)表征对这些资源的操作。

2、FromData

Dio支持发送FormData, 请求数据将会以 multipart/form-data方式编码, FormData中可以一个或多个包含文件。主要目的用于文件上传操作。

注意: 只有 post 方法支持发送 FormData.

3、拦截器

每个 Dio 实例都可以添加任意多个拦截器,他们组成一个队列,拦截器队列的执行顺序是FIFO先进先出原则。通过拦截器你可以在请求之前、响应之后和发生异常时(但还没有被 thencatchError处理)做一些统一的预处理操作。

4、请求取消

可以通过 cancel token 来取消发起的请求。

5、Cookie管理

CookieManager 拦截器可以帮助我们自动管理请求、响应 cookie。

6、文件上传/下载

Dio支持单文件和多文件的上传

7、超时

Dio可设定超时时间,当在约定时间内未响应,将报错。

8、自定义适配器

内置的适配器可无缝切换到别的请求库而不用改之前的代码。

如何使用

步骤一:添加依赖

dependencies:
  dio: ^4.0.0 

步骤二:发送请求

import 'package:dio/dio.dart';
void _sendDioGet() async {
  try {
    var response = await Dio().get('http://localhost:8080/getUserInfo');
    print(response);
  } catch (e) {
    print(e);
  }
}

完整示例代码

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';

class DioExample extends StatelessWidget {

  void _getUserInfo() async {
    try {
      var response = await Dio().get('http://localhost:8080/getUserInfo');
      print(response);
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("DioExample"),
      ),
      body: Center(
        child: Column(
          children: [
            TextButton(
              onPressed: _getUserInfo,
              child: Text("发送get请求"),
            )
          ],
        ),
      ),
    );
  }
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:33:43  更:2021-08-31 15:35:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/4 15:29:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码