#firebase #flutter #dart #google-cloud-firestore
#firebase #флаттер #dart #google-облако-firestore
Вопрос:
Я хочу проверить, существует ли коллекция с этим именем пользователя и типом учетной записи, это означает, что я хочу узнать, является ли пользователь премиум.
Вывод при запуске приложения: ok user ok model
Почему он печатает «ok» дважды, и похоже, что снимок имеет и не имеет никаких данных?
Вот часть кода, если она ничего не говорит, я предоставлю полный класс:
@override
Widget build(BuildContext context) {
return Scaffold(
body: isLoading
? Container(
child: Center(child: CircularProgressIndicator()),
)
: StreamBuilder(
stream: Firestore.instance
.collection('users')
.where('email', isEqualTo: email)
.where('account', isEqualTo: 'model')
.snapshots(),
builder: (context, snapshot) {
print('ok');
if (!snapshot.hasData) {
box.put('account', 'user');
print(box.get('account'));
} else {
box.put('account', 'model');
print(box.get('account'));
}
return Container(...
Заранее благодарю вас и, может быть, есть самый простой способ узнать, существует ли коллекция с такими данными?
Комментарии:
1.
isLoading
возможно, было слишком много раз, что приводило к многократному запуску функции
Ответ №1:
Насколько я вижу, это работает так, как задумано. Когда ваш виджет впервые отображается, он начинает загружать данные stream
из Firestore. В этот момент snapshot.hasData
все еще false
, поэтому он отображает ваш виджет с if
блоком.
Затем, когда данные становятся доступными, поток обновляется, и это вызывает повторное отображение виджета. На данный момент snapshot.hasData
есть true
, поэтому он отображает ваш виджет с else
помощью блока.