Когда я должен использовать потоки против простого доступа к облачному пожарному хранилищу один раз во флаттере? - PullRequest
1 голос
/ 14 июня 2019

Я хочу создать функциональность групп для своего приложения, поэтому когда я настраивал страницу профиля каждого пользователя, я использовал что-то вроде этого:

DocumentReference documentReference =
               _firestore.collection("users").document("$email");
               await documentReference.get().then((DocumentSnapshot datasnapshot) {
                 if (datasnapshot.exists) {
                   displayName=datasnapshot.data['displayName'].toString();
                   bio=datasnapshot.data['bio'].toString();
                   print(bio);
                 }
                 else {
                   print("No such user");
                 }

Это работает, но я думаю, что еслия хочу создать группы и записать изменения, которые могут вносить разные пользователи, тогда мне, вероятно, следует использовать поток, это правильно?Вообще я не уверен, когда использовать, который, если кто-нибудь мог бы предоставить некоторое понимание?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Техническое отличие состоит в том, что get получает документ только один раз, тогда как поток сразу же получает текущие данные, а затем продолжает прослушивать изменения.

Обычно я использую поток (или его базовый onSnapshot()), когда отображаю данные прямо в пользовательском интерфейсе, потому что это означает, что пользовательский интерфейс обновляется при каждом изменении данных. Это одна из действительно крутых функций Firebase, потому что она делает ваш интерфейс реагирующим на изменения данных. Я использую get() для вещей, которые мне нужны только один раз, таких как данные конфигурации (хотя это также очень здорово, если вы используете поток для этого), соединения на стороне клиента и т. Д.

0 голосов
/ 15 июня 2019

Все сводится к тому, хотите ли вы, чтобы данные перезагружались каждый раз, когда что-то меняется в вашей базе данных.

  • Если вы хотите, чтобы они обновлялись по мере изменения в вашей базе данных, использовать Stream (скорее всего с StreamBuilder)

  • Если вы хотите, чтобы он обновлялся только при перезагрузке экрана, используйте get (), как выв вашем примере

...