从外部函数更新小部件

时间:2019-07-09 11:57:22

标签: flutter dart

我有一个异步函数,当它获得蓝牙信号时会更新全局布尔变量。 每当更改布尔变量但我不知道如何时,我都想更新小部件。

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

1 个答案:

答案 0 :(得分:2)

信息在Flutter中自上而下流动。这意味着我们通常在建筑时将信息从父母传递给孩子。您要在子小部件中更新值的方法是在构造中传入新的。由于值取决于状态,因此这意味着您需要使用状态管理解决方案来实现此目的。

这意味着您需要更新状态,然后使用新值重新构建窗口小部件。最简单的方法是使用有状态的小部件并在setState调用中更改您的值。因此,您需要执行此操作。

  1. 将小部件更改为有状态。将光标放在无状态类上,如果安装了VC代码扩展,则按Ctrl + Shift + R。选择转换为有状态。

  2. 调用setState,以便您的小部件以新状态重建,并将新值传递给孩子。

startListening() async {
   setState((){
     //code that checks continously
     if (thing) {
      payingAttention = false;
     }
     if (otherThing) {
      payingAttention = true;
     }
   });
}