news 2026/6/9 21:08:28

Flutter与OpenHarmony搜索结果页面开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter与OpenHarmony搜索结果页面开发

前言

搜索结果页面是用户执行搜索后展示匹配内容的关键页面。它需要清晰展示搜索关键词、结果数量、结果列表,并提供筛选和排序功能。本文将详细介绍如何在Flutter和OpenHarmony平台上实现一个功能完善的搜索结果页面。

搜索结果页面的设计需要考虑结果的相关性展示、空结果的友好提示、以及加载更多的性能优化。

Flutter搜索结果页面实现

页面结构设计

搜索结果页面接收关键词参数并展示结果。

classSearchResultPageextendsStatefulWidget{finalStringkeyword;constSearchResultPage({super.key,requiredthis.keyword});@overrideState<SearchResultPage>createState()=>_SearchResultPageState();}class_SearchResultPageStateextendsState<SearchResultPage>{finalList<Map<String,String>>_results=[{'title':'苏绣牡丹技法详解','type':'教程','author':'王淑英'},{'title':'苏绣入门必备工具','type':'文章','author':'李雪芬'},{'title':'苏绣作品《春日》','type':'作品','author':'陈美华'},];

keyword通过构造函数传入。_results存储搜索结果数据,实际项目中应从后端API获取。

页面布局实现

包含AppBar、搜索信息和结果列表。

@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:Text('搜索:${widget.keyword}',style:constTextStyle(fontSize:16,color:Colors.white)),backgroundColor:constColor(0xFF8B4513),leading:IconButton(icon:constIcon(Icons.arrow_back,color:Colors.white),onPressed:()=>Navigator.pop(context),),),body:Container(decoration:constBoxDecoration(gradient:LinearGradient(begin:Alignment.topCenter,end:Alignment.bottomCenter,colors:[Color(0xFF8B4513),Color(0xFFF5F5DC)],),),child:Column(children:[Container(padding:constEdgeInsets.all(16),child:Row(mainAxisAlignment:MainAxisAlignment.spaceBetween,children:[Text('找到${_results.length}个结果',style:constTextStyle(color:Colors.white,fontSize:14)),Row(children:[constIcon(Icons.filter_list,color:Colors.white,size:18),constSizedBox(width:4),constText('筛选',style:TextStyle(color:Colors.white,fontSize:14)),],),],),),

AppBar显示搜索关键词。结果数量和筛选按钮显示在列表上方。

结果列表构建

使用ListView展示搜索结果。

Expanded(child:ListView.builder(padding:constEdgeInsets.symmetric(horizontal:16),itemCount:_results.length,itemBuilder:(context,index){finalresult=_results[index];returnContainer(margin:constEdgeInsets.only(bottom:12),padding:constEdgeInsets.all(16),decoration:BoxDecoration(color:Colors.white,borderRadius:BorderRadius.circular(12),boxShadow:[BoxShadow(color:Colors.black.withOpacity(0.05),blurRadius:5)],),child:Row(children:[Container(width:60,height:60,decoration:BoxDecoration(color:Colors.grey[200],borderRadius:BorderRadius.circular(8),),child:constIcon(Icons.image,color:Colors.grey),),constSizedBox(width:12),Expanded(child:Column(crossAxisAlignment:CrossAxisAlignment.start,children:[Text(result['title']!,style:constTextStyle(fontSize:14,fontWeight:FontWeight.bold)),constSizedBox(height:4),Row(children:[Container(padding:constEdgeInsets.symmetric(horizontal:6,vertical:2),decoration:BoxDecoration(color:constColor(0xFF8B4513).withOpacity(0.1),borderRadius:BorderRadius.circular(4),),child:Text(result['type']!,style:constTextStyle(fontSize:10,color:Color(0xFF8B4513))),),constSizedBox(width:8),Text(result['author']!,style:TextStyle(fontSize:12,color:Colors.grey[600])),],),],),),constIcon(Icons.chevron_right,color:Colors.grey),],),);},),),],),),);}}

每个结果项包含缩略图、标题、类型标签和作者信息。类型标签使用品牌色背景区分不同内容类型。

OpenHarmony鸿蒙实现

页面定义

鸿蒙平台使用路由参数接收关键词。

interfaceResultItem{title:stringtype:stringauthor:string}@Entry@Componentstruct SearchResultPage{@Statekeyword:string=''privateresults:Array<ResultItem>=[{title:'苏绣牡丹技法详解',type:'教程',author:'王淑英'},{title:'苏绣入门必备工具',type:'文章',author:'李雪芬'},{title:'苏绣作品《春日》',type:'作品',author:'陈美华'}]aboutToAppear(){constparams=router.getParams()asRecord<string,string>this.keyword=params?.keyword||''}

aboutToAppear生命周期方法中获取路由参数。

页面布局实现

使用Column和List构建页面。

build(){Column(){Row(){Image($r('app.media.back')).width(24).height(24).fillColor(Color.White).onClick(()=>router.back())Text('搜索: '+this.keyword).fontSize(16).fontColor(Color.White).layoutWeight(1).margin({left:12})}.width('100%').height(56).padding({left:16,right:16}).backgroundColor('#8B4513')Row(){Text('找到 '+this.results.length+' 个结果').fontSize(14).fontColor(Color.White)Blank()Row(){Image($r('app.media.filter')).width(18).height(18).fillColor(Color.White)Text('筛选').fontSize(14).fontColor(Color.White).margin({left:4})}}.width('100%').padding(16)List(){ForEach(this.results,(item:ResultItem)=>{ListItem(){Row(){Stack(){Image($r('app.media.placeholder')).width(60).height(60).borderRadius(8)}.width(60).height(60).backgroundColor('#F0F0F0').borderRadius(8)Column(){Text(item.title).fontSize(14).fontWeight(FontWeight.Bold).fontColor('#333333')Row(){Text(item.type).fontSize(10).fontColor('#8B4513').backgroundColor('#8B45131A').borderRadius(4).padding({left:6,right:6,top:2,bottom:2})Text(item.author).fontSize(12).fontColor('#666666').margin({left:8})}.margin({top:4})}.layoutWeight(1).alignItems(HorizontalAlign.Start).margin({left:12})Image($r('app.media.arrow_right')).width(16).height(16).fillColor('#CCCCCC')}.width('100%').padding(16).backgroundColor(Color.White).borderRadius(12)}.margin({bottom:12})})}.width('90%').layoutWeight(1)}.width('100%').height('100%').linearGradient({direction:GradientDirection.Bottom,colors:[['#8B4513',0],['#F5F5DC',1]]})}}

List组件实现可滚动的结果列表。router.back()返回上一页。

功能扩展

搜索结果页面还可以添加搜索历史记录、搜索建议、结果排序、分页加载、空结果提示等功能。对于复杂的搜索场景,可以添加多维度筛选面板。

总结

本文介绍了Flutter和OpenHarmony平台上搜索结果页面的实现方法。搜索结果页面是搜索功能的核心展示页面,其设计需要清晰展示结果并提供便捷的筛选功能。

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

Dify平台支持的OCR文字识别集成方案

Dify平台支持的OCR文字识别集成方案 在企业数字化转型加速的今天&#xff0c;大量纸质文档、发票、合同和表单依然以图像形式存在。如何高效地从这些“看得见”的图片中提取出“用得上”的结构化信息&#xff0c;并进一步实现智能理解和自动化处理&#xff0c;已成为许多业务场…

作者头像 李华
网站建设 2026/6/8 3:57:14

Dify可视化界面中组件复用的最佳实践

Dify可视化界面中组件复用的最佳实践 在企业加速拥抱AI的今天&#xff0c;一个现实问题摆在面前&#xff1a;为什么同一个知识问答逻辑&#xff0c;在客服系统里做一遍&#xff0c;到了内部培训平台又要重做一次&#xff1f;为什么每次模型升级或提示词优化&#xff0c;都得挨个…

作者头像 李华
网站建设 2026/6/9 20:04:13

css垂直居中的多种写法

本文介绍了四种实现垂直居中的CSS方法flex布局搭配margin <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

作者头像 李华
网站建设 2026/6/9 20:11:27

基于tauri构建全平台应用

可以基于 tauri 开发构建全平台的应用&#xff0c;和 electron 的发布版本动辄百兆不同&#xff0c;tauri 是基于 rust 的&#xff0c;发布版本可以做到几兆大小 tauri 本质上是一个轻量级桌面应用壳&#xff0c;通过前端技术做界面展示&#xff0c;因此 tauri 开发也是需要 no…

作者头像 李华
网站建设 2026/6/7 2:46:31

小熊猫Dev-C++新手指南:5大核心功能解锁编程新体验

小熊猫Dev-C新手指南&#xff1a;5大核心功能解锁编程新体验 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 小熊猫Dev-C是一款基于经典Dev-C优化而来的现代化C/C集成开发环境&#xff0c;内置MinGW-w64 G…

作者头像 李华