news 2026/5/28 22:46:28

Flutter与OpenHarmony商品详情页面开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter与OpenHarmony商品详情页面开发

前言

商品详情页面是电商应用中最重要的转化页面。它需要展示商品图片、价格、规格、描述、评价等信息,并提供加入购物车和立即购买的入口。本文将详细介绍如何在Flutter和OpenHarmony平台上实现一个功能完善的商品详情页面。

商品详情页面的设计直接影响用户的购买决策,需要在信息展示和购买引导之间取得平衡。

Flutter商品详情页面实现

页面结构设计

商品详情页面接收商品名称参数。

classProductDetailPageextendsStatefulWidget{finalStringproductName;constProductDetailPage({super.key,requiredthis.productName});@overrideState<ProductDetailPage>createState()=>_ProductDetailPageState();}class_ProductDetailPageStateextendsState<ProductDetailPage>{int _quantity=1;bool _isFavorite=false;

使用StatefulWidget管理数量和收藏状态。

商品图片区域

使用PageView实现商品图片轮播。

@overrideWidgetbuild(BuildContextcontext){returnScaffold(body:CustomScrollView(slivers:[SliverAppBar(expandedHeight:350,pinned:true,backgroundColor:constColor(0xFF8B4513),leading:IconButton(icon:constIcon(Icons.arrow_back,color:Colors.white),onPressed:()=>Navigator.pop(context),),actions:[IconButton(icon:Icon(_isFavorite?Icons.favorite:Icons.favorite_border,color:_isFavorite?Colors.red:Colors.white),onPressed:()=>setState(()=>_isFavorite=!_isFavorite),),IconButton(icon:constIcon(Icons.share,color:Colors.white),onPressed:(){}),],flexibleSpace:FlexibleSpaceBar(background:Container(color:Colors.grey[200],child:constCenter(child:Icon(Icons.shopping_bag,size:100,color:Colors.grey)),),),),

SliverAppBar实现可折叠的图片头部。收藏按钮根据状态显示不同图标和颜色。

商品信息区域

展示价格、名称和销量信息。

SliverToBoxAdapter(child:Container(padding:constEdgeInsets.all(16),color:Colors.white,child:Column(crossAxisAlignment:CrossAxisAlignment.start,children:[Row(crossAxisAlignment:CrossAxisAlignment.end,children:[constText('¥',style:TextStyle(fontSize:16,color:Color(0xFFE53935),fontWeight:FontWeight.bold)),constText('299',style:TextStyle(fontSize:28,color:Color(0xFFE53935),fontWeight:FontWeight.bold)),constSizedBox(width:8),Text('¥399',style:TextStyle(fontSize:14,color:Colors.grey[500],decoration:TextDecoration.lineThrough)),],),constSizedBox(height:8),Text(widget.productName,style:constTextStyle(fontSize:18,fontWeight:FontWeight.bold)),constSizedBox(height:8),Row(children:[Container(padding:constEdgeInsets.symmetric(horizontal:6,vertical:2),decoration:BoxDecoration(color:constColor(0xFFE53935).withOpacity(0.1),borderRadius:BorderRadius.circular(4)),child:constText('限时特惠',style:TextStyle(fontSize:10,color:Color(0xFFE53935))),),constSizedBox(width:8),Text('已售 1.2K',style:TextStyle(fontSize:12,color:Colors.grey[600])),constSpacer(),Row(children:[constIcon(Icons.star,size:14,color:Colors.amber),constSizedBox(width:2),Text('4.9',style:TextStyle(fontSize:12,color:Colors.grey[600])),],),],),],),),),

价格使用红色突出显示,原价使用删除线。促销标签和销量信息增强购买信心。

数量选择与购买按钮

底部固定的购买操作栏。

],),bottomNavigationBar:Container(padding:constEdgeInsets.all(16),decoration:BoxDecoration(color:Colors.white,boxShadow:[BoxShadow(color:Colors.black.withOpacity(0.1),blurRadius:10,offset:constOffset(0,-5))],),child:Row(children:[Column(mainAxisSize:MainAxisSize.min,children:[constIcon(Icons.store_outlined,color:Colors.grey),Text('店铺',style:TextStyle(fontSize:10,color:Colors.grey[600])),],),constSizedBox(width:16),Column(mainAxisSize:MainAxisSize.min,children:[constIcon(Icons.chat_bubble_outline,color:Colors.grey),Text('客服',style:TextStyle(fontSize:10,color:Colors.grey[600])),],),constSizedBox(width:16),Expanded(child:Row(children:[Expanded(child:ElevatedButton(onPressed:(){},style:ElevatedButton.styleFrom(backgroundColor:constColor(0xFFFF9800),padding:constEdgeInsets.symmetric(vertical:12),shape:constRoundedRectangleBorder(borderRadius:BorderRadius.horizontal(left:Radius.circular(25)),),),child:constText('加入购物车',style:TextStyle(color:Colors.white)),),),Expanded(child:ElevatedButton(onPressed:(){},style:ElevatedButton.styleFrom(backgroundColor:constColor(0xFFE53935),padding:constEdgeInsets.symmetric(vertical:12),shape:constRoundedRectangleBorder(borderRadius:BorderRadius.horizontal(right:Radius.circular(25)),),),child:constText('立即购买',style:TextStyle(color:Colors.white)),),),],),),],),),);}}

底部栏包含店铺、客服入口和购买按钮。加入购物车和立即购买使用不同颜色区分。

OpenHarmony鸿蒙实现

页面定义

鸿蒙平台使用路由参数接收商品信息。

@Entry@Componentstruct ProductDetailPage{@StateproductName:string=''@StateisFavorite:boolean=false@Statequantity:number=1aboutToAppear(){constparams=router.getParams()asRecord<string,string>this.productName=params?.name||'商品详情'}

页面布局实现

使用Scroll构建可滚动页面。

build(){Column(){Scroll(){Column(){Stack(){Image($r('app.media.product_placeholder')).width('100%').height(350).objectFit(ImageFit.Cover)Row(){Image($r('app.media.back')).width(24).height(24).fillColor(Color.White).onClick(()=>router.back())Blank()Image(this.isFavorite?$r('app.media.heart_filled'):$r('app.media.heart')).width(24).height(24).fillColor(this.isFavorite?'#F44336':Color.White).onClick(()=>{this.isFavorite=!this.isFavorite})Image($r('app.media.share')).width(24).height(24).fillColor(Color.White).margin({left:16})}.width('100%').padding(16).position({y:40})}.width('100%').height(350).backgroundColor('#F0F0F0')Column(){Row(){Text('¥').fontSize(16).fontColor('#E53935').fontWeight(FontWeight.Bold)Text('299').fontSize(28).fontColor('#E53935').fontWeight(FontWeight.Bold)Text('¥399').fontSize(14).fontColor('#999999').decoration({type:TextDecorationType.LineThrough}).margin({left:8})}.alignItems(VerticalAlign.Bottom).width('100%')Text(this.productName).fontSize(18).fontWeight(FontWeight.Bold).fontColor('#333333').margin({top:8}).width('100%')Row(){Text('限时特惠').fontSize(10).fontColor('#E53935').backgroundColor('#E539351A').borderRadius(4).padding({left:6,right:6,top:2,bottom:2})Text('已售 1.2K').fontSize(12).fontColor('#666666').margin({left:8})Blank()Image($r('app.media.star')).width(14).height(14).fillColor('#FFC107')Text('4.9').fontSize(12).fontColor('#666666').margin({left:2})}.width('100%').margin({top:8})}.width('100%').padding(16).backgroundColor(Color.White)}}.layoutWeight(1)Row(){Column(){Image($r('app.media.store')).width(20).height(20).fillColor('#999999')Text('店铺').fontSize(10).fontColor('#666666')}Column(){Image($r('app.media.service')).width(20).height(20).fillColor('#999999')Text('客服').fontSize(10).fontColor('#666666')}.margin({left:16})Row(){Button('加入购物车').fontSize(14).fontColor(Color.White).backgroundColor('#FF9800').layoutWeight(1).borderRadius({topLeft:25,bottomLeft:25})Button('立即购买').fontSize(14).fontColor(Color.White).backgroundColor('#E53935').layoutWeight(1).borderRadius({topRight:25,bottomRight:25})}.layoutWeight(1).margin({left:16})}.width('100%').height(60).padding({left:16,right:16}).backgroundColor(Color.White)}.width('100%').height('100%')}}

底部购买栏固定显示。按钮使用不同颜色区分功能。

总结

本文介绍了Flutter和OpenHarmony平台上商品详情页面的实现方法。商品详情页面是电商应用的核心转化页面,其设计需要突出商品信息并提供便捷的购买入口。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 19:41:49

Windows 11 LTSC缺失微软商店?技术深度解析与完整解决方案

Windows 11 LTSC缺失微软商店&#xff1f;技术深度解析与完整解决方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows 11 LTSC系统以其稳定性…

作者头像 李华
网站建设 2026/5/28 19:53:45

frpc-desktop智能连接守护技术:构建永不中断的内网穿透通道

在远程办公和智能家居日益普及的今天&#xff0c;内网穿透技术已成为连接内外网络的关键桥梁。然而&#xff0c;传统frp工具在面对网络波动、路由器策略限制等复杂环境时&#xff0c;频繁的连接中断严重影响了用户体验。frpc-desktop通过创新的智能连接守护机制&#xff0c;成功…

作者头像 李华
网站建设 2026/5/28 19:54:03

利用PaddlePaddle镜像快速实现工业级目标检测(PaddleDetection)

利用PaddlePaddle镜像快速实现工业级目标检测 在智能制造产线日益智能化的今天&#xff0c;一个常见的挑战是&#xff1a;如何在短短几天内完成从数据标注到模型上线的全流程&#xff1f;许多团队曾因环境配置冲突、依赖版本不匹配或部署链路断裂而延误项目进度。尤其是在边缘设…

作者头像 李华
网站建设 2026/5/28 21:25:08

【C++】面试官爱的C++多态八股文,这次让你彻底搞懂!

问题引入&#xff1a;这篇文章重点介绍C中的多态特性。前面我们知道了&#xff0c;派生类中可以调用基类中的方法&#xff0c;对于同名的函数我们有隐藏的相关概念。但是现实可能存在一个问题&#xff0c;就是基类中的方法和派生类中的方法是不同的&#xff0c;不同的对象调用的…

作者头像 李华
网站建设 2026/5/24 12:35:21

PaddleDetection实战:用PaddlePaddle镜像完成YOLOv3目标检测

PaddleDetection实战&#xff1a;用PaddlePaddle镜像完成YOLOv3目标检测 在智能安防、无人零售和工业质检等现实场景中&#xff0c;开发者常常面临一个共性难题&#xff1a;如何在有限时间内快速搭建一个稳定、高效的目标检测系统&#xff1f;传统方式往往需要花费大量精力配置…

作者头像 李华
网站建设 2026/5/28 16:21:19

终极跨平台模组下载神器:WorkshopDL完整使用指南

终极跨平台模组下载神器&#xff1a;WorkshopDL完整使用指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 问题发现&#xff1a;非Steam玩家的模组困境 你是否曾经在Epic Ga…

作者头像 李华