Flutter - показывать экран загрузки до изменения документа пожарного депо - PullRequest
0 голосов
/ 01 марта 2020

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

if (event is PaymentMadeEvent) {
      yield TaxiBookingLoadingState(
          state:
              PaymentNotInitializedState(booking: null, methodsAvaiable: null));
      TaxiBooking booking = await TaxiBookingStorage.addDetails(TaxiBooking.named(paymentMethod: event.paymentMethod));
      String docID = await TaxiBookingController.submitRequest(
        booking.source.areaDetails,
        booking.destination.areaDetails,
        [booking.source.position.latitude,booking.source.position.longitude],
        [booking.destination.position.latitude,booking.destination.position.longitude],
        booking.estimatedPrice,
        booking.estimatedDuration,
        booking.estimatedDistance
      );

      booking =  await TaxiBookingStorage.addDetails(TaxiBooking.named(dbID: docID));
      await TaxiBookingController.generateToken();
      TaxiDriver taxiDriver = await TaxiBookingController.getTaxiDriver(booking);

      // Timer.periodic(Duration(seconds: 5), (Timer t) async* {

      // } ); 

       taxiDriver = await TaxiBookingController.getTaxiDriver(booking);  
         yield TaxiNotConfirmedState(booking: booking, driver: taxiDriver);


    }
static Future<TaxiDriver> getTaxiDriver(TaxiBooking booking) async {
    TaxiDriver taxis2;
     var driver = await Firestore.instance.collection("rider_pickup_pairing")
    //  .where(DocumentReference,isEqualTo: booking.dbID)
     .where("driver_id",isEqualTo: 'jk')
        .getDocuments()
        .then((QuerySnapshot snapshot) {

      if (snapshot.documents == []) {

        taxis2 =  null;
      } else {
      snapshot.documents.forEach((f)  => 

      taxis2 = TaxiDriver.named(
        driverPic:
            "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/profilepic.jpg",
        driverName: "John Doe",
        driverRating: 4.5,
        taxiDetails: "Toyota Corolla(ABJ823KU)")
        );
        TaxiBookingStorage.addDetails(TaxiBooking.named(driver: taxis2.driverName));
      }
      return taxis2;
      });

      return driver;

  }

1 Ответ

0 голосов
/ 04 марта 2020

Вы должны использовать .onSnapshot() вместо .getDocument() для достижения этой цели.

Разница между этими двумя методами заключается в том, что getDocument() будет извлекать документ только один раз, тогда как onSnapshot() будет продолжать прослушивать любое событие в Firestore. Это описано в следующих документах: получать обновления в реальном времени и получать данные один раз .

Надеюсь, вы найдете это полезным.

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