当使用以下Switch
小部件时,isOn
值始终返回true
并且永远不会更改。
Switch
也仅在滑动时移动位置,水龙头不会移动它。怎么解决?
bool isInstructionView = false;
Switch(
value: isInstructionView,
onChanged: (bool isOn) {
setState(() {
isInstructionView = isOn;
print(isInstructionView);
});
},
activeColor: Colors.blue,
inactiveTrackColor: Colors.grey,
inactiveThumbColor: Colors.grey,
)
更新:为了更加清晰,onChanged
总是将isOn
作为true
返回。为什么会这样?
我根据@Zulfiqar的回答添加了额外的代码块。我没有测试这段代码,但我在我的项目中使用了类似的代码。如果要保存并在另一个类中使用,或者如果要在每次加载时显示最新状态,可以将状态保存在全局变量中,并在加载类时调用它。希望它会有所帮助..
class Tab_b extends StatefulWidget {
@override
State<StatefulWidget> createState() => new _TabsPageState();
}
class _TabsPageState extends State<Tab_b>{
bool isInstructionView;
@override
void initState() {
isInstructionView = Global.shared.isInstructionView;
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(
title: new Text("add data"),
),
body: new Container(
child: Switch(
value: isInstructionView,
onChanged: (bool isOn) {
print(isOn);
setState(() {
isInstructionView = isOn;
Global.shared.isInstructionView = isOn;
isOn =!isOn;
print(isInstructionView);
});
},
activeColor: Colors.blue,
inactiveTrackColor: Colors.grey,
inactiveThumbColor: Colors.grey,
),
),
);
}
}
class Global{
static final shared =Global();
bool isInstructionView = false;
}
class Tab_b extends StatefulWidget {
bool isInstructionView = false;
@override
State<StatefulWidget> createState() => new _TabsPageState();
}
class _TabsPageState extends State<Tab_b>{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(
title: new Text("add data"),
),
body: new Container(
child: Switch(
value: widget.isInstructionView,
onChanged: (bool isOn) {
print(isOn);
setState(() {
widget.isInstructionView = isOn;
print(widget.isInstructionView);
});
},
activeColor: Colors.blue,
inactiveTrackColor: Colors.grey,
inactiveThumbColor: Colors.grey,
),
),
);
}
您需要在状态更改时重建窗口小部件。参考文档https://docs.flutter.io/flutter/material/Switch/onChanged.html