Работайте с огромным объемом данных в Firestore в проекте flutter - PullRequest
0 голосов
/ 07 мая 2020

Обычно мы используем 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.

1 Ответ

1 голос
/ 07 мая 2020

Думаю, вам больше подходит разбивка на страницы. Внедрение разбивки на страницы во Flutter с использованием базы данных Firebase Cloud Firestore может улучшить производительность вашего приложения и снизить использование полосы пропускания (что является одной из ваших самых больших проблем). Есть несколько статей про это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...