簡體   English   中英

為什么此切換按鈕在 flutter - dart 中不起作用?

[英]Why this toggle button not working in flutter - dart?

我正在從 model 中檢索切換按鈕的 boolean 值。 該按鈕不在屏幕中的真假之間切換。 我是 flutter 的新手,請幫我解決這個問題。

這是我為切換按鈕提供的代碼。

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(),
                                    ),
                                  ),
                                ),
                              ),
                            ],
                          ),
                        ),
                      )

此代碼來自 Model:

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)
]
}

每次使用TaskData()時,都會使用的任務列表創建該 class 的實例。

您需要創建一個包含TaskData實例的變量。 否則,您所做的所有更改都將毫無意義,因為您每次調用都會重新創建數據。

在您的程序中的某個時刻,您需要一個變量,也許將其命名為myTaskData

final myTaskData = TaskData();

然后用myTaskData替換每個TaskData()調用,這樣它們都引用同一個實例。

請注意, build方法不是該變量的正確位置。 它應該在某種State class 的 class 級別上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM