如何监听 FutureBuilder 小部件内的状态变化并反映状态变化?

How to listen for state changes inside a FutureBuilder widget and reflect the state change?

为了演示问题,让我写下一些代码 FutureBuilder

FutureBuilder(future: _myFuture, builder: (context, snapshot) {
    if(snapshot.hasData) {

        // !!!! IMPORTANT !!!
        // Pay attention to the _isFirstText variable below  

        return SizedBox(
                 child: _isFirstText ? Text(snapshot.data.firstText) : Text(snapshot.data.secondText),
               );  
    }
 
    if(snapshot.connectionState == ConnectionState.isWaiting) {
        return Text('Waiting!');
    }
 
    return Text('Error');
}),  

正如我在上面代码的注释中提到的,注意_isFirstText变量。假设这是一个状态变量。 在 future 构建器中,如何获得与 isFirstText 状态变量变化对应的正确 return 值。

我也遇到了 this stack overflow post 但无法使代码正常工作。
我还遇到了一个名为 StatefulBuilder 的小部件,但我不知道我应该在 FutureBuilder 中的什么地方使用它。

有人可以帮忙吗?

如果您想收听正在进行的更改,可以使用 Streambuilder。流不仅可以用于服务器端更改,还可以在本地使用。

您可以像这样自己构建 Stream :

StreamController myStreamController = StreamController<int>();

要通过此控制器发送新事件,您可以这样做

myStreamController.sink.add(newValue);

然后您可以像这样收听变化:

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
        stream: myStreamController.stream,
        builder: (context, snapshot) {
          final value = snapshot.data;

          return Text(value!.toString());
  }

如果您想了解更多信息,请查看此视频:https://youtu.be/nQBpOIHE4eE

如果有帮助请告诉我。

您可以使用 ValueNotifier 变量并使用 notifyListeners() 来更新代码的特定部分,如下所示:

ValueListenableBuilder 并使用该 ValueNotifier 变量并收听它。