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