64 lines
2.2 KiB
Dart
64 lines
2.2 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:info_tren/api/station_data.dart';
|
|
import 'package:info_tren/models.dart';
|
|
import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart';
|
|
import 'package:info_tren/pages/train_info_page/view_train/train_info.dart';
|
|
import 'package:info_tren/utils/default_ui_design.dart';
|
|
import 'package:info_tren/utils/iterable_extensions.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
final sharedPreferencesProvider = Provider<SharedPreferences>(
|
|
(_) => throw UnimplementedError('Please override in ProviderScope'),
|
|
);
|
|
|
|
class UiDesignNotifier extends StateNotifier<UiDesign> {
|
|
final SharedPreferences sharedPreferences;
|
|
|
|
UiDesignNotifier({required this.sharedPreferences,}) : super(UiDesign.MATERIAL) {
|
|
final stored = sharedPreferences.getString('uiDesign');
|
|
final design = UiDesign.values.where((element) => element.name == stored).firstOrNull ?? defaultUiDesign;
|
|
state = design;
|
|
}
|
|
|
|
void set(UiDesign? design) async {
|
|
if (design != null) {
|
|
await sharedPreferences.setString('uiDesign', design.name);
|
|
}
|
|
else {
|
|
await sharedPreferences.remove('uiDesign');
|
|
}
|
|
state = design ?? defaultUiDesign;
|
|
}
|
|
}
|
|
final uiDesignProvider = StateNotifierProvider<UiDesignNotifier, UiDesign>(
|
|
(ref) => UiDesignNotifier(
|
|
sharedPreferences: ref.watch(sharedPreferencesProvider),
|
|
),
|
|
);
|
|
|
|
final trainInfoArgumentsProvider = Provider<TrainInfoArguments>(
|
|
(_) => throw UnimplementedError('Please override in ProviderScope'),
|
|
);
|
|
|
|
final stationDataProvider = FutureProvider.family((ref, String stationName) async {
|
|
final data = await getStationData(stationName);
|
|
|
|
final timer = Timer(const Duration(minutes: 2), () {
|
|
ref.invalidateSelf();
|
|
});
|
|
ref.onDispose(() {
|
|
timer.cancel();
|
|
});
|
|
|
|
return data;
|
|
});
|
|
final viewStationArgumentsProvider = Provider<ViewStationArguments>(
|
|
(_) => throw UnimplementedError('Please override in ProviderScope'),
|
|
);
|
|
final viewStationDataProvider = Provider((ref) {
|
|
final args = ref.watch(viewStationArgumentsProvider);
|
|
final data = ref.watch(stationDataProvider(args.stationName));
|
|
return data;
|
|
}, dependencies: [viewStationArgumentsProvider, stationDataProvider]);
|