首页 > 解决方案 > Flutter StreamBuilder 中的 Stream 是否会自行更新?

问题描述

我决定使用 Streambuilder 从 Firestore 获取数据。但是,当我想做一个动态的查询(where 或 orderBy)(基于文本字段发出的值)时,我的流只显示最初下载的数据。让我认为 Streambuilder 流不会更改/更新它的值,除非数据后端发生更改。这个对吗?如果是,我如何更新 StreamBuilder 中流的值以根据我的查询提取数据?谢谢。

我还读到您将流设置在 StreamBuilder 之外,应该放在 initState 或其他东西中。我不确定确切的含义。我尝试这样做,但是如果将流放在 initState 中,则不会通过变量将流传递给 streambuilder 流。

示例代码:

var query;
var queryController;

...

//TextField
return Column(
  children: [ 
    TextField(
      controller = queryController,  
    ),
    RaisedButton(
      onPressed() {
        setState(() {
          query = queryController.text;
        });
      }  
    )
]);

.... 

//StreamBuilder with firestore steam snapshot
child: StreamBuilder<QuerySnapshot>(
  stream: firestore.instance.collection('products').where('search_field', isEqualTo: query).orderBy('timestamp', descending: false).snapshots();
  builder (context, snapshot) {

    ... //if has data, show data the widget 
    return MyWidget(snapshot.data);
  }
)

标签: fluttergoogle-cloud-firestorestream-builder

解决方案


推荐阅读