Я создаю приложение «Список задач» и застрял, чтобы применить анимацию, чтобы поменять значок задачи на другой значок, чтобы сказать, что он не завершен, и наоборот.
Это мой ListTile, который это часть списка и содержит значок, который я хочу изменить.
class _TaskListItemState extends State<TaskListItem> {
@override
Widget build(BuildContext context) {
final taskProvider = Provider.of<TaskProvider>(context, listen: false);
var completeIcon = widget.task.completed //? Icons.check_circle_outline : Icons.panorama_fish_eye;
? CompletedIcon(ValueKey(1), Icons.check_circle_outline)
: CompletedIcon(ValueKey(2), Icons.panorama_fish_eye);
return ListTile(
leading: IconButton(
icon: AnimatedSwitcher(
duration: const Duration(seconds: 3),
transitionBuilder: (Widget child, Animation<double> animation) {
return ScaleTransition(child: child, scale: animation,);
},
child: completeIcon,
),
onPressed: () {
setState(() {
if (widget.task.completed)
completeIcon = CompletedIcon(ValueKey(2), Icons.panorama_fish_eye);
else
completeIcon = CompletedIcon(ValueKey(1), Icons.check_circle_outline);
});
taskProvider.toggleCompleted(widget.task.id);
}
),
title: Text(
widget.task.name,
style: TextStyle(
color: Theme.of(context).popupMenuTheme.textStyle.color
),
),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
widget.task.label
? Padding(
padding: const EdgeInsets.fromLTRB(0, 0, 2, 0),
child: Icon(
Icons.label,
size: Theme.of(context).iconTheme.size,
),
)
: Container(),
widget.task.dueDate == null
? Container()
: Padding(
padding: const EdgeInsets.symmetric(horizontal: 2, vertical: 0),
child: Icon(
Icons.event_available,
size: Theme.of(context).iconTheme.size,
color: Theme.of(context).iconTheme.color
),
),
widget.task.reminder
? Padding(
padding: const EdgeInsets.fromLTRB(2, 0, 0, 0),
child: Icon(
Icons.notifications,
size: Theme.of(context).iconTheme.size,
color: Theme.of(context).iconTheme.color,
),
)
: Container(),
],
),
);
// );
}
}
Это виджет, который я создал, чтобы отделить значок и изменить его (не знаю, если это необходимо)
class CompletedIcon extends StatelessWidget {
final ValueKey key;
final IconData icon;
CompletedIcon(this.key, this.icon);
@override
Widget build(BuildContext context) {
return Icon(
icon,
key: key,
color: Theme.of(context).iconTheme.color,
size: Theme.of(context).iconTheme.size
);
}
}
Я сделал все это, следуя документации AnimatedSwitcher, но я не получаю ошибок, и значок не меняется.
Любая помощь будет оценена. Спасибо.