Flutter Dio 简单封装demo

 更新时间:2023年07月27日 10:39:36   作者:大虾啊啊啊  
这篇文章主要为大家介绍了Flutter Dio简单封装示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

 Flutter Dio封装

import 'package:dio/dio.dart';
import 'package:path_provider/path_provider.dart';
import 'package:znw/app/net/url_config.dart';
class HttpClient {
  late Dio dio;
  static HttpClient instance = HttpClient._internal();
  ///工厂构造函数与普通构造函数的区别在于,
  ///工厂构造函数可以自定义实例的创建过程,并根据需要返回一个新的对象或现有的对象。
  factory HttpClient() {
    return instance;
  }
  HttpClient._internal() {
    print('构造函数。。。。。。。。。。。。。。');
    dio = Dio();
    dio.options.baseUrl = UrlConfig.BASE_URL;
    dio.options.connectTimeout = 8000;
    dio.interceptors.add(LogInterceptor(responseBody: true)); // 输出响应内容体
  }
  /// get请求
  Future<Response?> get(String url, {Map<String, dynamic>? map}) async {
    try {
      var result = await dio.get(url, queryParameters: map);
      return result;
    } catch (e) {
      print('HttManager get e $e }');
      return null;
    }
  }
  ///post请求
  Future<Response?> post(String url, Map<String, dynamic>? map) async {
    try {
      var result = await dio.post(url, queryParameters: map);
      return result;
    } catch (e) {
      print('HttManager post e $e }');
      return null;
    }
  }
  ///上传文件 fileName 文件名字 fileDir 文件路径  formData 自定义参数
  Future<Response?> uploadFile(String url, String? fileName, String fileDir,
      Map<String, dynamic> formData) async {
    try {
      formData['file'] =
          await MultipartFile.fromFile(fileDir, filename: fileName);
      var response = await dio.post(url, data: formData);
      print(response.data);
      return response;
    } catch (e) {
      return null;
    }
  }
  ///下载文件 downLoadPath下载路径,
  ///fileName 下载之后生成的文件名字,
  ///onProgress 下载进度
  ///onFinish 下载完成
  downLoad(
      String downLoadPath,
      String fileName,
      Function(int count, int total) onProgress,
      Function(String path) onFinish,
      Function(DioError e) onError) async {
    final directory = await getExternalStorageDirectory();
    String localPath = directory!.path;
    String savePath = "$localPath/$fileName";
    String apkUrl = downLoadPath;
    ///参数一 文件的网络储存URL
    ///参数二 下载的本地目录文件
    ///参数三 下载监听
    try {
      await dio.download(apkUrl, savePath,
          onReceiveProgress: (received, total) {
        if (total != -1) {
          ///当前下载的百分比例
          print("${(received / total * 100).toStringAsFixed(0)}%");
          onProgress(received, total);
        }
      });
      onFinish(savePath);
      print(savePath);
    } on DioError catch (e) {
      // 异常处理代码
      onError(e);
    }
  }
}

代码解释都在注释里啦~

以上就是Flutter Dio 简单封装demo的详细内容,更多关于Flutter Dio封装的资料请关注脚本之家其它相关文章!

相关文章

  • Android串口通信apk源码详解(附完整源码)

    Android串口通信apk源码详解(附完整源码)

    这篇文章主要介绍了Android串口通信apk源码详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Android事件与手势操作详解

    Android事件与手势操作详解

    现在程序都是通过事件实现人机交互的。事件:用于对图形界面的操作,有物理按键事件和触摸屏事件两大类。在Android组件中提供了事件处理的相关方法,如在View类中提供onTouchEvent()方法重写触摸屏事件,setOnTouchListener()方法为组件设置监听器来处理触摸屏事件
    2022-12-12
  • Android5.0中JobScheduler的使用方法

    Android5.0中JobScheduler的使用方法

    Android 5.0中如何使用JobScheduler API,这篇文章主要介绍了Android5.0中JobScheduler的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 解析Android开发优化之:软引用与弱引用的应用

    解析Android开发优化之:软引用与弱引用的应用

    Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用,本篇文章重点介绍一下软引用和弱引用
    2013-05-05
  • Android实现图片点击爆炸效果

    Android实现图片点击爆炸效果

    这篇文章主要为大家详细介绍了Android实现图片点击爆炸效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • android 6.0下webview的定位权限设置方法

    android 6.0下webview的定位权限设置方法

    今天小编就为大家分享一篇android 6.0下webview的定位权限设置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Android WebView或手机浏览器打开连接问题解决办法总结

    Android WebView或手机浏览器打开连接问题解决办法总结

    这篇文章主要介绍了Android WebView或手机浏览器打开连接问题解决办法总结的相关资料,需要的朋友可以参考下
    2017-03-03
  • Android实现加载圈

    Android实现加载圈

    这篇文章主要为大家详细介绍了Android实现加载圈,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 详解Android Flutter中SliverAppBar的使用教程

    详解Android Flutter中SliverAppBar的使用教程

    对于一个APP来说,肯定会有一个AppBar,这个AppBar一般包含了APP的导航信息等。在lutter已经为我们提供了一个非常强大的AppBar组件,这个组件叫做SliverAppBar。本文就来聊聊它的具体使用吧
    2023-01-01
  • 详解kotlin中::双冒号的使用

    详解kotlin中::双冒号的使用

    在 Kotlin 中 , :: 双冒号操作符 的作用是获取类,对象,函数,属性的 类型对象引用,这篇文章主要介绍了详解kotlin中::双冒号的使用,需要的朋友可以参考下
    2023-04-04

最新评论