16、Flutter - 网络请求 dio 及其他

Flutter - 网络请求 dio

 

详细代码参见Demo

Demo地址 -> flutter_isolatedemo

dio 是国人开发的一个网络请求的插件,对http 进行了封装 。同时有中文的文档可以查阅,是比较方便易用的。

pub.dev 地址:

https://github.com/flutterchina/dio/blob/master/README-ZH.md

 

1、导入 dio 插件


2、导入头

http 里面有get post 请求
dio 也有get 和 post 请求就会冲突报错,所以在引入包的时候就需要加上 as
as 是为了解决方法名冲突的问题!通过重命名 .方法名  调用

import 'package:wechat/tools/http_manager.dart' as http;

import 'package:http/http.dart' as http;

hide 隐藏某个不要导入的方法
show 只导入某些内容
 

3、pubspec.yaml

name: wechat
description: A new Flutter application.
publish_to: 'none'
version: 1.0.0+1


name             是项目名称
description  项目描述
publish_to    发包位置,默认是pub.dev  ‘none’ 是阻止发布
version:        项目版本号

 

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.3
  http: 0.12.1
  dio: ^3.0.9
  image_picker: ^0.6.7

dev_dependencies:
  flutter_test:
    sdk: flutter

dependencies:
dev_dependencies:
这两个都是放第三方插件的

dependencies  是这里加入的插件,打包发布的时候都会打包进入并发布
dev_dependencies  仅仅在开发调试的时候用,打包的时候并不会放进去

http: 0.12.1   #指定版本
dio: ^3.0.9   #大版本不变的区间写法 相当于‘>=3.0.9  <4.0.0’
#dio: ‘>3.0.9’  # 大于3.0.9
#dio: any  #任意版本,很好用到
#dio:“>=3.0.9 <4.0.0”

 

4、网络请求 dio

import 'dart:async';
import 'dart:io';
import 'dart:isolate';

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

void main() {
  testDioDemo(); //网络请求
}
// ******************************* 网络请求 ****************************

void testDioDemo() {
  dioDemo(); //get请求
  dioDemo1(); //下载
}

4.1、 get

//-------------------------------- get请求 -----------------------------
void dioDemo() {
//  1、创建dio 对象
  final dio = Dio();
//2、发送请求
  dio.get('http://www.baidu.com').then((value) => print(value));
}

get 请求,请求得到的就是百度的HTML

flutter: <!DOCTYPE html><!--STATUS OK-->


    <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#2932e1"><meta name="description" content="全球最大的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /><link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml" title="百度搜索" /><link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu_85beaf5496f291521eb75ba38eacbd87.svg"><link rel="dns-prefetch" href="//dss0.bdstatic.com"/><link rel="dns-prefetch" href="//dss1.bdstatic.com"/><link rel="dns-prefetch" href="//ss1.bdstatic.com"/><link rel="dns-prefetch" href="//sp0.baidu.com"/><link rel="dns-prefetch" hre<…>
Debug service listening on ws://127.0.0.1:57662/cW6lCv98F50=/ws

 

4.2、下载

//-------------------------------- 下载请求 -----------------------------
void dioDemo1() {
//  1、创建dio 对象
  final dio = Dio();
//  2、下载数据
  final downloadUrl =
      'http://pub.idqqimg.com/pc/misc/groupgift/fudao/CourseTeacher_1.3.16.80_DailyBuild.dmg';
//  3、下载存储路径好保存的文件名,如果路径中有不存在的文件夹,会自动创建
  String savePath = '/Users/liujilou/Desktop/腾讯课堂.dmg';
//  获取沙盒路径
  String savePath2 = Directory.systemTemp.path + '/腾讯课堂.dmg';
  print(savePath2);

  download1(dio, downloadUrl, savePath);
}

download 里面的 savePath 可以是一个字符串,也可以是一个回调
4.2.1、savePath 字符串

// download 里面的 savePath 可以是一个字符串,也可以是一个回调
// savePath 字符串 --------------------------------------
void download1(Dio dio, String downloadUrl, String savePath) {
  dio
      .download(downloadUrl, savePath, onReceiveProgress: showDownloadProgress)
      .then((value) => print(value))
      .whenComplete(() => print('结束了'));
}

4.2.2、savePath 回调

// savePath 回调 --------------------------------------
void download2(Dio dio, String downloadUrl, String savePath) {
//  onReceiveProgress 监听进度
  dio.download(downloadUrl, (header) {
    return savePath;
  }, onReceiveProgress: showDownloadProgress);
}

下载的进度

//下载的进度
void showDownloadProgress(int count, int total) {
//  toStringAsFixed 取整不要小数
// count 当前下载大小, total 总大小
  if (total != -1) {
    print((count / total * 100).toStringAsFixed(0) + "%");
  }
}

dio的下载使用get 也能实现,但是dio提供的有专门下载同时有下载进度所以就使用功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值