模板网站建设的公司学校网站建设项目管理报告

张小明 2026/1/14 19:33:13
模板网站建设的公司,学校网站建设项目管理报告,中咨工程咨询有限公司,听书369进入公众号# 前言 拖拽排序是一种直观的交互方式#xff0c;用户可以通过长按并拖动来调整列表项的顺序。在笔记应用中#xff0c;拖拽排序可以用于调整笔记的显示顺序、任务清单的优先级、文件夹的排列等场景。一个流畅的拖拽排序功能需要提供清晰的视觉反馈和平滑的动画效果。本文将详…#前言拖拽排序是一种直观的交互方式用户可以通过长按并拖动来调整列表项的顺序。在笔记应用中拖拽排序可以用于调整笔记的显示顺序、任务清单的优先级、文件夹的排列等场景。一个流畅的拖拽排序功能需要提供清晰的视觉反馈和平滑的动画效果。本文将详细介绍如何在Flutter和OpenHarmony平台上实现拖拽排序功能。Flutter ReorderableListViewFlutter提供了ReorderableListView组件实现拖拽排序。classReorderableNotesPageextendsStatefulWidget{override_ReorderableNotesPageStatecreateState()_ReorderableNotesPageState();}class_ReorderableNotesPageStateextendsStateReorderableNotesPage{ListNote_notes[Note(id:1,title:笔记一),Note(id:2,title:笔记二),Note(id:3,title:笔记三),Note(id:4,title:笔记四),];overrideWidgetbuild(BuildContextcontext){returnReorderableListView.builder(itemCount:_notes.length,itemBuilder:(context,index){returnListTile(key:ValueKey(_notes[index].id),title:Text(_notes[index].title),trailing:ReorderableDragStartListener(index:index,child:Icon(Icons.drag_handle),),);},onReorder:(oldIndex,newIndex){setState((){if(newIndexoldIndex)newIndex--;finalitem_notes.removeAt(oldIndex);_notes.insert(newIndex,item);});},);}}ReorderableListView.builder是构建可排序列表的推荐方式。每个列表项必须有唯一的key通常使用数据的id。ReorderableDragStartListener提供拖拽手柄用户可以通过拖动手柄来排序而不是长按整个列表项。onReorder回调在排序完成时触发需要手动更新数据列表的顺序。注意当newIndex大于oldIndex时需要减1这是因为移除元素后索引会发生变化。ReorderableListView.builder(itemCount:_notes.length,proxyDecorator:(child,index,animation){returnAnimatedBuilder(animation:animation,builder:(context,child){finalelevationlerpDouble(0,8,animation.value);returnMaterial(elevation:elevation!,shadowColor:Colors.black45,child:child,);},child:child,);},itemBuilder:(context,index){returnNoteCard(key:ValueKey(_notes[index].id),note:_notes[index],);},onReorder:_handleReorder,)proxyDecorator属性可以自定义拖拽时的视觉效果。animation参数提供拖拽动画的进度值可以用于创建动态效果。这里使用lerpDouble在0和8之间插值计算阴影高度拖拽时卡片会浮起并显示阴影增强拖拽的视觉反馈。Material组件提供阴影效果让拖拽的项目看起来悬浮在其他项目之上。自定义拖拽效果有时需要更精细地控制拖拽行为。classDraggableNoteListextendsStatefulWidget{override_DraggableNoteListStatecreateState()_DraggableNoteListState();}class_DraggableNoteListStateextendsStateDraggableNoteList{ListNote_notes[];int?_draggingIndex;overrideWidgetbuild(BuildContextcontext){returnListView.builder(itemCount:_notes.length,itemBuilder:(context,index){returnLongPressDraggableint(data:index,feedback:Material(elevation:8,child:SizedBox(width:MediaQuery.of(context).size.width-32,child:NoteCard(note:_notes[index]),),),childWhenDragging:Opacity(opacity:0.5,child:NoteCard(note:_notes[index]),),onDragStarted:(){setState(()_draggingIndexindex);},onDragEnd:(details){setState(()_draggingIndexnull);},child:DragTargetint(onAccept:(fromIndex){_reorderNotes(fromIndex,index);},builder:(context,candidateData,rejectedData){returnNoteCard(note:_notes[index],isHighlighted:candidateData.isNotEmpty,);},),);},);}}LongPressDraggable和DragTarget组合可以实现更灵活的拖拽排序。LongPressDraggable在长按时开始拖拽feedback是拖拽时显示的WidgetchildWhenDragging是原位置显示的Widget。DragTarget是放置目标onAccept在拖拽项放置时触发。candidateData包含当前悬停在目标上的数据可以用于显示高亮效果。这种方式提供了完全的控制权可以实现任意复杂的拖拽交互。void_reorderNotes(int fromIndex,int toIndex){setState((){finalitem_notes.removeAt(fromIndex);if(toIndexfromIndex)toIndex--;_notes.insert(toIndex,item);_saveOrder();});}Futurevoid_saveOrder()async{finalorderData_notes.map((n)n.id).toList();awaitNoteService.saveNoteOrder(orderData);}排序完成后通常需要持久化保存新的顺序。_saveOrder方法将笔记ID列表保存到本地存储或服务器。这样用户下次打开应用时可以看到之前调整的顺序。排序数据的持久化是拖拽排序功能完整性的重要组成部分。OpenHarmony拖拽排序OpenHarmony通过List组件的拖拽功能实现排序。EntryComponentstruct ReorderableNotesPage{StatenoteList:NoteItem[][{id:1,title:笔记一},{id:2,title:笔记二},{id:3,title:笔记三},{id:4,title:笔记四}]build(){List(){ForEach(this.noteList,(item:NoteItem,index:number){ListItem(){Row(){Text(item.title).fontSize(16).layoutWeight(1)Image($r(app.media.drag_handle)).width(24).height(24).fillColor(#999999)}.width(100%).padding(15).backgroundColor(#FFFFFF)}},(item:NoteItem)item.id)}.editMode(true).onItemMove((from:number,to:number){this.moveItem(from,to)returntrue})}moveItem(from:number,to:number){letitemthis.noteList.splice(from,1)[0]this.noteList.splice(to,0,item)}}OpenHarmony的List组件通过editMode属性启用编辑模式在编辑模式下可以拖拽排序。onItemMove回调在拖拽排序时触发from和to分别是原索引和目标索引。ForEach的第二个参数是key生成函数确保每个项有唯一标识。moveItem方法使用splice操作数组实现元素移动。返回true表示接受这次移动操作。List(){ForEach(this.noteList,(item:NoteItem,index:number){ListItem(){this.NoteItemBuilder(item)}.swipeAction({end:this.DeleteButtonBuilder(index)})},(item:NoteItem)item.id)}.editMode(this.isEditMode).onItemMove((from:number,to:number){this.moveItem(from,to)returntrue}).onItemDelete((index:number){this.deleteItem(index)returntrue})BuilderDeleteButtonBuilder(index:number){Button(删除).backgroundColor(#FF4D4F).onClick((){this.deleteItem(index)})}List组件还支持滑动操作和删除功能。swipeAction配置滑动时显示的操作按钮end表示从右侧滑出。onItemDelete回调在删除操作时触发。这些功能可以与拖拽排序结合使用提供完整的列表管理能力。isEditMode状态变量可以控制是否启用编辑模式让用户在浏览和编辑模式之间切换。网格拖拽排序网格布局的拖拽排序适合图片或卡片的排列。ReorderableGridView.builder(gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:2,crossAxisSpacing:12,mainAxisSpacing:12,),itemCount:_notes.length,itemBuilder:(context,index){returnCard(key:ValueKey(_notes[index].id),child:Center(child:Text(_notes[index].title)),);},onReorder:(oldIndex,newIndex){setState((){finalitem_notes.removeAt(oldIndex);_notes.insert(newIndex,item);});},)ReorderableGridView提供网格布局的拖拽排序功能。gridDelegate配置网格的列数和间距与普通GridView的配置方式相同。拖拽时其他项会自动让出位置形成流畅的重排动画。网格拖拽排序适合笔记缩略图、图片相册等场景。拖拽排序的视觉反馈良好的视觉反馈可以提升拖拽体验。DragTargetint(onWillAccept:(data)data!index,onAccept:(fromIndex)_reorderNotes(fromIndex,index),builder:(context,candidateData,rejectedData){returnAnimatedContainer(duration:Duration(milliseconds:200),decoration:BoxDecoration(border:candidateData.isNotEmpty?Border.all(color:Colors.blue,width:2):null,borderRadius:BorderRadius.circular(8),),child:NoteCard(note:_notes[index]),);},)当拖拽项悬停在目标上方时显示蓝色边框作为放置提示。AnimatedContainer为边框的出现和消失添加动画效果。onWillAccept可以判断是否接受拖拽这里排除了拖拽到自身的情况。这种视觉反馈让用户清楚地知道可以放置的位置。总结拖拽排序是一种直观高效的交互方式Flutter和OpenHarmony都提供了相应的实现方案。开发者需要关注拖拽的视觉反馈、动画效果和数据持久化为用户提供流畅自然的排序体验。在笔记应用中拖拽排序可以让用户灵活地组织笔记顺序提升内容管理的效率。欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

如何提交网站连接到百度仿做唯品会网站

Linux 图形处理全攻略 1. 创建网络相册 在 Linux 系统中创建属于自己的网络相册,可按以下步骤操作: 1. 选择图片 :按住 CTRL 键,选择想要添加到相册的图片,接着前往 “工具” 菜单,选择 “创建网络相册”,此时会弹出 “网络相册” 新窗口。 2. 选择目标文件夹 …

张小明 2026/1/10 0:08:00 网站建设

南充住房和城乡建设厅网站免费网站建设有哪些

文章目录1、环境介绍2、前言3、内核设备树配置4、内核配置5、Qt 源码修改6、测试7、参考文章8、总结1、环境介绍 硬件:小智 T113 板卡 软件:原厂 Tina5.0 SDK v1.2(Buildroot) 2、前言 我目前使用的屏幕分辨率是280*1424&…

张小明 2026/1/3 19:01:27 网站建设

二手车网站制作网站开发后端语言有哪些

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/7 3:29:27 网站建设

pc手机模板网站建设做网站免费的app是什么

第一章:供应链智能体预警机制概述在现代复杂多变的供应链环境中,智能体(Agent)技术正逐步成为实现动态感知、自主决策与快速响应的核心手段。供应链智能体通过集成传感器数据、业务系统日志及外部环境信息,构建实时监控…

张小明 2026/1/3 19:02:47 网站建设

北京市建设资格注册中心网站网站建设管理总结

Linux系统管理:日志文件与系统时间维护 1. 系统日志管理 系统日志在系统管理中起着至关重要的作用,它可以记录系统活动、帮助排查问题。以下是关于系统日志管理的详细内容。 1.1 日志消息发送规则 系统可以根据不同的规则将日志消息发送到不同的位置。例如,有这样一条规…

张小明 2026/1/6 1:01:52 网站建设

免费网站建设翻译网站制作完成之后进入什么阶段

Aria2下载系统性能优化实战:从零搭建高效离线下载平台 【免费下载链接】aria2.conf Aria2 配置文件 | OneDrive & Google Drvive 离线下载 | 百度网盘转存 项目地址: https://gitcode.com/gh_mirrors/ar/aria2.conf Aria2作为一款轻量级、多协议的命令行…

张小明 2026/1/5 5:37:13 网站建设