class TodoItem extends StatelessWidget {
final Todo todo;
const TodoItem({super.key, required this.todo});
@override
Widget build(BuildContext context) {
return ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 5),
selectedTileColor: Colors.red,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15)
),
tileColor: Colors.grey,
leading: **IconButton(
color: Colors.black,
iconSize: 18,
icon: Icon(
todo.isDone ? Icons.check_box : Icons.check_box_outline_blank
),
onPressed: () {
todo.isDone = !todo.isDone;
},
),**
title: Text(
"${todo.body}",
style: const TextStyle(
fontSize: 25,
color: Colors.black,
decoration: TextDecoration.lineThrough,
),
),
subtitle: const Text(
'date',
style: TextStyle(
color: Colors.black,
fontSize: 15,
),
),
trailing: Container(
height: 30,
width: 30,
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(5),
),
child: IconButton(
color: Colors.white,
iconSize: 18,
icon: const Icon(Icons.delete),
onPressed: () {},
),
),
);
}
}
字符串
这是一个类,但问题是:
leading: IconButton(
color: Colors.black,
iconSize: 18,
icon: Icon(
todo.isDone ? Icons.check_box : Icons.check_box_outline_blank // here is just giving me the checkbox
),
onPressed: () {
todo.isDone = !todo.isDone;
},
),
型
没有尝试其他任何东西.我知道另一种方法可以工作,但它只是一个图标
3条答案
按热度按时间e5njpo681#
我发现了问题:首先我必须使用一个有状态的小部件,在onPressed函数中我需要使用setstate函数
7qhs6swi2#
您可以在更改
todo.isDone
的值后使用setState((){})
,方法是创建小部件StatefulWidget
,或者使用可以将Todo
中的isDone
的值声明为bool类型的ValueNotifier
,并将ListTIle
Package 在ValueListenableBuilder
中以重新呈现UI并反映更改。wsewodh23#
要更新视图,可以使用有状态的小部件和setState。
字符串
{\fnSimHei\bord1\shad1\pos(200,288)}