发布时间:2026/7/19 2:31:23
及时做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/7/19 2:31:23

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

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

2026/7/19 2:26:23

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

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

2026/7/19 2:26:23

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

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

2026/7/19 5:31:31

程序员不会消失,但“只会写代码”的程序员会消失

一、引言:AI 时代的“柯达时刻”错觉 2025 年的技术圈弥漫着一种集体焦虑:Cursor 能根据几行注释生成完整模块,Devin 号称“首位 AI 软件工程师”,Copilot 已接管了超过 40% 的代码生成任务。于是,“程序员是否终将被 …

2026/7/19 5:31:31

Nginx主动防御配置实战:构建Cloudflare后的第二道安全防线

1. 项目概述:为什么你的网站需要“双保险”?如果你正在使用 Cloudflare 作为 CDN 和防护盾,并且后端服务器运行着 Nginx,那么恭喜你,你已经站在了一个非常稳固的起点上。但很多朋友可能就止步于此了:在 Ngi…

2026/7/19 5:31:31

tox + testr 单元测试工作流程详解:从环境隔离到并行执行

两个工具各做什么 工具 全称 核心职责 tox tox 标准化的虚拟环境管理 测试编排 testr testrepository 测试仓库管理、并行执行、结果持久化 一句话概括: tox 解决的是「在干净的虚拟环境里跑测试,避免依赖污染」。 testr 解决的是「几十万测试怎么并行跑、跑完的结果如何归档复…

2026/7/19 5:31:31

Python模拟生日攻击:从哈希碰撞原理到密码学安全实践

1. 项目概述:从“生日悖论”到“生日攻击” 你可能听说过一个有趣的概率问题:在一个23人的房间里,至少有两个人生日相同的概率有多大?直觉上,我们可能会觉得这个概率很低,毕竟一年有365天。但数学计算会告诉…

2026/7/19 5:31:31

VS2017移动开发环境配置与跨平台实战指南

1. VS2017移动开发环境全景解析作为微软最后一款支持经典Xamarin框架的IDE,Visual Studio 2017在移动开发领域仍保有独特优势。我亲历过从VS2015到VS2019的完整迁移过程,发现2017版本在Android/iOS跨平台开发上有着最佳的平衡性——既具备成熟的工具链支…

2026/7/19 5:26:31

AI古风视频创作过程和拆解AI范式镜头语言

我最近在做AI视频,这两天我博采众长写一下我的发现!我想做AI视频,主要是看到好看的画面,而且做视频真的很放松哎,还不用真的画画,只用思考效果和剧情,想看什么造什么的感觉好好!就是…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/18 16:50:29

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…