1

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

0 に答える 0