Флаттер ждать сигнала от пожарного магазина - PullRequest
0 голосов
/ 20 января 2020

У меня есть вопрос о Flutter и Firestore. Я хочу подождать, пока другое приложение не установит bool из Firestore "roomStart" в значение true, чтобы открыть представление. Если «roomStart» имеет значение false, ему следует подождать, пока оно не станет равным true, а затем снова запустить оператор if.

class QuizPage extends StatefulWidget {
  final Room room;
  QuizPage(this.questions, this.room);
  @override
  _QuizPageState createState() => _QuizPageState(room);
}

class _QuizPageState extends State<QuizPage> {

  final Room room;
  _QuizPageState(this.room);

  @override
  Widget build(BuildContext context) {
    if(room.roomStart) {
    return MaterialApp(
      home: Scaffold(
        //code
);
    } else {
      // code: wait for boolean is set on true
      );
    }
  }
}

введите описание изображения здесь

у меня была идея установить setState, но мне все еще не хватает правильного подхода, у кого-нибудь есть пример или подсказка?

Буду очень признателен.

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Вы можете использовать streambuilder и слушать снимок как

import 'package:flutter/material.dart';

class App extends StatelessWidget {
  @override
  Widget build(context) {
    return StreamBuilder(
      stream: Firestore.instance
          .collection('roomCollectionName')
          .document('roomId')
          .snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return Center(
            child: CircularProgressIndicator(
              valueColor: AlwaysStoppedAnimation<Color>(themeColor),
            ),
          );
        } else {
          if (snapshot.data['roomstart']) {
            //true
            return Container();
          } else {
            //false
            return Container();
          }
        }
      },
    );
  }
}
0 голосов
/ 21 января 2020

Используя Firebase SDK, вы можете получить Stream данных для вашей Document (комнаты), позвонив onSnapshot() с firebase_cloudstore. Stream всегда выводит последнее значение из базы данных. Вам не обязательно иметь StatefulWidget, вместо этого вы можете использовать StatelessWidget с StreamBuilder, и вы можете поместить if logi c в метод StreamBuilder s builder.

Обязательно проверьте, что snapshot hasData и покажите соответствующий виджет.

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