Обновляется ли Stream в flutter streambuilder? - PullRequest
1 голос
/ 15 января 2020

Я решил использовать Streambuilder для получения данных из Firestore. Однако, когда я хочу выполнить запрос (где или orderBy), который имеет значение Dynami c (на основе значения, переданного текстовым полем), мой поток показывает только данные, которые были первоначально загружены. Позвольте мне думать, что поток Streambuilder не меняет / не обновляет свое значение, если не происходят изменения в бэкэнде данных. Это правильно? Если да, как я могу обновить значение моего потока в StreamBuilder, чтобы получить данные, основанные на моем запросе? Спасибо.

Я также читал, что вы устанавливаете свой поток вне StreamBuilder и должны быть помещены в initState или что-то в этом роде. Я не уверен в точном значении. Я попытался сделать это, но поток не передается потоку streambuilder через переменную, если вы поместите его в initState.

Пример кода:

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