import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:worldhopper/models/feed.dart'; import 'package:worldhopper/repositories/feed_repository.dart'; /// Provider for FeedRepository instance final feedRepositoryProvider = Provider((ref) { return FeedRepository(); }); /// Provider for fetching a feed from a server final feedProvider = FutureProvider.family( (ref, request) async { final repository = ref.watch(feedRepositoryProvider); return await repository.fetchFeed( request.serverId, request.url, forceRefresh: request.forceRefresh, ); }, ); /// Provider for fetching the root feed of a server final rootFeedProvider = FutureProvider.family( (ref, request) async { final repository = ref.watch(feedRepositoryProvider); return await repository.fetchRootFeed( request.serverId, forceRefresh: request.forceRefresh, ); }, ); /// Request object for fetching feeds class FeedRequest { final String serverId; final String url; final bool forceRefresh; const FeedRequest({ required this.serverId, required this.url, this.forceRefresh = false, }); @override bool operator ==(Object other) => identical(this, other) || other is FeedRequest && runtimeType == other.runtimeType && serverId == other.serverId && url == other.url && forceRefresh == other.forceRefresh; @override int get hashCode => serverId.hashCode ^ url.hashCode ^ forceRefresh.hashCode; } /// Request object for fetching root feeds class RootFeedRequest { final String serverId; final bool forceRefresh; const RootFeedRequest({ required this.serverId, this.forceRefresh = false, }); @override bool operator ==(Object other) => identical(this, other) || other is RootFeedRequest && runtimeType == other.runtimeType && serverId == other.serverId && forceRefresh == other.forceRefresh; @override int get hashCode => serverId.hashCode ^ forceRefresh.hashCode; }