news 2026/4/15 9:50:46

构建 OpenHarmony 简易待办事项清单:用状态驱动实现最小可行任务管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
构建 OpenHarmony 简易待办事项清单:用状态驱动实现最小可行任务管理

一、为什么需要“简易待办事项清单”?

在 OpenHarmony 的多设备协同场景中,用户常需快速记录临时任务:

  • 购物清单(手机录入,车机查看);
  • 会议要点(平板记录,手表提醒);
  • 家务分配(智慧屏共享)。

但许多待办应用过度复杂:

  • 账号登录;
  • 云同步;
  • 分类标签;
  • 截止日期。

而一个纯本地、即时、无干扰的清单,反而更适合短时、轻量、一次性任务。它不承诺持久化,只提供“此刻可用”的工具价值。

本文将构建一个极简页面:「简易待办事项清单」。它只包含:

  • 一个文本输入框(用于输入任务);
  • 一个“添加”按钮;
  • 一个可滚动的任务列表,每项左侧带 Checkbox,勾选后文字显示删除线。

所有数据保存在List<Task>中,关闭应用即清空,符合“临时便签”定位。


二、完整可运行代码

// lib/main.dartimport'package:flutter/material.dart';voidmain(){runApp(constMyApp());}classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(title:'待办清单',debugShowCheckedModeBanner:false,theme:ThemeData(useMaterial3:true,colorScheme:ColorScheme.fromSeed(seedColor:Colors.pink)),home:constTodoListPage(),);}}classTask{finalStringcontent;bool completed;Task(this.content):completed=false;}classTodoListPageextendsStatefulWidget{constTodoListPage({super.key});@overrideState<TodoListPage>createState()=>_TodoListPageState();}class_TodoListPageStateextendsState<TodoListPage>{finalTextEditingController_controller=TextEditingController();finalList<Task>_tasks=[];void_addTask(){finaltext=_controller.text.trim();if(text.isNotEmpty){setState((){_tasks.add(Task(text));_controller.clear();});}}void_toggleTask(int index){setState((){_tasks[index].completed=!_tasks[index].completed;});}@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:constText('简易待办清单')),body:Column(children:[Padding(padding:constEdgeInsets.all(16),child:Row(children:[Expanded(child:TextField(controller:_controller,decoration:constInputDecoration(hintText:'输入任务...'),onSubmitted:(_)=>_addTask(),),),IconButton(onPressed:_addTask,icon:constIcon(Icons.add)),],),),Expanded(child:ListView.builder(itemCount:_tasks.length,itemBuilder:(context,index){finaltask=_tasks[index];returnCheckboxListTile(title:Text(task.content,style:TextStyle(decoration:task.completed?TextDecoration.lineThrough:TextDecoration.none,),),value:task.completed,onChanged:(bool?value){if(value!=null){_toggleTask(index);}},);},),),],),);}}

三、核心思想:状态即数据,UI 即视图

待办清单的本质是状态的可视化

  • 每个任务是一个对象(Task);
  • 对象有两个属性:content(内容)和completed(是否完成);
  • UI 根据completed值决定是否显示删除线;
  • 用户操作(添加/勾选)直接修改状态,触发 UI 重建。

这种“状态 → 视图”的单向数据流,是 Flutter 的核心范式,也是构建可靠 UI 的基石。


四、任务模型与状态管理:

我们首先看任务数据结构与添加逻辑:

classTask{finalStringcontent;bool completed;Task(this.content):completed=false;}void_addTask(){finaltext=_controller.text.trim();if(text.isNotEmpty){setState((){_tasks.add(Task(text));_controller.clear();});}}

这段代码定义了最小可行任务模型

  • Task
    • contentfinal,创建后不可变(内容不应被意外修改);
    • completed为可变bool,表示任务状态;
    • 构造函数默认completed = false,符合新任务未完成的常识。
  • _addTask方法
    • trim()去除首尾空格,避免“空任务”;
    • isNotEmpty确保非空才添加;
    • setState包裹_tasks.add(...)_controller.clear(),保证状态与 UI 同步;
    • 添加后立即清空输入框,提升连续输入体验。

💡 此设计不验证重复任务——允许用户添加多个相同任务(如“买牛奶”两次),符合真实使用场景。


五、动态样式与交互反馈:

再看任务列表渲染逻辑:

CheckboxListTile(title:Text(task.content,style:TextStyle(decoration:task.completed?TextDecoration.lineThrough:TextDecoration.none,),),value:task.completed,onChanged:(bool?value){if(value!=null){_toggleTask(index);}},);

这里展示了状态驱动样式的典型用法

  • TextDecoration.lineThrough
    • task.completed == true时,文字显示删除线;
    • 否则正常显示;
    • 这是 Flutter 内置文本装饰,无需自定义绘制;
  • CheckboxListTile
    • 是 Material Design 标准组件,自动处理布局、间距、点击反馈;
    • value控制 Checkbox 状态;
    • onChanged回调中,显式检查value != null(API 设计要求);
  • _toggleTask(index)
    • 通过索引修改_tasks中对应任务的completed值;
    • setState触发整个列表重建,确保样式更新。

📌 值得注意的是,未使用ListView.separated或自定义分割线,因为CheckboxListTile已自带足够视觉分隔,保持界面清爽。


六、为何这个清单适合 OpenHarmony 场景?

1. 轻量无负担

  • 无账号、无同步、无设置;
  • 关闭即清空,避免隐私残留;
  • 适合临时记录(如“待会要做的事”)。

2. 多端一致体验

  • 在手表上:大触控区域便于勾选;
  • 在平板上:列表可容纳更多任务;
  • 在智慧屏上:作为家庭共享白板。

3. 教学价值

  • 演示StatefulWidget管理列表状态;
  • 展示CheckboxListTile与动态样式的组合;
  • 体现“输入-状态-视图”闭环。

七、工程注意事项

1. 性能

  • ListView.builder仅构建可见项,即使有 100 条任务也流畅;
  • Task对象轻量,内存占用低。

2. 可访问性

  • CheckboxListTile自带无障碍支持(TalkBack 可读);
  • 删除线不影响屏幕阅读器内容(仍读原文)。

3. 扩展建议(保持核心简洁)

  • 清除已完成:增加“清理”按钮;
  • 任务计数:显示“3/5 已完成”;
  • 长按删除:但会增加交互复杂度,本文未实现。

八、结语:最小功能,最大价值

本文的页面仅 69 行代码,却完整实现了一个可用、可靠、直观的待办清单。它没有花哨功能,只有清晰的状态、即时的反馈、一致的体验

在 OpenHarmony 的分布式世界中,我们常被“跨端协同”所吸引,但不应忘记:最好的工具,往往是那个打开就能用、用完就走的那一个

这个小小的清单,正是对这一理念的践行。

🌐欢迎加入开源鸿蒙跨平台社区
https://openharmonycrossplatform.csdn.net/

在这里,您将获得:

  • OpenHarmony 轻量级工具应用设计指南;
  • Flutter 列表状态管理实战模板;
  • 无依赖实用组件开发经验。

用简单,服务日常。


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

向量RAG已凉?推理式RAG王者归来!PageIndex让AI像专家一样读文档,准确率98.7%,小白程序员也能三秒上手!

当传统的RAG还在依赖向量相似度搜索时&#xff0c;一种全新的基于推理的检索方式正在悄然兴起。 一、破局&#xff1a;传统RAG的困境与PageIndex的诞生 在处理长文档&#xff0c;特别是专业领域的复杂文档时&#xff0c;传统的基于向量数据库的RAG&#xff08;检索增强生成&am…

作者头像 李华
网站建设 2026/4/15 3:26:53

Buck - Boost变换器的非线性PID控制探索

buck-boost变换器的非线性PID控制&#xff0c;主电路也可以换成别的电路。 在经典PID中引入了两个TD非线性跟踪微分器&#xff0c;构成了非线性PID控制器。 当TD的输入为方波时&#xff0c;TD的输出&#xff0c;跟踪方波信号也没有超调&#xff0c;仿真波形如下所示。 输入电压…

作者头像 李华
网站建设 2026/4/1 8:01:31

基于S7 - 200 PLC和组态王的物料传送带装置实现

No.1032 基于S7-200plc和组态王组态物料传送带装置4传送带四传送带输煤传送带 带解释的梯形图程序&#xff0c;接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面在自动化生产领域&#xff0c;物料传送带是极为常见的设备。今天咱们来聊聊基于S7 - 200 PLC和组态王搭建的…

作者头像 李华
网站建设 2026/4/11 18:24:37

探索两电平与三电平 SVPWM 仿真模型

三电平(两电平)SVPWM仿真模型 (1)两电平、三电平三桥臂&#xff1b; (2)有详细的文档介绍&#xff0c;包括原理介绍和仿真模型搭建说明&#xff1b;在电力电子领域&#xff0c;两电平与三电平 SVPWM&#xff08;空间矢量脉宽调制&#xff09;技术是非常重要的部分&#xff0c;今…

作者头像 李华