Flutter+开源鸿蒙实战|企业级工具APP Day2 全局网络封装与 Dio 拦截器实战(鸿蒙兼容版)
Flutter开源鸿蒙实战企业级工具APP Day2 全局网络封装与 Dio 拦截器实战鸿蒙兼容版欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net!-- Schema.org 结构化SEO --scripttypeapplication/ldjson{context:https://schema.org,type:BlogPosting,headline:Flutter开源鸿蒙实战 企业级工具APP Day2 全局网络封装与Dio拦截器实战,author:{type:Person,name:鸿蒙跨端开发者},publisher:{type:Organization,name:开源鸿蒙跨平台开发者社区},description:Flutter开源鸿蒙企业级工具APP Day2专注网络请求封装Dio集成、全局拦截器、请求/响应统一处理、错误捕获、鸿蒙权限适配、多端稳定运行教程详细可直接复用,keywords:Flutter,开源鸿蒙,OpenHarmony,Dio,网络封装,拦截器,跨端开发,企业级APP,鸿蒙适配}/script一、前言在 Day1 中我们完成了Flutter开源鸿蒙企业级工具APP的基础搭建第三方库集成、全局Toast、本地存储、屏幕适配与权限检查。整个工程已经具备了可运行、可调试、可在鸿蒙设备上正常启动的基础能力。但任何企业级应用都离不开稳定、统一、可维护的网络请求层。如果每个页面都单独写 Dio 请求、单独处理异常、单独加请求头不仅代码冗余还会出现无统一日志、无统一错误提示、无Token统一处理、鸿蒙网络权限不兼容等问题。因此Day2 我们只聚焦一个核心点网络请求封装。从 Dio 初始化 → 全局拦截器 → 请求/响应/异常统一处理 → 鸿蒙权限适配 → 业务调用全程手把手、逐行讲解让你真正掌握企业级跨端网络架构。本文全程适配开源鸿蒙手机/平板代码精简、注释详细、可直接用于毕设/项目/博客发布。二、Day2 核心目标只做网络做深做透基于 Dio 完成开源鸿蒙兼容版全局网络工具封装实现请求拦截器统一添加请求头、公共参数、日志打印实现响应拦截器统一解析结构、状态码判断实现异常拦截器统一捕获 Dio 异常、网络异常、权限异常对接 Day1 的 Toast做到全局自动提示适配开源鸿蒙网络权限避免请求失败/闪退提供最简调用示例页面只需一行代码发起请求三、为什么要封装 Dio开源鸿蒙场景特别重要鸿蒙对网络权限管控更严格需统一检查与提示跨端设备手机/平板网络环境复杂需统一超时策略企业项目必须有请求日志方便调试错误信息必须统一文案避免用户困惑后续加 Token、加加密、加签名只需改一处四、第一步 Dio 全局初始化鸿蒙稳定版我们先创建一个单例 Http 工具确保整个 APP 只有一个 Dio 实例避免多次创建导致的性能问题。importpackage:dio/dio.dart;importpackage:flutter/material.dart;classHttpManager{staticfinalHttpManager_instanceHttpManager._internal();factoryHttpManager()_instance;lateDiodio;HttpManager._internal(){// 初始化Dio适配开源鸿蒙网络策略dioDio(BaseOptions(baseUrl:https://api.xxx.com,// 你的接口地址connectTimeout:constDuration(seconds:10),receiveTimeout:constDuration(seconds:10),headers:{Content-Type:application/json;charsetUTF-8},));}}要点单例模式全局唯一统一超时时间适配鸿蒙弱网环境统一请求头避免重复书写五、第二步添加请求拦截器公共参数日志请求拦截器用于添加 Token、添加公共参数、打印请求日志、展示加载动画。// 在 HttpManager._internal() 中添加dio.interceptors.add(InterceptorsWrapper(onRequest:(options,handler){// 日志打印调试用debugPrint( 请求地址:${options.uri});debugPrint( 请求方法:${options.method});// 统一添加公共参数options.queryParameters[platform]open_harmony;returnhandler.next(options);},));作用自动带上platformopen_harmony后端可识别鸿蒙端控制台清晰日志方便定位问题后续加 Token 只需这里加一行六、第三步添加响应拦截器统一解析后端返回结构一般是code msg data我们统一解析。onResponse:(response,handler){debugPrint(✅ 响应成功:${response.data});// 可在此统一剥离 datareturnhandler.next(response);},七、第四步异常拦截器鸿蒙最关键开源鸿蒙设备经常出现无网络、权限未开、后台拒绝、超时。我们统一捕获并自动弹出 Toast。onError:(DioExceptione,handler){Stringmsg请求失败;if(e.typeDioExceptionType.connectionTimeout){msg连接超时请检查网络;}elseif(e.typeDioExceptionType.receiveTimeout){msg服务器响应超时;}elseif(e.typeDioExceptionType.connectionError){msg网络异常请开启Wi‑Fi/流量;}else{msge.message??请求异常;}// 调用Day1的全局提示ToastUtil.showError(msg);debugPrint(❌ 错误:$msg);returnhandler.next(e);}效果鸿蒙无网 → 自动提示网络异常超时 → 自动提示超时所有错误只在这里处理页面无需写 try-catch八、第五步封装 GET/POST 最简调用让页面调用像呼吸一样简单。// GETstaticFutureResponseget(Stringpath,{MapString,dynamic?params}){returnHttpManager().dio.get(path,queryParameters:params);}// POSTstaticFutureResponsepost(Stringpath,{dynamicdata}){returnHttpManager().dio.post(path,data:data);}九、第六步页面调用示例鸿蒙运行正常// 调用工具列表接口voidloadToolData()async{try{varresawaitHttpUtil.get(/api/tool/list);if(res.statusCode200){ToastUtil.showSuccess(加载成功);// 更新UI}}catch(_){}}你没看错一页只需要4行代码完成网络请求。十、开源鸿蒙特别适配必看必须在鸿蒙侧配置网络权限ohos.permission.INTERNET不配置会直接报连接错误拦截器会自动提示鸿蒙后台限制后台网络封装后统一处理更稳定十一、Day2 开发总结Day2 我们只做了一件事把网络请求彻底封装好。Dio 单例初始化三大拦截器请求/响应/异常统一日志、统一提示、统一参数极简调用页面无冗余代码完全适配开源鸿蒙设备整个架构已经达到企业级可用、可上线、可扩展标准。十二、Day3 预告Day3 将进入UI实战专注企业级工具APP首页完整UI功能入口卡片、网格布局多设备鸿蒙手机/平板适配点击跳转、状态管理全套页面可直接用于毕业设计展示