当前位置: 首页 > news >正文

Flutter —— GetIt、Dio

final GetIt locator = GetIt.instance;

是flutter中依赖注入(DI)框架get_it的核心初始化代码,作用是创建一个全局的依赖注入容器(也叫服务定位器),用来统一管理项目中各类对象(如网络请求实例、数据库实例、viewModel等),实现对象的解耦和复用。

GetIt 就像“全局对象仓库” ,locator是这个仓库的“访问入口”,你可以把对象“存”进去,也可以在项目的任何地方“取”出来,不用手动反复创建实例。

(locator 是 GetIt 实例的常用命名)

示例(结合Dio为例)
第一步:添加依赖

# pubspec.yaml dependencies:get_it:^7.2.0# 最新版本可查 pub.dev dio:^5.4.0

第二步:初始化依赖注入容器
通常在项目入口(如main.dart)初始化:

import'package:get_it/get_it.dart';import'package:dio/dio.dart';// 初始化全局依赖注入容器finalGetItlocator=GetIt.instance;// 注册各类依赖的方法voidsetupLocator(){// 1. 注册**单例**:整个App生命周期只有一个实例(适合 Dio、数据库等)locator.registerLazySingleton<Dio>(()=>Dio()..options.baseUrl='https://jsonplaceholder.typicode.com'..options.connectTimeout=Duration(seconds:5)..interceptors.add(LogInterceptor()));// 示例:添加日志拦截器// 2. 注册**工厂模式**:每次获取都创建新实例(适合一次性使用的对象)// locator.registerFactory(() => UserViewModel());// 3. 注册**延迟单例**(和 registerLazySingleton 类似,首次获取时才创建)// locator.registerSingletonAsync(() async => DatabaseService());}voidmain()async{// 初始化依赖容器setupLocator();runApp(MyApp());}

第三步:在项目任意位置获取依赖

// 页面/组件中获取 Dio 实例classHomePageextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){// 从容器中取出 Dio 实例(全局唯一)finaldio=locator<Dio>();returnElevatedButton(onPressed:()async{// 直接使用注入的 Dio 实例发起请求finalresponse=awaitdio.get('/posts');print(response.data);},child:Text('发起请求'),);}}

Dio

Dio是Flutter/Dart生态中最流行、功能最强大的HTTP网络请求库,可以把它理解为Dart版的axios(前端),专门用于在 Flutter 项目中发起各类 HTTP 请求(GET/POST/PUT/DELETE 等),并提供了拦截器、请求取消、FormData、文件上传 / 下载、超时处理等丰富功能,比 Dart 原生的 http 包更易用、更强大。
使用示例

import'package:dio/dio.dart';voidmain()async{// 1. 创建 Dio 实例(可全局复用)finaldio=Dio();try{// 2. 发起 GET 请求ResponsegetResponse=awaitdio.get('https://jsonplaceholder.typicode.com/posts/1',// GET 请求参数(会自动拼接到 URL 后)queryParameters:{'id':1},// 超时设置options:Options(connectTimeout:constDuration(seconds:5),receiveTimeout:constDuration(seconds:5),),);print('GET 请求结果:${getResponse.data}');// 3. 发起 POST 请求ResponsepostResponse=awaitdio.post('https://jsonplaceholder.typicode.com/posts',// POST 请求体参数data:{'title':'Flutter Dio 测试','body':'Dio 是个好用的网络库','userId':1,},);print('POST 请求结果:${postResponse.data}');}onDioExceptioncatch(e){// 4. 异常处理(Dio 封装了专属的 DioException)if(e.type==DioExceptionType.connectionTimeout){print('请求超时');}elseif(e.response!=null){// 服务器返回错误(有状态码)print('错误状态码:${e.response?.statusCode}');print('错误信息:${e.response?.data}');}else{print('请求失败:${e.message}');}}}

核心亮点功能
1、拦截器:可统一处理请求头(如添加 Token)、响应结果(如统一解析数据)、错误(如统一提示)

// 添加请求拦截器dio.interceptors.add(InterceptorsWrapper(onRequest:(options,handler){// 给所有请求添加 Token 头options.headers['Authorization']='Bearer your_token';handler.next(options);// 继续执行请求},onResponse:(response,handler){// 统一解析响应数据response.data=response.data['data'];// 假设接口返回 {code:200, data:{...}}handler.next(response);},onError:(e,handler){// 统一处理错误print('全局错误拦截:${e.message}');handler.next(e);},));

2、文件上传 / 下载:支持进度监听,适合图片 / 文件上传、大文件下载场景
3、取消请求:可手动取消正在进行的请求(如页面销毁时
4、FormData 提交:支持表单提交(如上传图片时的 multipart/form-data)。

http://www.jsqmd.com/news/457769/

相关文章:

  • 基于springboot的人事管理系统(源码+文档+调试+讲解)
  • C语言二维数组详解:定义与初始化
  • Claw 批量生成公众号文章实践:一天写 100 篇的工作流复盘
  • 基于大数据+Hadoop+深度学习的酒店评论文本情感分析研究设计与开发(源码+精品论文+答辩PPT等资料)
  • 4个关键步骤解决ComfyUI ControlNet Aux模型下载难题:开源工具配置优化指南
  • 阿姆智创15.6寸工控触摸一体机,赋能工业自动化的硬核终端,源头工厂支持ODM定制
  • 保姆级windows+WSL2(非C盘安装)部署OpenClaw
  • 【问题解决】| 【黑马点评】 | 虚拟机IP总是变动,如何修改成固定IP
  • 影音杂乱?远程看片难?Plex+cpolar 打造随身私人影院,解决所有难题
  • 【算法】约数个数、约数和
  • 【保姆级教程】Windows系统下使用国内阿里云大模型接入Claude Code
  • python中交互式和文件式的运行
  • P2并联混动仿真模型:探索未来汽车的动力与经济性
  • [HC04-Arduino]——光电探测器
  • 消息队列(MQ)入门必知必会五大基础概念:异步,削峰,解耦,生产者,消费者详细解读 一篇搞懂 超强类比
  • 11b. OpenAI API密钥获取指南
  • Serverless冷启动性能优化:从Firecracker微虚拟机隔离到代码预热算法的深度实践
  • 如何告别炉石传说“盲打“困境?HSTracker带来的智能对战革命
  • (五)RT-Thread设备驱动实战--IO模型PIN与UART
  • BTC脚本
  • 3步打造你的专属游戏助手:献给LOL玩家的效率提升方案
  • 周红伟:首家独发,腾讯龙虾WorkBuddy股票预测实操,OpenClaw实 - 今日头条
  • 2026冲孔机市场风向标:这些品牌CNC技术领先,PSH-JSM伺服折弯机/光纤激光切割机,冲孔机品牌有哪些 - 品牌推荐师
  • 字母异位词分组
  • 5个方法让Zotero成为LaTeX文献管理的理想工具
  • 超简单!百度贴吧一键自动签到(附Python完整脚本下载 )Windows 教程 养号用!
  • 2026职业小说作者生存指南:新人写小说签约难?AI辅助流工作法+5款主流的工具测评
  • 直播内容管理的自动化革命:如何用douyin-downloader实现高效内容保存
  • 3种高效管理Windows Defender的系统优化方案
  • OpenClaw 3.7 最重磅更新:ContextEngine 插件接口源码级拆解 —— AI Agent 上下文管理从此告别硬编码