Я решил использовать 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);
}
)