mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2025-09-18 20:46:40 +00:00
sort profiles alphabetically
This commit is contained in:
parent
2fcda9bf24
commit
88702942d3
1 changed files with 27 additions and 31 deletions
|
@ -34,14 +34,10 @@ class EquipmentProfilesProvider extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
||||||
final TogglableMap<EquipmentProfile> _customProfiles = {};
|
final TogglableMap<IEquipmentProfile> _profiles = {};
|
||||||
final TogglableMap<PinholeEquipmentProfile> _pinholeCustomProfiles = {};
|
|
||||||
String _selectedId = '';
|
String _selectedId = '';
|
||||||
|
|
||||||
IEquipmentProfile get _selectedProfile =>
|
IEquipmentProfile get _selectedProfile => _profiles[_selectedId]?.value ?? EquipmentProfilesProvider.defaultProfile;
|
||||||
_customProfiles[_selectedId]?.value ??
|
|
||||||
_pinholeCustomProfiles[_selectedId]?.value ??
|
|
||||||
EquipmentProfilesProvider.defaultProfile;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
@ -52,8 +48,7 @@ class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return EquipmentProfiles(
|
return EquipmentProfiles(
|
||||||
profiles: context.isPro ? _customProfiles : {},
|
profiles: context.isPro ? _profiles : {},
|
||||||
pinholeProfiles: context.isPro ? _pinholeCustomProfiles : {},
|
|
||||||
selected: context.isPro ? _selectedProfile : EquipmentProfilesProvider.defaultProfile,
|
selected: context.isPro ? _selectedProfile : EquipmentProfilesProvider.defaultProfile,
|
||||||
child: widget.child,
|
child: widget.child,
|
||||||
);
|
);
|
||||||
|
@ -61,8 +56,10 @@ class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
||||||
|
|
||||||
Future<void> _init() async {
|
Future<void> _init() async {
|
||||||
_selectedId = widget.storageService.selectedEquipmentProfileId;
|
_selectedId = widget.storageService.selectedEquipmentProfileId;
|
||||||
_customProfiles.addAll(await widget.storageService.getEquipmentProfiles());
|
_profiles
|
||||||
_pinholeCustomProfiles.addAll(await widget.storageService.getPinholeEquipmentProfiles());
|
..addAll(await widget.storageService.getEquipmentProfiles())
|
||||||
|
..addAll(await widget.storageService.getPinholeEquipmentProfiles());
|
||||||
|
_sortProfiles();
|
||||||
_discardSelectedIfNotIncluded();
|
_discardSelectedIfNotIncluded();
|
||||||
if (mounted) setState(() {});
|
if (mounted) setState(() {});
|
||||||
widget.onInitialized?.call();
|
widget.onInitialized?.call();
|
||||||
|
@ -72,18 +69,18 @@ class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
||||||
switch (profile) {
|
switch (profile) {
|
||||||
case final PinholeEquipmentProfile profile:
|
case final PinholeEquipmentProfile profile:
|
||||||
await widget.storageService.addPinholeEquipmentProfile(profile);
|
await widget.storageService.addPinholeEquipmentProfile(profile);
|
||||||
_pinholeCustomProfiles[profile.id] = (value: profile, isUsed: true);
|
|
||||||
case final EquipmentProfile profile:
|
case final EquipmentProfile profile:
|
||||||
await widget.storageService.addEquipmentProfile(profile);
|
await widget.storageService.addEquipmentProfile(profile);
|
||||||
_customProfiles[profile.id] = (value: profile, isUsed: true);
|
|
||||||
}
|
}
|
||||||
|
_profiles[profile.id] = (value: profile, isUsed: true);
|
||||||
|
_sortProfiles();
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updateProfile(IEquipmentProfile profile) async {
|
Future<void> updateProfile(IEquipmentProfile profile) async {
|
||||||
switch (profile) {
|
switch (profile) {
|
||||||
case final PinholeEquipmentProfile profile:
|
case final PinholeEquipmentProfile profile:
|
||||||
final oldProfile = _pinholeCustomProfiles[profile.id]!.value;
|
final oldProfile = _profiles[profile.id]!.value as PinholeEquipmentProfile;
|
||||||
await widget.storageService.updatePinholeEquipmentProfile(
|
await widget.storageService.updatePinholeEquipmentProfile(
|
||||||
id: profile.id,
|
id: profile.id,
|
||||||
name: profile.name,
|
name: profile.name,
|
||||||
|
@ -93,9 +90,8 @@ class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
||||||
lensZoom: oldProfile.lensZoom.changedOrNull(profile.lensZoom),
|
lensZoom: oldProfile.lensZoom.changedOrNull(profile.lensZoom),
|
||||||
exposureOffset: oldProfile.exposureOffset.changedOrNull(profile.exposureOffset),
|
exposureOffset: oldProfile.exposureOffset.changedOrNull(profile.exposureOffset),
|
||||||
);
|
);
|
||||||
_pinholeCustomProfiles[profile.id] = (value: profile, isUsed: _pinholeCustomProfiles[profile.id]!.isUsed);
|
|
||||||
case final EquipmentProfile profile:
|
case final EquipmentProfile profile:
|
||||||
final oldProfile = _customProfiles[profile.id]!.value;
|
final oldProfile = _profiles[profile.id]!.value as EquipmentProfile;
|
||||||
await widget.storageService.updateEquipmentProfile(
|
await widget.storageService.updateEquipmentProfile(
|
||||||
id: profile.id,
|
id: profile.id,
|
||||||
name: oldProfile.name.changedOrNull(profile.name),
|
name: oldProfile.name.changedOrNull(profile.name),
|
||||||
|
@ -106,8 +102,10 @@ class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
||||||
lensZoom: oldProfile.lensZoom.changedOrNull(profile.lensZoom),
|
lensZoom: oldProfile.lensZoom.changedOrNull(profile.lensZoom),
|
||||||
exposureOffset: oldProfile.exposureOffset.changedOrNull(profile.exposureOffset),
|
exposureOffset: oldProfile.exposureOffset.changedOrNull(profile.exposureOffset),
|
||||||
);
|
);
|
||||||
_customProfiles[profile.id] = (value: profile, isUsed: _customProfiles[profile.id]!.isUsed);
|
|
||||||
}
|
}
|
||||||
|
final bool shouldSort = _profiles[profile.id]!.value.name != profile.name;
|
||||||
|
_profiles[profile.id] = (value: profile, isUsed: _profiles[profile.id]!.isUsed);
|
||||||
|
if (shouldSort) _sortProfiles();
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,11 +117,10 @@ class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
||||||
switch (profile) {
|
switch (profile) {
|
||||||
case final PinholeEquipmentProfile profile:
|
case final PinholeEquipmentProfile profile:
|
||||||
await widget.storageService.deletePinholeEquipmentProfile(profile.id);
|
await widget.storageService.deletePinholeEquipmentProfile(profile.id);
|
||||||
_pinholeCustomProfiles.remove(profile.id);
|
|
||||||
case final EquipmentProfile profile:
|
case final EquipmentProfile profile:
|
||||||
await widget.storageService.deleteEquipmentProfile(profile.id);
|
await widget.storageService.deleteEquipmentProfile(profile.id);
|
||||||
_customProfiles.remove(profile.id);
|
|
||||||
}
|
}
|
||||||
|
_profiles.remove(profile.id);
|
||||||
_discardSelectedIfNotIncluded();
|
_discardSelectedIfNotIncluded();
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
@ -138,12 +135,9 @@ class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> toggleProfile(String id, bool enabled) async {
|
Future<void> toggleProfile(String id, bool enabled) async {
|
||||||
if (_customProfiles.containsKey(id)) {
|
if (_profiles.containsKey(id)) {
|
||||||
_customProfiles[id] = (value: _customProfiles[id]!.value, isUsed: enabled);
|
_profiles[id] = (value: _profiles[id]!.value, isUsed: enabled);
|
||||||
await widget.storageService.updateEquipmentProfile(id: id, isUsed: enabled);
|
await widget.storageService.updateEquipmentProfile(id: id, isUsed: enabled);
|
||||||
} else if (_pinholeCustomProfiles.containsKey(id)) {
|
|
||||||
_pinholeCustomProfiles[id] = (value: _pinholeCustomProfiles[id]!.value, isUsed: enabled);
|
|
||||||
await widget.storageService.updatePinholeEquipmentProfile(id: id, isUsed: enabled);
|
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -155,12 +149,19 @@ class EquipmentProfilesProviderState extends State<EquipmentProfilesProvider> {
|
||||||
if (_selectedId == EquipmentProfilesProvider.defaultProfile.id) {
|
if (_selectedId == EquipmentProfilesProvider.defaultProfile.id) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final isSelectedUsed = _customProfiles[_selectedId]?.isUsed ?? _pinholeCustomProfiles[_selectedId]?.isUsed ?? false;
|
final isSelectedUsed = _profiles[_selectedId]?.isUsed ?? false;
|
||||||
if (!isSelectedUsed) {
|
if (!isSelectedUsed) {
|
||||||
_selectedId = EquipmentProfilesProvider.defaultProfile.id;
|
_selectedId = EquipmentProfilesProvider.defaultProfile.id;
|
||||||
widget.storageService.selectedEquipmentProfileId = _selectedId;
|
widget.storageService.selectedEquipmentProfileId = _selectedId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _sortProfiles() {
|
||||||
|
final sortedByName = _profiles.values.toList(growable: false)
|
||||||
|
..sort((a, b) => a.value.name.toLowerCase().compareTo(b.value.name.toLowerCase()));
|
||||||
|
_profiles.clear();
|
||||||
|
_profiles.addEntries(sortedByName.map((e) => MapEntry(e.value.id, e)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum _EquipmentProfilesModelAspect {
|
enum _EquipmentProfilesModelAspect {
|
||||||
|
@ -170,13 +171,11 @@ enum _EquipmentProfilesModelAspect {
|
||||||
}
|
}
|
||||||
|
|
||||||
class EquipmentProfiles extends InheritedModel<_EquipmentProfilesModelAspect> {
|
class EquipmentProfiles extends InheritedModel<_EquipmentProfilesModelAspect> {
|
||||||
final TogglableMap<EquipmentProfile> profiles;
|
final TogglableMap<IEquipmentProfile> profiles;
|
||||||
final TogglableMap<PinholeEquipmentProfile> pinholeProfiles;
|
|
||||||
final IEquipmentProfile selected;
|
final IEquipmentProfile selected;
|
||||||
|
|
||||||
const EquipmentProfiles({
|
const EquipmentProfiles({
|
||||||
required this.profiles,
|
required this.profiles,
|
||||||
required this.pinholeProfiles,
|
|
||||||
required this.selected,
|
required this.selected,
|
||||||
required super.child,
|
required super.child,
|
||||||
});
|
});
|
||||||
|
@ -189,7 +188,6 @@ class EquipmentProfiles extends InheritedModel<_EquipmentProfilesModelAspect> {
|
||||||
[
|
[
|
||||||
EquipmentProfilesProvider.defaultProfile,
|
EquipmentProfilesProvider.defaultProfile,
|
||||||
...model.profiles.values.map((p) => p.value),
|
...model.profiles.values.map((p) => p.value),
|
||||||
...model.pinholeProfiles.values.map((p) => p.value),
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -201,7 +199,6 @@ class EquipmentProfiles extends InheritedModel<_EquipmentProfilesModelAspect> {
|
||||||
[
|
[
|
||||||
EquipmentProfilesProvider.defaultProfile,
|
EquipmentProfilesProvider.defaultProfile,
|
||||||
...model.profiles.values.where((p) => p.isUsed).map((p) => p.value),
|
...model.profiles.values.where((p) => p.isUsed).map((p) => p.value),
|
||||||
...model.pinholeProfiles.values.where((p) => p.isUsed).map((p) => p.value),
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -219,8 +216,7 @@ class EquipmentProfiles extends InheritedModel<_EquipmentProfilesModelAspect> {
|
||||||
return (dependencies.contains(_EquipmentProfilesModelAspect.selected) && oldWidget.selected != selected) ||
|
return (dependencies.contains(_EquipmentProfilesModelAspect.selected) && oldWidget.selected != selected) ||
|
||||||
((dependencies.contains(_EquipmentProfilesModelAspect.profiles) ||
|
((dependencies.contains(_EquipmentProfilesModelAspect.profiles) ||
|
||||||
dependencies.contains(_EquipmentProfilesModelAspect.profilesInUse)) &&
|
dependencies.contains(_EquipmentProfilesModelAspect.profilesInUse)) &&
|
||||||
(const DeepCollectionEquality().equals(oldWidget.profiles, profiles) ||
|
const DeepCollectionEquality().equals(oldWidget.profiles, profiles));
|
||||||
const DeepCollectionEquality().equals(oldWidget.pinholeProfiles, pinholeProfiles)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue