【问题标题】:Flutter - Switch inside a Widget Function not updatingFlutter - 在小部件功能内切换不更新
【发布时间】:2021-02-19 15:54:26
【问题描述】:

我有这个 Widget 功能:

Widget setDayOpen(String weekDay, bool state) {
  return Container(
    padding: EdgeInsets.only(right: 10, left: 10),
    child: Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Text(weekDay,
          style: TextStyle(
            fontFamily: 'RobotoCondensed',
            fontSize: 20,
            fontWeight: FontWeight.bold,
          )),
        Switch(
          value: state,
          onChanged: (s) {
            setState(() {
              state = s;
              print(state);
            });
          })
      ],
    ),
  );
}

android 模拟器已经正确构建了小部件(Day Week 文本和 Swicth 并排),但是当我按下开关时,打印只返回“true”并且 Switch 不移动。这里有什么问题?在将值插入函数之前,我声明了值 bool = false。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    如果您想访问小部件中存在的变量,您应该创建一个回调函数并传递它。 例如

    setDayOpen("Tuesday",state,(s) {
                setState(() {
                  state = s;
                  print(state);
                });
              })
    
    
    Widget setDayOpen(String weekDay, bool state, Function callBack) {
    
    return Container(
      padding: EdgeInsets.only(right: 10, left: 10),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
          Text(weekDay,
              style: TextStyle(
                fontFamily: 'RobotoCondensed',
                fontSize: 20,
                fontWeight: FontWeight.bold,
              )),
          Switch(
              value: state,
              onChanged: (s)=>callBack(s))
        ],
      ),
    );
    }
    

    【讨论】:

      【解决方案2】:

      您必须像您一样使用setState() 方法更改state 变量的值,但您必须确保使用新的state 值重建小部件。

      按顺序,Switch 小部件在其值不变时不会更新

      【讨论】:

        猜你喜欢
        • 2021-12-10
        • 2020-06-23
        • 2018-07-28
        • 2021-08-06
        • 2018-11-01
        • 2020-08-18
        • 1970-01-01
        • 1970-01-01
        • 2020-10-20
        相关资源
        最近更新 更多