09-Flutter鸿蒙网络请求入门:HTTP数据请求和JSON模型封装
📅 2026/7/13 15:25:43
👁️ 次浏览
09. Flutter鸿蒙网络请求入门HTTP数据请求和JSON模型封装网络请求是业务项目最常见的能力之一。Flutter 鸿蒙项目中普通 HTTP 请求仍然可以在 Flutter 层完成添加依赖、封装模型、写请求服务、处理加载状态和错误状态即可。添加依赖dependencies:flutter:sdk:flutterhttp:^1.2.2执行flutter pub get定义模型classUser{finalint id;finalStringname;finalStringphone;constUser({requiredthis.id,requiredthis.name,requiredthis.phone,});factoryUser.fromJson(MapString,dynamicjson){returnUser(id:json[id]asint???0,name:json[name]asString???,phone:json[phone]asString???,);}MapString,dynamictoJson(){return{id:id,name:name,phone:phone,};}}封装服务importdart:convert;importpackage:http/http.dartashttp;classApiService{ApiService({http.Client?client}):_clientclient??http.Client();finalhttp.Client_client;staticconstStringbaseUrlhttps://example.com/api;FutureListUserfetchUsers()async{finaluriUri.parse($baseUrl/users);finalresponseawait_client.get(uri);if(response.statusCode!200){throwException(请求失败${response.statusCode});}finaldatajsonDecode(response.body);if(datais!List){throwException(接口返回格式不是数组);}returndata.map((item)User.fromJson(itemasMapString,dynamic)).toList();}FutureUsercreateUser(Stringname,Stringphone)async{finaluriUri.parse($baseUrl/users);finalresponseawait_client.post(uri,headers:{Content-Type:application/json},body:jsonEncode({name:name,phone:phone}),);if(response.statusCode!200response.statusCode!201){throwException(新增失败${response.statusCode});}returnUser.fromJson(jsonDecode(response.body)asMapString,dynamic);}}页面状态classUserListPageextendsStatefulWidget{constUserListPage({super.key});overrideStateUserListPagecreateState()_UserListPageState();}class_UserListPageStateextendsStateUserListPage{lateFutureListUser_future;overridevoidinitState(){super.initState();_futureApiService().fetchUsers();}Futurevoid_reload()async{setState((){_futureApiService().fetchUsers();});}overrideWidgetbuild(BuildContextcontext){returnFutureBuilderListUser(future:_future,builder:(context,snapshot){if(snapshot.connectionStateConnectionState.waiting){returnconstCenter(child:CircularProgressIndicator());}if(snapshot.hasError){returnCenter(child:Column(mainAxisSize:MainAxisSize.min,children:[Text(加载失败${snapshot.error}),constSizedBox(height:12),FilledButton(onPressed:_reload,child:constText(重试)),],),);}finaluserssnapshot.data??[];if(users.isEmpty){returnconstCenter(child:Text(暂无数据));}returnRefreshIndicator(onRefresh:_reload,child:ListView.builder(itemCount:users.length,itemBuilder:(_,index){finaluserusers[index];returnListTile(title:Text(user.name),subtitle:Text(user.phone),);},),);},);}}排错网络问题常见排查1. 接口地址是否能在浏览器或 Postman 打开 2. 设备是否有网络权限和网络连接 3. HTTP/HTTPS 是否符合服务端要求 4. JSON 顶层结构是对象还是数组 5. statusCode 是否被正确处理 6. 页面是否处理 loading、empty、error 三种状态请求层不要直接写在页面里页面里直接写http.get能跑但项目变大后很难维护。更好的做法是页面只关心状态网络细节放到 servicelib ├─ models │ └─ user.dart ├─ services │ └─ api_service.dart └─ pages └─ user_list_page.dart这样接口地址变化、请求头变化、错误处理变化时不需要翻每个页面。调试接口返回开发阶段可以临时打印响应debugPrint(statusCode:${response.statusCode});debugPrint(body:${response.body});正式提交前不要在日志里输出敏感信息比如 token、手机号、身份证、详细地址。网络日志要能辅助排错但不能泄露用户数据。不需要翻每个页面。
Collection<E>List<E>set<E>ArrayList<E>Linkedlist<E>HashSet<E>TreeSet<E>LinkedHashSet<E>list集合:添加的元素有序,可重复,有索引。ArrayList,LinkedList: 有序,…
📅 2026/7/13 15:25:43
SMOTE用了20年,几乎成了不平衡学习的“标配”工具。但用过的朋友都知道,它在类间重叠严重的数据上经常“帮倒忙”——插值出来的合成样本直接掉进正常样本的地盘,模型被这些“假异常”带偏。这篇论文给了我一个很务实的启发:与其抛…
📅 2026/7/13 15:25:43
读这篇论文之前,我一直觉得SENET的注意力机制已经够用了——能“看到”重要特征不就行了吗?但仔细一想,对于微弱故障诊断,“看到”远远不够。微弱信号乘以一个接近1的权重,还是微弱信号。就像你用肉眼看一颗暗星&#…
📅 2026/7/13 15:25:43
Mixtral-8x7B-Instruct-v0.1-da8w8-torchao-v0.17.0聊天模板详解:构建高效对话交互系统 【免费下载链接】Mixtral-8x7B-Instruct-v0.1-da8w8-torchao-v0.17.0 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Mixtral-8x7B-Instruct-v0.1-da8w8-torchao-v0.17.…
📅 2026/7/13 16:15:08
更多请点击:
https://kaifayun.com
第一章:ChatGPT写代码总出错?揭秘92%开发者忽略的5个上下文对齐漏洞(附可复用调试模板) 当ChatGPT生成的代码频繁出现类型不匹配、API调用失败或逻辑跳变时,问题往往不出…
📅 2026/7/13 16:15:08
Bolts-Swift在大型项目中的应用:架构设计与代码组织指南 【免费下载链接】Bolts-Swift Bolts is a collection of low-level libraries designed to make developing mobile apps easier. 项目地址: https://gitcode.com/gh_mirrors/bo/Bolts-Swift
Bolts-Sw…
📅 2026/7/13 16:15:08
泊松图像编辑 OpenCV 4.8 实战:5种应用场景代码复现与效果对比 在数字图像处理领域,实现自然无缝的图像合成一直是开发者面临的挑战。传统方法如直接复制粘贴或alpha混合往往会产生明显的接缝和违和感。2003年提出的泊松图像编辑技术通过数学建模&#x…
📅 2026/7/13 16:15:08
Phi-4-reasoning-plus-w4a16-tao-symchannel-torchao-v0.17.0:AMD的4位权重量化AI模型完全指南 【免费下载链接】Phi-4-reasoning-plus-w4a16-tao-symchannel-torchao-v0.17.0 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Phi-4-reasoning-plus-w4a16-tao-…
📅 2026/7/13 16:15:08
昨晚折腾到凌晨三点,眼睛都快瞎了,终于把那个传说中的 openclaw小龙虾ai本地部署 给跑通了。说实话,刚看到网上那些吹得天花乱坠的视频,我心里是打鼓的。毕竟咱们普通玩家,显卡也就RTX 3060,显存12G,真能跑得动大模型?但我这人就是轴,不信邪。今天就把我踩过的坑、流过…
📅 2026/7/13 16:14:39
做技术的人都知道,环境配置是最让人头秃的环节。特别是当你面对一个相对小众或者刚起步的项目时,文档可能不全,社区可能冷清。这时候,找到靠谱的来源就显得尤为重要。今天咱们不聊虚的,就聊聊怎么稳妥地完成 openclaw安装官方 流程,顺便分享几个我踩过的坑,希望能帮你省…
📅 2026/7/13 0:01:22
1. 项目概述:当火焰特效成为帧率杀手在UE5项目里,尤其是那些追求电影级视觉的开放世界或者大场景战斗游戏,一个熊熊燃烧的篝火、一次震撼的爆炸,往往是点燃玩家情绪的关键。Niagara作为虚幻引擎5中取代了老旧的Cascade的下一代粒子…
📅 2026/7/13 0:01:52
1. 项目概述与核心价值 最近在对接抖音小游戏平台时,侧边栏复访功能成了一个绕不开的“必答题”。很多开发者朋友,包括我自己一开始,都对这个功能有点摸不着头脑:它到底是什么?为什么平台这么重视?不接入行…
📅 2026/7/13 0:01:52
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/13 5:30:27
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/13 6:21:22
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/13 7:10:30
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/13 3:29:47
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/12 15:39:57
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/13 9:07:16