【发布时间】: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;
}
【问题讨论】:
-
听起来可行,司机应用writes to the database,而骑手应用queries for a specific value。这些链接应该足以让您入门。如果您遇到困难,请使用minimal, complete/standalone code that reproduces the problem 回复。
-
我已经用重现问题的代码编辑了帖子。到目前为止,当触发事件“PaymentMadeEvent”时,如果 firestore 查询为 true,则它运行良好,但如果在加载屏幕处停止并且即使在 firestore 更新以将查询返回为 true 后仍停留在那里,则它运行良好。
-
您使用的是
.getDocuments(),它只加载文档一次。要继续关注您的具体价值,您需要listen for realtime updates。
标签: flutter google-cloud-firestore