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

Posted

技术标签:

【中文标题】如何监听 FutureBuilder 小部件内的状态变化并反映状态变化?【英文标题】:How to listen for state changes inside a FutureBuilder widget and reflect the state change? 【发布时间】:2022-01-19 12:00:00 【问题描述】:

为了演示这个问题,让我为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 builder内部,如何获取isFirstText状态变量变化对应的正确返回值。

我也遇到了this stack overflow post,但无法让代码工作。 我还遇到了一个名为 StatefulBuilder 的小部件,但我不知道应该在我的 FutureBuilder 的哪个位置使用它。

有人可以帮忙吗?

【问题讨论】:

这能回答你的问题吗? Flutter StreamBuilder vs FutureBuilder @staticVoidMan 感谢您的回复。根据答案,流保持与服务器的持续连接并根据服务器的更改更新 UI 对吗?但我不想从服务器端监听变化。我想监听局部状态变量的变化。你知道怎么做吗?谢谢! 【参考方案1】:

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

你可以像这样自己构建一个流:

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

如果这有帮助,请告诉我。

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何监听 FutureBuilder 小部件内的状态变化并反映状态变化?的主要内容,如果未能解决你的问题,请参考以下文章

在 FutureBuilder 的情况下,我应该如何获得一组可滚动的小部件而不会溢出

Flutter FutureBuilder 小部件动态列表长度

Flutter 将 FutureBuilder 小部件放在一个 Column 中

使用 Futurebuilder 有条件地渲染小部件

FutureBuilder 错误:返回类型“对象?”不是闭包上下文所要求的“小部件”

如何在 FutureBuilder 中解析从本地主机接收的 JSON 对象