为啥这个切换按钮在颤振 - 飞镖中不起作用?

Posted

技术标签:

【中文标题】为啥这个切换按钮在颤振 - 飞镖中不起作用?【英文标题】:Why this toggle button not working in flutter - dart?为什么这个切换按钮在颤振 - 飞镖中不起作用? 【发布时间】:2021-08-14 11:34:30 【问题描述】:

我正在从模型中检索切换按钮的布尔值。该按钮不在屏幕中的真假之间切换。我是新手,请帮我解决这个问题。

这是我为切换按钮提供的代码。

Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 5.0),
                        child: AnimatedContainer(duration: Duration(milliseconds: 1000),
                        height: 35.0,
                        width: 70.0,
                        decoration: BoxDecoration(
                         borderRadius: BorderRadius.circular(20.0),
                          color: TaskData().tasks[0].isOn ? Color(0xFF1F8BD0): Colors.grey[100]!.withOpacity(0.2)
                        ),
                          child: Stack(
                            children: <Widget>[
                              AnimatedPositioned(
                                  duration: Duration(milliseconds: 400),
                                curve: Curves.ease,
                                left: TaskData().tasks[0].isOn ? 30.0 : 0.0,
                                right: TaskData().tasks[0].isOn ? 0.0 : 30.0,
                                child: InkWell(
                                  onTap: ()
                                    setState(() 
                                      TaskData().tasks[0].isOn = !TaskData().tasks[0].isOn;
                                    );
                                  ,
                                  child: AnimatedSwitcher(
                                    duration: Duration(milliseconds: 10),
                                    transitionBuilder: (Widget child, Animation<double> animation) 
                                      return ScaleTransition(child: child, scale: animation);
                                    ,
                                    child: TaskData().tasks[0].isOn? Icon(Icons.circle, color: Colors.white, size: 35.0,
                                    key: UniqueKey(),
                                    ) : Icon(Icons.circle, color: Colors.white, size: 35.0,
                                    key: UniqueKey(),
                                    ),
                                  ),
                                ),
                              ),
                            ],
                          ),
                        ),
                      )

此代码来自模型:

class T
final String tsk;
 bool isOn;

 T(required this.tsk, required this.isOn);
 

class TaskData 
 List tasks = [
  T(tsk: "complete the work", isOn: false),
  T(tsk: "do the work", isOn: false),
  T(tsk: "do the pending works", isOn: false)
]

【问题讨论】:

【参考方案1】:

每次使用TaskData() 时,都会创建该类的 实例,并带有 任务列表。

您需要创建一个包含TaskData 实例的变量。否则,您所做的所有更改都将毫无意义,因为您每次调用都会重新创建数据。

在您的程序中的某个时刻,您需要一个变量,可以将其命名为 myTaskData

final myTaskData = TaskData();

然后将每次调用TaskData() 替换为myTaskData,这样它们都引用同一个实例。

请注意,build 方法不是该变量的正确位置。它应该在某种State 类的类级别上。

【讨论】:

你能给我提供如何实现你的解决方案的代码吗? @gocaf19619 我做到了。如果您需要更多信息,您需要提供我可以修改的minimal reproducible example。

以上是关于为啥这个切换按钮在颤振 - 飞镖中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥切换屏幕在 kivy 中不起作用?

为啥在模式内部切换在 laravel 中不起作用?

切换按钮在引导程序4中不起作用,而角度7应用程序在导航栏中不起作用

切换按钮折叠在 Bootstrap 导航栏中不起作用

AngularJS、SweetAlert.js 在自定义指令中不起作用

为啥事件触发器在统一 2d 中不起作用?