【问题标题】:Flutter- show loading screen till firestore document changesFlutter - 显示加载屏幕,直到 Firestore 文档更改
【发布时间】:2020-06-13 17:05:00
【问题描述】:

我正在用 Flutter 构建一个拼车应用。到目前为止,我被困在如何在骑手和司机应用程序之间进行通信。 在骑手向 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;

  }

【问题讨论】:

标签: flutter google-cloud-firestore


【解决方案1】:

您应该使用.onSnapshot() 而不是.getDocument() 以实现此目的。

这两种方法的区别在于getDocument() 只会检索一次文档,而onSnapshot() 将继续监听 Firestore 上的任何事件。这些文档中对此进行了介绍:get realtime updatesget data once

希望你觉得这很有用。

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2016-12-01
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多