Initial commit
This commit is contained in:
31
lib/providers/m3u_provider.dart
Normal file
31
lib/providers/m3u_provider.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import '../models/stream_entry.dart';
|
||||
import '../services/m3u_service.dart';
|
||||
|
||||
final m3uServiceProvider = Provider<M3UService>((ref) => M3UService());
|
||||
|
||||
final channelListProvider =
|
||||
StateNotifierProvider<ChannelListNotifier, AsyncValue<List<StreamEntry>>>(
|
||||
(ref) {
|
||||
final svc = ref.watch(m3uServiceProvider);
|
||||
return ChannelListNotifier(svc);
|
||||
});
|
||||
|
||||
final selectedChannelProvider = StateProvider<StreamEntry?>((ref) => null);
|
||||
|
||||
class ChannelListNotifier extends StateNotifier<AsyncValue<List<StreamEntry>>> {
|
||||
final M3UService _svc;
|
||||
ChannelListNotifier(this._svc) : super(const AsyncValue.data([]));
|
||||
|
||||
Future<void> fetch(String url, {bool force = false}) async {
|
||||
state = const AsyncValue.loading();
|
||||
try {
|
||||
final entries = await _svc.fetch(url, forceRefresh: force);
|
||||
state = AsyncValue.data(entries);
|
||||
} catch (e, st) {
|
||||
state = AsyncValue.error(e, st);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> refresh(String url) async => fetch(url, force: true);
|
||||
}
|
||||
Reference in New Issue
Block a user