Flutter Airbnb Clone -
// listings/listingId
hostId, title, description, location (GeoPoint), address, pricePerNight, cleaningFee, guestsAllowed, amenities: [wifi, kitchen, pool], images: [url1, url2], bookedDates: [timestamp1, timestamp2], createdAt flutter airbnb clone
DateRangePickerController controller = DateRangePickerController(); // Fetch booked dates for this listing List<DateTime> bookedDates = await bookingRepo.getBookedDates(listingId); @override Widget build(BuildContext context) return SfDateRangePicker( controller: controller, selectionMode: DateRangePickerSelectionMode.range, onSelectionChanged: (args) /* update price & days */ , blackoutDates: bookedDates, monthCellStyle: DateRangePickerMonthCellStyle( blackoutDateDecoration: BoxDecoration(color: Colors.grey[200]), ), ); // listings/listingId hostId
// reviews/reviewId
name, email, avatar, bio, isHost, joinedAt bookedDates = await bookingRepo.getBookedDates(listingId)
// bookings/bookingId 'cancelled', stripePaymentIntentId, createdAt
Using syncfusion_flutter_datepicker to disable already booked dates (fetch from Firestore).