mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-10-19 23:00:39 +00:00
5adcee00dd
* Added `ServiceProviders` widget * Added `EnumProviders` widget for enum values * Moved `ThemeProvider` functionality to `EnumProviders` * Style * `EnumProviders` -> `UserPreferencesProvider` * `ServiceProviders` -> `ServiceProvider` * Moved `MeteringScreenLayoutProvider` functionality to `UserPreferencesProvider` * typo * Removed `InheritedModelAspectListener` * TODO * Removed Inherited Generics * Removed redundant `LightmeterProviders` * Removed redundant methods from `ServicesProvider` * `_inheritFrom` -> `_inheritFromEnumsModel` * Fixed `MeteringScreenLayoutConfig` updates * Separated `_ThemeModel` * typo * `_EnumsModel` -> `_UserPreferencesModel`
52 lines
1.7 KiB
Dart
52 lines
1.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:lightmeter/data/models/metering_screen_layout_config.dart';
|
|
import 'package:lightmeter/providers/user_preferences_provider.dart';
|
|
|
|
/// Listening to multiple dependencies at the same time causes firing an event for all dependencies
|
|
/// even though some of them didn't change:
|
|
/// ```dart
|
|
/// @override
|
|
/// void didChangeDependencies() {
|
|
/// super.didChangeDependencies();
|
|
/// _bloc.add(EquipmentProfileChangedEvent(EquipmentProfile.of(context)));
|
|
/// if (!MeteringScreenLayout.featureStatusOf(context, MeteringScreenLayoutFeature.filmPicker)) {
|
|
/// _bloc.add(const FilmChangedEvent(Film.other()));
|
|
/// }
|
|
/// }
|
|
/// ```
|
|
/// To overcome this issue I've decided to create a generic listener,
|
|
/// that will listen to each dependency separately.
|
|
class MeteringScreenLayoutFeatureListener extends StatefulWidget {
|
|
final MeteringScreenLayoutFeature feature;
|
|
final ValueChanged<bool> onDidChangeDependencies;
|
|
final Widget child;
|
|
|
|
const MeteringScreenLayoutFeatureListener({
|
|
required this.feature,
|
|
required this.onDidChangeDependencies,
|
|
required this.child,
|
|
super.key,
|
|
});
|
|
|
|
@override
|
|
State<MeteringScreenLayoutFeatureListener> createState() =>
|
|
_MeteringScreenLayoutFeatureListenerState();
|
|
}
|
|
|
|
class _MeteringScreenLayoutFeatureListenerState extends State<MeteringScreenLayoutFeatureListener> {
|
|
@override
|
|
void didChangeDependencies() {
|
|
super.didChangeDependencies();
|
|
widget.onDidChangeDependencies(
|
|
UserPreferencesProvider.meteringScreenFeatureOf(
|
|
context,
|
|
widget.feature,
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return widget.child;
|
|
}
|
|
}
|