52 lines
1.9 KiB
Dart
52 lines
1.9 KiB
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import '../auth/auth_providers.dart';
|
|
import 'group_ride_models.dart';
|
|
import 'group_ride_service.dart';
|
|
|
|
/// Provider for GroupRideService.
|
|
final groupRideServiceProvider = Provider<GroupRideService>((ref) {
|
|
return GroupRideService();
|
|
});
|
|
|
|
/// Stream of a specific Group Ride by ID.
|
|
final groupRideStreamProvider =
|
|
StreamProvider.family<GroupRide?, String>((ref, rideId) {
|
|
final service = ref.watch(groupRideServiceProvider);
|
|
return service.groupRideStream(rideId);
|
|
});
|
|
|
|
/// Stream of participants for a specific Group Ride.
|
|
final groupRideParticipantsProvider =
|
|
StreamProvider.family<List<GroupRideParticipant>, String>((ref, rideId) {
|
|
final service = ref.watch(groupRideServiceProvider);
|
|
return service.participantsStream(rideId);
|
|
});
|
|
|
|
/// Stream of upcoming Group Rides for the current user.
|
|
final upcomingGroupRidesProvider = StreamProvider<List<GroupRide>>((ref) {
|
|
final user = ref.watch(currentUserProvider);
|
|
if (user == null || user.isAnonymous) {
|
|
return Stream.value([]);
|
|
}
|
|
final service = ref.watch(groupRideServiceProvider);
|
|
return service.upcomingRidesStream(callerUid: user.uid);
|
|
});
|
|
|
|
/// Stream of live presence records for all participants in a specific Group Ride.
|
|
final groupRideLivePresenceProvider =
|
|
StreamProvider.family<List<LiveGroupPresence>, String>((ref, rideId) {
|
|
final service = ref.watch(groupRideServiceProvider);
|
|
return service.livePresenceStream(rideId);
|
|
});
|
|
|
|
/// Master privacy setting: whether group ride live location sharing is permitted by user.
|
|
/// Defaults to false (explicit opt-in required).
|
|
final groupRideLiveSharingAllowedProvider = StateProvider<bool>((ref) {
|
|
return false;
|
|
});
|
|
|
|
/// Active Group Ride ID currently being broadcasted to by the local rider, if any.
|
|
final activeLiveRideSharingIdProvider = StateProvider<String?>((ref) {
|
|
return null;
|
|
});
|