Flutter-在小部件功能内切换不会更新

时间:2020-11-06 23:01:54

标签: flutter dart

我有这个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”,并且开关不动。怎么了在将其插入函数之前,我声明了值bool = false。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果要访问小部件内部存在的变量,则应创建一个回调函数并将其传递。 例如

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