当前位置: 首页 > news >正文

flutter使用getx做一个todolist

如图最终效果:

实现步骤:

一、创建基础文件

创建test_controller.dart、test_binding.dart、test_view.dart、index.dart文件,分别对应逻辑层、依赖注入层、视图层、模块入口

路由跳转 → TestBinding 初始化 TestController → TestView 获取控制器并渲染 UI  
→ 用户操作触发 Controller 方法 → Controller 更新状态 → Obx 驱动 UI 刷新  
→ 页面关闭 → GetX 销毁 Controller 并调用 onClose()  
(全程通过 index.dart 简化外部引用)
//test_binding.dart文件代码
import 'package:app3/views/test/test_controller.dart';
import 'package:get/get.dart';class TestBinding extends Bindings {@overridevoid dependencies() {Get.lazyPut(() => TestController());}
}
//index.dart代码
export 'test_binding.dart';
export 'test_controller.dart';
export 'test_view.dart';

二、test_controller.dart中写状态、增删改查方法

//test_controller.dartimport 'package:flutter/material.dart';
import 'package:get/get.dart';class TestController extends GetxController {@overridevoid onInit() {super.onInit();print('初始化生命周期函数:$todoList');// 使用 ever 监听 todoList 的变化ever(todoList, (newValue) {print("todoList 变化了,新值:$newValue");});}@overridevoid onReady() {super.onReady();print('UI 首次构建完成:$todoList');}@overridevoid onClose() {super.onClose();print('页面关闭:$todoList');}final RxList<Map<String, dynamic>> todoList = <Map<String, dynamic>>[{'title': '吃饭', 'isDone': true},{'title': '睡觉', 'isDone': false},{'title': '打游戏', 'isDone': false},{'title': '学习', 'isDone': false},{'title': '看电影', 'isDone': false},{'title': '看小说', 'isDone': false},].obs;void add(Map<String, dynamic> item) {todoList.add(item);}void delete(int index) {todoList.removeAt(index);}void showDeleteDialog(int index) {Get.dialog(AlertDialog(title: const Text('确定要删除吗?'),content: const Text('删除后将无法恢复'),actions: [TextButton(onPressed: () {Get.back();},child: const Text('取消')),TextButton(onPressed: () {delete(index);Get.back();},child: const Text('确定')),],),);}void showAddDialog() {final TextEditingController textController = TextEditingController();Get.dialog(AlertDialog(title: const Text('添加待办事项'),content: TextField(controller: textController,decoration: const InputDecoration(hintText: '请输入标题',border: OutlineInputBorder(),),autofocus: true,),actions: [TextButton(onPressed: () {Get.back();},child: const Text('取消')),TextButton(onPressed: () {if (textController.text.trim().isNotEmpty) {add({'title': textController.text.trim(), 'isDone': false});Get.back();}},child: const Text('确定')),],),);}void finish(int index) {todoList[index]['isDone'] = !todoList[index]['isDone'];todoList.refresh(); // 手动触发更新}
}

三、test_view.dart文件视图渲染

import 'package:app3/views/test/test_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';class TestView extends GetView<TestController> {const TestView({super.key});@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('todolist')),body: Column(children: [Expanded(child: Obx(() => ListView.builder(itemCount: controller.todoList.length,// 构建每个列表项itemBuilder: (BuildContext context, int index) {return ListTile(leading: Checkbox(value: controller.todoList[index]['isDone'], onChanged: (value) {controller.finish(index);}),title: Text('${controller.todoList[index]['title']}',style: TextStyle(decoration: controller.todoList[index]['isDone'] ? TextDecoration.lineThrough : TextDecoration.none,color: controller.todoList[index]['isDone']? Colors.grey: null,),),subtitle: Text('这是第${index + 1}个条目'),trailing: IconButton(onPressed: () {controller.showDeleteDialog(index);}, icon: const Icon(Icons.delete)),);},)),)],),floatingActionButton: FloatingActionButton(onPressed: () {controller.showAddDialog();},child: const Icon(Icons.add),),);}
}

http://www.dtcms.com/a/524397.html

相关文章:

  • 威海市住房和城乡建设局官方网站广东省公路建设有限公司网站
  • 5.深度学习:从Softmax到模型评估
  • 吴恩达深度学习课程一:神经网络和深度学习 第三周:浅层神经网络(二)
  • 在优豆云免费云服务器上搭建与配置Apache的实践笔记
  • 网站开发设计是前端吗伯维网站建设
  • 成都seo优化公司搜素引擎优化
  • Cesium中的倒立四棱锥:从几何结构到交互式3D可视化
  • 从传统架构到云原生,如何应对数据增长挑战?
  • Extreme Views 的3DGS!
  • 南京网站开发哪家好如何在自己做的网站中顶置内容
  • LeetCode 面试经典 150_链表_随机链表的复制(59_138_C++_中等)
  • WPS 365政务版亮相2025数博会,AI生成公文可用度达90%
  • 判断网站是否被k校园类网站模板
  • wordpress删除站点怎样给建设的网站提意见
  • Zabbix Agent 安装
  • RTX5060TI 安装C++版本的onnxruntime(GPU版本)
  • MCP(trae)+ IDA-提高干活效率
  • Spring Boot微服务健康检测:保障系统稳定性的关键实践
  • 利用Java API与HDFS进行交互
  • Linux 中修改 IP 地址为 静态 IP 地址
  • 一团网站建设个人网页设计作业
  • 做网站商城赔了8万卢松松网站源码
  • 界面控件Kendo UI for Angular 2025 Q3亮点 - 全新的AI编码助手
  • 鸿蒙HarmonyOS ArkUI 状态管理装饰器详解
  • 旅游景点网站建设防疫测温健康码核验一体机
  • 一套试卷——数据结构(2020数据结构B)
  • 性能测试之性能监控详解
  • 阿里云国际站GPU:怎么通过通过VNC连接实例?
  • Elasticsearch 实现类 GitHub 关键词搜索与高亮列表展示
  • 怎么查看网站外链效果宁波seo推广哪家好