Flutter+开源鸿蒙实战|校园易生活Day3 闲置市场页面搭建+卡片封装+GetX状态管理+新手避坑指南
Flutter开源鸿蒙实战校园易生活Day3 闲置市场页面搭建卡片封装GetX状态管理新手避坑指南欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net!-- Schema.org 结构化数据 --scripttypeapplication/ldjson{context:https://schema.org,type:BlogPosting,headline:Flutter开源鸿蒙实战 校园易生活Day3 闲置市场页面自定义卡片GetX下拉刷新新手避坑,author:{type:Person,name:鸿蒙跨端开发者},publisher:{type:Organization,name:CSDN开源鸿蒙跨平台社区},description:校园易生活Day3完整开发闲置市场页面自定义卡片封装、GetX控制器、模拟数据、下拉刷新、页面跳转附带新手最容易遇到的问题详细解答,keywords:Flutter,开源鸿蒙,OpenHarmony,校园易生活,Day3,闲置市场,自定义卡片,GetX,下拉刷新,鸿蒙适配}/script一、前言哈喽小伙伴们我们来到校园易生活Day3Day1我们搭好了项目骨架、底部导航和多端适配基础Day2批量集成常用第三方库完成全局Toast提示、网络状态监听、首页轮播图与资讯卡片布局。今天Day3正式开发校园闲置跳蚤市场核心页面也是同学们做毕设最核心、最常用的模块。我不仅带大家一步步实现功能还在每段代码前加通俗文字讲解新手也能看懂逻辑同时预判大家写代码时容易踩的坑分点口语化解析原因和解决办法逻辑清晰、有条理。今日核心学习目标理清闲置市场页面整体布局结构创建闲置商品数据实体类统一数据格式借助GetX编写状态控制器统一管理列表数据封装可全局复用的自定义闲置商品卡片实现网格列表布局下拉刷新功能完成卡片点击路由跳转预留详情页入口适配鸿蒙手机、平板、开发板多端布局汇总新手高频报错问题逐点清晰解答。二、今日依赖库说明无需新增任何第三方库直接复用Day1、Day2已配置依赖flutter_screenutil、getx、flutter_easy_refresh、fluttertoast、connectivity_plus、flutter_swiper_null_safe不用修改pubspec.yaml无需执行依赖安装直接开发业务即可。三、版块1创建闲置商品数据实体类文字讲解我们先要定义一个闲置商品实体类作用是统一规范每条二手商品的数据结构固定包含标题、价格、描述、图片路径几个核心字段。后续创建模拟数据、接收接口数据都必须遵循这个格式避免字段混乱、传参出错也是正规项目必备写法。classIdleModel{finalStringtitle;finalStringprice;finalStringdesc;finalStringimg;IdleModel({requiredthis.title,requiredthis.price,requiredthis.desc,requiredthis.img,});}四、版块2编写GetX闲置状态控制器文字讲解用GetX控制器专门管理闲置列表数据把商品列表定义成可监听响应式数组。页面初始化时自动加载模拟测试数据后续下拉刷新、数据更新都在这个控制器里统一处理页面只负责UI展示做到逻辑和界面分离不用频繁调用setState刷新页面。classIdleControllerextendsGetxController{finalRxListIdleModelidleListIdleModel[].obs;overridevoidonInit(){super.onInit();loadTestData();}voidloadTestData(){idleList.addAll([IdleModel(title:大学专业教材,price:15元,desc:九成新无笔记,img:assets/images/idle1.jpg),]);}}五、版块3全局懒加载注册控制器文字讲解想要在项目任意页面都能调用闲置控制器就需要在项目入口main.dart全局注册。采用懒加载方式用到时才初始化节省内存注册之后所有页面都可以通过Get.find直接获取控制器实例。voidmain(){Get.lazyPut(()IdleController());runApp(constMyApp());}六、版块4封装全局自定义闲置商品卡片文字讲解把闲置列表里重复用到的商品布局单独抽离封装成公共组件只保留图片、标题、价格核心模块。统一设置圆角、阴影和适配尺寸后续多处页面复用不用重复写UI代码后期改样式只改这一处就行。WidgetbuildIdleCard(IdleModelmodel){returnCard(elevation:2,shape:RoundedRectangleBorder(borderRadius:BorderRadius.circular(12.r)),child:Column(children:[Image.asset(model.img,height:130.h,fit:BoxFit.cover),Text(model.title,style:TextStyle(fontSize:14.sp)),Text(¥${model.price},style:TextStyle(color:Colors.redAccent)),],),);}七、版块5搭建闲置市场主页面骨架文字讲解闲置页面采用标准脚手架结构通过Get.find获取全局闲置控制器。用Obx包裹列表组件作用是监听控制器数据变化数据更新页面自动刷新采用GridView网格布局一行展示两个商品卡片符合校园闲置市场浏览习惯。classIdlePageextendsStatelessWidget{finalIdleControlleridleCtrlGet.find();overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:constText(校园闲置市场)),body:Obx(()GridView.builder(gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:2),itemCount:idleCtrl.idleList.length,itemBuilder:(ctx,index)buildIdleCard(idleCtrl.idleList[index]),)),);}}八、版块6集成下拉刷新功能文字讲解在外层嵌套EasyRefresh下拉刷新组件绑定刷新控制器。手指下拉页面时触发onRefresh方法重新加载模拟数据刷新完成自动收起加载动画适配鸿蒙系统滑动手感交互更流畅自然。EasyRefresh(controller:EasyRefreshController(),onRefresh:()idleCtrl.loadTestData(),child:GridView.builder(gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:2),itemCount:idleCtrl.idleList.length,itemBuilder:(ctx,index)buildIdleCard(idleCtrl.idleCtrl.idleList[index]),),)九、版块7卡片添加点击路由跳转文字讲解给商品卡片外层包裹手势监听组件点击后通过Get路由无上下文跳转携带商品数据预留传给详情页同时弹出Toast提示交互反馈。不用原生Navigator复杂写法GetX一行代码就能实现页面跳转。GestureDetector(onTap:(){Get.toNamed(/idleDetail,arguments:model);ToastUtil.show(正在进入商品详情);},child:buildIdleCard(model),)十、版块8开源鸿蒙多端适配说明全程使用.w .h .sp适配单位不用固定像素数值自动适配鸿蒙手机、平板、DAYU200开发板网格布局在小屏手机固定两列大屏平板自动留白扩容不会出现布局溢出、卡片拉伸变形卡片圆角、阴影、文字大小统一规范在不同鸿蒙设备上视觉风格保持一致下拉刷新手势适配鸿蒙原生滑动逻辑无手势冲突、无卡顿。十一、版块9新手开发常见问题 逐点详细解答问题1为什么一定要建实体类直接写数组不行吗解答直接写数组虽然能运行但数据杂乱没有规范后期加字段、对接后端接口会非常麻烦。实体类相当于给数据定好模板每条商品数据格式统一代码更规范、后期维护更简单毕设项目这样写也更专业。问题2页面空白不显示列表数据是什么原因解答90%是两个原因一是没有用Obx包裹列表GetX监听不到数据变化二是没有在main.dart全局注册控制器页面找不到控制器实例。只要补全Obx包裹和全局懒加载注册就能正常显示。问题3卡片布局拥挤、文字重叠、尺寸不协调解答新手容易直接写固定数字宽高不同鸿蒙设备分辨率不同固定数值一定会错乱。全程坚持用flutter_screenutil的.w .h .sp单位让框架自动适配所有屏幕不用自己手动计算尺寸。问题4下拉刷新拉不出来、没有加载动画解答一是EasyRefresh没有正确嵌套在列表外层二是onRefresh没有绑定控制器的加载方法三是列表没有高度约束导致无法触发下拉。按这三点逐一排查就能解决刷新无反应的问题。问题5点击卡片没反应、跳转不了详情页解答首先检查有没有加GestureDetector点击监听其次项目入口必须是GetMaterialApp原生MaterialApp不支持GetX路由最后检查路由名字拼写是否和路由表一致大小写、字符错一个都跳不过去。问题6图片显示失败、默认占位图标报错解答一是图片资源路径写错大小写、文件夹名称要严格对应二是没有在pubspec.yaml中配置assets资源声明三是图片格式损坏替换正常jpg/png格式即可。十二、Day3 开发总结完成闲置商品实体类创建规范项目数据结构基于GetX搭建控制器实现列表数据统一管理封装复用式闲置商品卡片简化页面UI代码实现网格列表布局下拉刷新交互功能完成卡片点击路由跳转预留详情页传参逻辑完成鸿蒙多端适配解决布局溢出、拉伸问题汇总新手高频报错问题通俗讲解原因和解决方案。十三、下期Day4预告Day4 我们将开发闲置商品详情页面商品大图轮播、完整信息展示、联系卖家按钮、收藏功能、路由传参接收、页面布局美化完成闲置市场模块业务闭环。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2593008.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!