You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.2 KiB
64 lines
2.2 KiB
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]);
|
|
|