Обычно мы используем StreamProvider для работы с данными из FireStore в проекте Flutter следующим образом:
// I have a collection of Customer in my DataService
Stream<List<Client>> streamCustomers() {
return Firestore.instance.collection('customers').snapshots().map((list) =>
list.documents.map((doc) => Customer.fromMap(doc.data, doc.documentID)).toList());
}
Это поставщик потоковых данных:
Expanded(
child: StreamProvider<List<Customer>>.value(
value: _dataSvc.streamCustomers(),
child: CustomerListWidget(),
),
);
Здесь потребляемые данные потока:
final _customers = Provider.of<List<Customer>>(context);
return Container(
child: _customers == null? Text('Loading...') : _buildList(context, _customers),
);
Я покажу все данные клиентов в CustomerListWidget
. Потому что данные коллекции Customer
очень большие (больше 10 000 - 50 000 записей). По-видимому, это не эффективное решение. Обычно мне интересно, какие практические решения используются для решения этого сценария в проекте Flutter / Firestore?
PS : Разбивка на страницы определенно является одним из моих возможных вариантов. Но есть некоторые проблемы, потому что я применю к данным несколько фильтров. Например, мне приходится запрашивать Firestore каждый раз, когда изменяется критерий фильтра, что приводит к увеличению использования данных. И также кажется, что я могу использовать только getDocuments()
вместо snapshot
для получения данных Stream.