标签:dio 20 Get 取消 dart 下载 import Flutter dp
一、前言
下载大文件时,不想等待,既可以选择取消下载。预览如下:
二、引用
dio
功能:网络请求。
地址:https://pub.dev/packages/dio
三、使用
如下功能:
- 下载进度条
- 取消下载
import 'dart:async';
import 'dart:io';
import 'package:dio/dio.dart';
/// 第三方
import 'package:get/get.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart';
/// 本地资源
import '../../theme/utils/export.dart';
import '../../utils/widget/common.dart';
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
var _process = 0.0;
late CancelToken token;
/// 主内容
Widget mainBody(BuildContext context){
return Column(
children: [
/// 封装的顶部安全距离
safePadding(context, c_FF),
/// 封装的头部
customerHeader(context, c_FF, "Dio取消请求", leftContent: GestureDetector(
onTap: ()=>Get.back(),
child: Image.asset(
R.imagesCommonBackIcon,
width: 24.dp,
height: 24.dp,
),
)),
Get.getHeightBox(20.dp),
GestureDetector(
onTap: () async {
/// dio使用get下载文件
try{
token = CancelToken(); /// 一定要重新实例化
var response = await Dio().get(
"https://pic.netbian.com/uploads/allimg/180826/113958-153525479855be.jpg",
cancelToken: token,
onReceiveProgress: (num received, num total){ /// 获取下载进度
setState(() {
_process = double.parse('${(received / total).toStringAsFixed(2)}');
});
},
options: Options(
responseType: ResponseType.bytes,
followRedirects: false,
)
);
print(response);
} on DioError catch(e) {
print("response.statusCode: ${e.type}");
}
},
child: Text("请求数据"),
),
Get.getHeightBox(20.dp),
CircularProgressIndicator(
value: _process,
),
Get.getHeightBox(20.dp),
Text("下载进度:${_process*100}%"),
Get.getHeightBox(20.dp),
GestureDetector(
onTap: ()=>{
token.cancel()
},
child: Text("取消请求"),
),
Get.getHeightBox(20.dp),
],
);
}
@override
Widget build(BuildContext context) {
return customerTheme(false, SystemUiOverlayStyle.dark, mainBody(context), boxDecoration: BoxDecoration(
color: c_FC
), willPop: true);
}
}
标签:dio,20,Get,取消,dart,下载,import,Flutter,dp 来源: https://blog.csdn.net/qq_38779672/article/details/122308393
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。