Flutter AnimatedSwitcher с иконкой не происходит - PullRequest
0 голосов
/ 24 апреля 2020

Я создаю приложение «Список задач» и застрял, чтобы применить анимацию, чтобы поменять значок задачи на другой значок, чтобы сказать, что он не завершен, и наоборот.

Это мой 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, но я не получаю ошибок, и значок не меняется.

Любая помощь будет оценена. Спасибо.

...