Flutter网络请求Dio库的使用及封装方法
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"Flutter网络请求Dio库的使用及封装方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Flutter网络请求Dio库的使用及
千家信息网最后更新 2026年11月01日Flutter网络请求Dio库的使用及封装方法
这篇文章主要讲解了"Flutter网络请求Dio库的使用及封装方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Flutter网络请求Dio库的使用及封装方法"吧!
Dart语言内置的HttpClient实现了基本的网络请求相关的操作。但HttpClient本身功能较弱,很多网络请求常用功能都不支持,因此在实际项目中,我们更多是使用dio库实现网络请求。
注:Flutter官网同样推荐在项目中使用Dio库。
Dio文档地址: pub.dev地址:dio | Dart Package
一、项目目录结构
| 文件夹 | 功能 |
|---|---|
| components | 放置全局共用组件 |
| router | 全局路由管理 |
| service | 管理接口请求并对返回数据进行处理,复杂功能逻辑处理 |
| store | provider全局状态管理 |
| utile | 工具类,例如:接口请求工具类,数据持久化工具类,加密解密工具类…… |
| views | 界面管理,实现界面UI绘制的代码逻辑 |
二、封装思路:
1、在DioRequest工具类中统一初始化网络请求常见配置,实现请求拦截器、响应拦截器以及错误处理。
2、统一在service中管理接口请求,并且对返回的数据根据实际需求进行处理,如果数据的修改需要更新UI或者需要全局共享该数据,可以结合provider实现。
三、添加依赖
在pubspec.yaml文件中添加所需要的第三方依赖库
dev_dependencies: flutter_test: sdk: flutter # The "flutter_lints" package below contains a set of recommended lints to # encourage good coding practices. The lint set provided by the package is # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. flutter_lints: ^1.0.0 # 数据请求 dio: ^4.0.4
四、简单实现网络请求
在utils目录中新建dio_request.dart文件实现DioRequest网络请求的工具类。
import 'package:dio/dio.dart';/// dio网络请求配置表 自定义class DioConfig { static const baseURL = 'http://117.34.71.31:8081/paas-admin'; //域名 static const timeout = 10000; //超时时间} // 网络请求工具类class DioRequest { late Dio dio; static DioRequest? _instance; /// 构造函数 DioRequest() { dio = Dio(); dio.options = BaseOptions( baseUrl: DioConfig.baseURL, connectTimeout: DioConfig.timeout, sendTimeout: DioConfig.timeout, receiveTimeout: DioConfig.timeout, contentType: 'application/json; charset=utf-8', headers: {}); /// 请求拦截器 and 响应拦截机 and 错误处理 dio.interceptors.add(InterceptorsWrapper(onRequest: (options, handler) { print("\n================== 请求数据 =========================="); print("url = ${options.uri.toString()}"); print("headers = ${options.headers}"); print("params = ${options.data}"); return handler.next(options); }, onResponse: (response, handler) { print("\n================== 响应数据 =========================="); print("code = ${response.statusCode}"); print("data = ${response.data}"); print("\n"); handler.next(response); }, onError: (DioError e, handler) { print("\n================== 错误响应数据 ======================"); print("type = ${e.type}"); print("message = ${e.message}"); print("\n"); return handler.next(e); })); } static DioRequest getInstance() { return _instance ??= DioRequest(); }}五、实现登录注册服务
在lib下新建service目录,并在service目录中新建login.dart文件。
import 'dart:convert';import 'package:cyber_security/utils/http.dart';class LoginService { /// 获取用户数据中心列表 static Future getDataCenter() async { var response = await DioRequest.getInstance().dio.get('/getDataCenter'); var data = jsonDecode(response.toString()); return data['dataCenterList']; } /// 登录接口 static login(value) async { var response = await DioRequest.getInstance() .dio .post('/sys/login', queryParameters: value); var data = jsonDecode(response.toString()); /// 对返回的身份凭证全局持久化存储 return data['key']; } /// 获取权限列表 static menuNav() async { var response = await DioRequest.getInstance().dio.get('/sys/menu/nav'); var data = jsonDecode(response.toString()); return data['key']; }}
六、使用service服务
@override void initState() { // TODO: implement initState super.initState(); /// 请求用户数据中心数据 LoginService.getDataCenter().then((value) { setState(() { _dataCenterList = value; }); }); }感谢各位的阅读,以上就是"Flutter网络请求Dio库的使用及封装方法"的内容了,经过本文的学习后,相信大家对Flutter网络请求Dio库的使用及封装方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
网络
数据
工具
封装
全局
处理
管理
方法
功能
接口
文件
目录
错误
项目
拦截器
学习
内容
地址
实际
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技
中智农互联网科技
重生之互联网科技帝国
新华互联网科技学院
互联网科技卖菜
互联网科技的
互联网金融与金融科技
深圳齐家互联网科技
美国互联网黑科技
互联网科技网站
科技互联网创业计划书
互联网科技股有哪些
互联网科技创新企业排名
迪庆互联网科技招生
爱医互联网络科技
工业互联网展湾科技股份有限公司
互联网与数字科技关系
吉林省码上互联网科技电话
数字互联网科技有限公司
广西泛欧互联网科技有限公司
手磨咖啡
广州紫鲸互联网科技有限公司
互联网科技卖菜
互联网科技战争
科技与互联网发展
鑫亿盛互联网科技
成都仁贤领冠互联网科技有限公司
中化能源互联网科技招聘
科技互联网大厂
科技互联网专业工作会议发言稿