我在此处创建了您的 Todo 应用创意的简单版本供您参考。使用isDone 属性为每个任务项创建Task 对象会更容易,您可以稍后操作并使用它来检查任务完成情况。比如:
class Task {
bool isDone;
String content;
Task({this.isDone = false, this.content});
}
然后您可以使用_showDone 变量来控制是否显示已完成任务的状态。在这里,我在文本中添加了一个斜线,以表明这是一项已完成的任务。然后,如果您愿意,只需在按钮/选项卡单击中触发此_showDone。这里我使用了一个浮动文本按钮。
全面实施:
import "package:flutter/material.dart";
main() {
runApp(MaterialApp(
home: HomePage(),
));
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool _showDone = false;
List<Task> _tasks =
List<Task>.generate(10, (index) => Task(content: 'Task $index'));
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: TextButton(
onPressed: () => setState(() => _showDone = !_showDone),
child: _showDone ? Text('Hide done') : Text('Show done'),
),
appBar: AppBar(title: Text('Sample Todo App')),
body: Container(
alignment: Alignment.center,
child: ListView(
children: List<Widget>.generate(_tasks.length, (index) {
if (!_tasks[index].isDone) {
return _buildTaskItem(index);
} else {
if (_showDone) return _buildTaskItem(index);
return Container();
}
}),
),
),
);
}
Widget _buildTaskItem(index) {
return ListTile(
title: Text(
_tasks[index].content,
style: TextStyle(
decoration:
_tasks[index].isDone ? TextDecoration.lineThrough : null),
),
onTap: () => setState(() => _tasks[index].isDone = !_tasks[index].isDone),
);
}
}
class Task {
bool isDone;
String content;
Task({this.isDone = false, this.content});
}