及时做APP开发实战(十四)-专注页面待办选择优化

发布时间:2026/9/14 18:19:00

及时做APP开发实战(十四)-专注页面待办选择优化 及时做APP开发实战(十四)-专注页面待办选择优化本文将介绍如何修复专注页面待办任务只显示5条的BUG并优化弹窗交互体验。一、问题分析1.1 问题现象┌─────────────────────────────────────┐ │ 选择待办任务 │ ├─────────────────────────────────────┤ │ ┌─────────────────────────────┐ │ │ │ ☐ 学习ArkTS基础 │ │ │ │ ☐ 开发及时做APP │ │ │ │ ☐ 写博客文档 │ │ │ │ ☐ 代码优化 │ │ │ │ ☐ 测试功能 │ │ │ └─────────────────────────────┘ │ ← 只显示5条 │ │ │ 实际有10条待办但看不到 │ └─────────────────────────────────────┘1.2 问题原因问题分析 ┌─────────────────────────────────────┐ │ bindSheet height: 400 │ │ ↓ │ │ 弹窗高度固定为400vp │ │ ↓ │ │ List组件可滚动但弹窗高度不够 │ │ ↓ │ │ ❌ 用户无法看到更多待办 │ └─────────────────────────────────────┘二、bindSheet弹窗详解2.1 bindSheet基本用法Componentstruct MyComponent{StateshowSheet:booleanfalse;build(){Column(){Button(打开弹窗).onClick((){this.showSheettrue;})}.bindSheet($$this.showSheet,this.MySheet(),{height:400,// 弹窗高度backgroundColor:Color.White,// 背景色dragBar:true,// 拖拽栏onWillDismiss:(){// 关闭回调this.showSheetfalse;}})}BuilderMySheet(){Column(){Text(弹窗内容)}}}2.2 弹窗高度设置属性说明推荐值height弹窗高度300-600vpdragBar是否显示拖拽栏truebackgroundColor背景颜色根据主题2.3 弹窗高度计算┌─────────────────────────────────────┐ │ 弹窗高度计算 │ ├─────────────────────────────────────┤ │ 标题栏高度约50vp │ │ 列表项高度约60vp │ │ 内边距约30vp │ │ ───────────────────── │ │ 显示5条50 60×5 30 380vp │ │ 显示8条50 60×8 30 560vp │ │ 显示10条50 60×10 30 680vp │ └─────────────────────────────────────┘三、解决方案3.1 修改前代码.bindSheet($$this.showTodoPicker,this.TodoPickerSheet(),{height:400,// ❌ 高度不够backgroundColor:this.isDarkMode?#2D2D2D:Color.White,dragBar:true,onWillDismiss:(){this.showTodoPickerfalse;}})3.2 修改后代码.bindSheet($$this.showTodoPicker,this.TodoPickerSheet(),{height:500,// ✅ 增加高度backgroundColor:this.isDarkMode?#2D2D2D:Color.White,dragBar:true,onWillDismiss:(){this.showTodoPickerfalse;}})3.3 弹窗内容优化BuilderTodoPickerSheet(){Column(){// 标题栏Row(){Text(选择待办任务).fontSize(20).fontWeight(FontWeight.Bold)Blank()Button(取消).onClick((){this.showTodoPickerfalse;})}.width(100%).padding(15)Divider()// 待办列表 - 可滚动List({space:10}){ForEach(this.todoList,(todo:TodoItem){ListItem(){this.TodoItemCard(todo)}},(todo:TodoItem)todo.id.toString())}.width(100%).layoutWeight(1)// 占满剩余空间.padding(15)}.width(100%).height(100%)}四、交互体验优化4.1 拖拽栏功能┌─────────────────────────────────────┐ │ 拖拽栏交互 │ ├─────────────────────────────────────┤ │ ┌─────────────────────────────┐ │ │ │ ═══════ │ │ ← 拖拽栏可拖动 │ │ │ │ │ │ 选择待办任务 │ │ │ │ ───────────── │ │ │ │ ☐ 待办1 │ │ │ │ ☐ 待办2 │ │ │ │ ... │ │ │ └─────────────────────────────┘ │ │ │ │ 用户可以 │ │ - 向上拖动展开弹窗 │ │ - 向下拖动收起弹窗 │ │ - 拖到底部关闭弹窗 │ └─────────────────────────────────────┘4.2 列表滚动优化List({space:10}){ForEach(this.todoList,(todo:TodoItem){ListItem(){this.TodoItemCard(todo)}})}.width(100%).layoutWeight(1).edgeEffect(EdgeEffect.Spring)// ✅ 添加弹性滚动效果.nestedScroll({// ✅ 嵌套滚动支持scrollForward:NestedScrollMode.PARENT_FIRST,scrollBackward:NestedScrollMode.SELF_FIRST})4.3 空状态处理if(this.todoList.length0){// 空状态提示Column(){Text(暂无可选待办).fontSize(16).fontColor(#999999)Text(请先添加待办任务).fontSize(14).fontColor(#CCCCCC).margin({top:10})Button(去添加).margin({top:20}).onClick((){// 跳转到待办页面})}.width(100%).height(100%).justifyContent(FlexAlign.Center)}else{// 待办列表List(){...}}五、完整代码示例5.1 待办选择弹窗BuilderTodoPickerSheet(){Column(){// 标题栏Row(){Text(选择待办任务).fontSize(20).fontWeight(FontWeight.Bold).fontColor(this.isDarkMode?#FFFFFF:#333333)Blank()Button(取消).fontSize(14).fontColor(this.themeColors.primary).backgroundColor(Color.Transparent).onClick((){this.showTodoPickerfalse;})}.width(100%).padding({left:20,right:20,top:15,bottom:15})Divider().color(this.themeColors.border)// 待办列表if(this.todoList.length0){this.EmptyState()}else{List({space:10}){ForEach(this.todoList,(todo:TodoItem){ListItem(){this.TodoItemCard(todo)}},(todo:TodoItem)todo.id.toString())}.width(100%).layoutWeight(1).padding({left:15,right:15,top:10,bottom:10})}}.width(100%).height(100%).backgroundColor(this.isDarkMode?#2D2D2D:#F5F5F5)}5.2 待办卡片BuilderTodoItemCard(todo:TodoItem){Row(){// 番茄钟图标Text().fontSize(24)// 待办信息Column(){Text(todo.text).fontSize(16).fontColor(this.isDarkMode?#FFFFFF:#333333).maxLines(1).textOverflow({overflow:TextOverflow.Ellipsis})if(todo.pomodoroCount0){Text(已完成${todo.pomodoroCount}个番茄钟).fontSize(12).fontColor(this.isDarkMode?#AAAAAA:#999999).margin({top:4})}}.layoutWeight(1).alignItems(HorizontalAlign.Start).margin({left:12})// 选择图标if(this.currentTodo?.idtodo.id){Text(✓).fontSize(20).fontColor(this.themeColors.primary)}}.width(100%).padding(15).backgroundColor(this.isDarkMode?#3D3D3D:#FFFFFF).borderRadius(12).onClick((){this.currentTodotodo;this.showTodoPickerfalse;})}六、总结本文修复了专注页面待办选择只显示5条的问题核心要点问题原因弹窗高度固定为400vp不够显示更多内容解决方案增加弹窗高度到500vp优化建议添加拖拽栏、滚动效果、空状态处理
延伸阅读

更多相关文章

2026/9/14 7:42:06

嵌入式应届生求职指南:从0项目经验到实战能力构建

最近在嵌入式技术交流群中,经常看到应届生同学提问:"0项目经验找工作,包装简历靠谱吗?" 这确实是一个很现实的问题。作为从嵌入式开发一路走过来的技术人,我理解大家在求职季的焦虑,但更想从行业…

2026/9/9 12:56:27

AM62L DTHE_V2 SHA引擎寄存器详解:从硬件加速原理到安全驱动实践

1. 项目概述与核心价值在嵌入式系统,尤其是对安全有严苛要求的物联网终端、汽车电子或工业控制器中,实现高效且可靠的数据完整性校验与身份认证是基础需求。SHA系列哈希算法和HMAC(基于哈希的消息认证码)是达成这一目标的基石算法…

2026/9/14 17:48:02

1990-2025年上市公司数据大全

数据概览本数据库整合了中国A股上市公司的多维度信息,涵盖公司基本信息、股权性质与实际控制人、行业分类、地理信息、公司治理、内部控制、财务指标、研发创新、专利数据、税费信息、EVA经济增加值等多个研究视角,总计1465个变量,为实证研究…

2026/9/14 18:15:17

Bigemap Pro图层计算功能解析与应用实践

1. Bigemap Pro图层计算功能概述 Bigemap Pro作为一款专业级地理信息系统软件,其图层计算功能为空间数据处理提供了高效精准的操作手段。在实际工作中,我们经常需要对地图图层进行各种几何运算,比如从一张土地利用图中提取特定区域&#xff0…

2026/9/14 18:15:17

信息整合与传播:跨领域数据关联分析与实用建议

1. 项目背景与核心价值作为一名长期关注信息整合与传播的从业者,我注意到当前信息过载环境下,公众对经过系统梳理的综合性资讯需求日益增长。这个项目正是针对2026年4月6日这一特定时间节点,将看似分散的强对流天气预警、景区管理措施、医疗科…

2026/9/14 18:15:17

Web漏洞学习方法论:先原理后手挖再工具

不用怀疑,Web漏洞学习这条路,最怕的不是入门难,而是方向错。很多人一上来就问我“用什么工具”,开口就是“能不能推荐个扫描器”,这种思维再练三年也还是脚本小子。我自己带过不少新人,也踩过不少坑&#x…

2026/9/14 18:10:15

Python多线程为什么反而更慢?GIL原理与绕过方案全解析

“少熬三天夜”这个标题,写出来一点都不夸张。上上周末我在公司优化一个订单归并服务,单线程处理几十万条数据要跑四十多秒,领导嫌慢让我提效。我当时第一反应就是加线程,Python 多线程谁不会?一行ThreadPoolExecutor丢…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码