我有一个异步函数,当它获得蓝牙信号时会更新全局布尔变量。 每当更改布尔变量但我不知道如何时,我都想更新小部件。
bool payingAttention = false;
startListening() async {
//code that checks continously
if (thing) {
payingAttention = false;
}
if (otherThing) {
payingAttention = true;
}
}
//...
class PageTwo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
//this is the widget I need updated
child: payingAttention ? Icon(Icons.sentiment_very_satisfied, size: 200, color: Colors.white,) : Icon(Icons.sentiment_very_dissatisfied, size: 200, color: Colors.white,),
);
}
}
答案 0 :(得分:2)
信息在Flutter中自上而下流动。这意味着我们通常在建筑时将信息从父母传递给孩子。您要在子小部件中更新值的方法是在构造中传入新的。由于值取决于状态,因此这意味着您需要使用状态管理解决方案来实现此目的。
这意味着您需要更新状态,然后使用新值重新构建窗口小部件。最简单的方法是使用有状态的小部件并在setState调用中更改您的值。因此,您需要执行此操作。
将小部件更改为有状态。将光标放在无状态类上,如果安装了VC代码扩展,则按Ctrl + Shift + R。选择转换为有状态。
调用setState,以便您的小部件以新状态重建,并将新值传递给孩子。
startListening() async {
setState((){
//code that checks continously
if (thing) {
payingAttention = false;
}
if (otherThing) {
payingAttention = true;
}
});
}