我有这个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。
答案 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))
],
),
);
}