mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-11-22 23:40:41 +00:00
6bf059ed4d
* added Equipment section placeholder
* get iso & nd values from equipment profile
* use photography values from remote repo
* removed equipment section
* wip
* moved `EquipmentProfileProvider` from iap repo
* wip
* moved equipment profiles screen from iap
* improved equipment profiles screen
* mock add/delete
* collapse on expand
* add profile with name
* show selected values count (wip)
* fixed profile update
* cleanup
* Update pubspec.yaml
* made `AnimatedDialogPicker` more generic
* switched to local `Dimens`
* fixed `MeteringTopBarShape`
* rename
* animated `EquipmentProfileContainer`
* added default equipment profile
* change equipment profile name via dialog
* fixed profile selection
* filter equipment profile update/delete
* removed `enabled` param from settings section
* non-null `EquipmentProfile`
* fixed duplicate GlobalKeys
* animated equipment list
* Update ci.yml
* fixed shutter speed anchor issue
* autofocus
* added firebase to project
* save/restore equipment profiles
* unified `SliverList`
* added SSH key to iap repo
* Update ci.yml
* ci recursive submodules
* try full url
* Revert "try full url"
This reverts commit a9b692b60e
.
* restore firebase_options.dart
* changed runner to macos
* restore options earlier
* removed problematic file from analysis :)
* removed launch_app
* textoverflow
* implemented `DialogRangePicker`
* add iap repo to cd
* typo
* added workflow_dispatch to crowdin push
* removed `equipmentProfileValuesCount` from intl
* fr & ru translations
* style
* removed iap
138 lines
3.9 KiB
Dart
138 lines
3.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:lightmeter/data/shared_prefs_service.dart';
|
|
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:uuid/uuid.dart';
|
|
|
|
class EquipmentProfileProvider extends StatefulWidget {
|
|
final Widget child;
|
|
|
|
const EquipmentProfileProvider({required this.child, super.key});
|
|
|
|
static EquipmentProfileProviderState of(BuildContext context) {
|
|
return context.findAncestorStateOfType<EquipmentProfileProviderState>()!;
|
|
}
|
|
|
|
@override
|
|
State<EquipmentProfileProvider> createState() => EquipmentProfileProviderState();
|
|
}
|
|
|
|
class EquipmentProfileProviderState extends State<EquipmentProfileProvider> {
|
|
static const EquipmentProfileData _defaultProfile = EquipmentProfileData(
|
|
id: '',
|
|
name: '',
|
|
apertureValues: apertureValues,
|
|
ndValues: ndValues,
|
|
shutterSpeedValues: shutterSpeedValues,
|
|
isoValues: isoValues,
|
|
);
|
|
|
|
List<EquipmentProfileData> _customProfiles = [];
|
|
String _selectedId = '';
|
|
|
|
EquipmentProfileData get _selectedProfile => _customProfiles.firstWhere(
|
|
(e) => e.id == _selectedId,
|
|
orElse: () {
|
|
context.read<UserPreferencesService>().selectedEquipmentProfileId = _defaultProfile.id;
|
|
return _defaultProfile;
|
|
},
|
|
);
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_selectedId = context.read<UserPreferencesService>().selectedEquipmentProfileId;
|
|
_customProfiles = context.read<UserPreferencesService>().equipmentProfiles;
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return EquipmentProfiles(
|
|
profiles: [_defaultProfile] + _customProfiles,
|
|
child: EquipmentProfile(
|
|
data: _selectedProfile,
|
|
child: widget.child,
|
|
),
|
|
);
|
|
}
|
|
|
|
void setProfile(EquipmentProfileData data) {
|
|
setState(() {
|
|
_selectedId = data.id;
|
|
});
|
|
context.read<UserPreferencesService>().selectedEquipmentProfileId = _selectedProfile.id;
|
|
}
|
|
|
|
/// Creates a default equipment profile
|
|
void addProfile(String name) {
|
|
_customProfiles.add(EquipmentProfileData(
|
|
id: const Uuid().v1(),
|
|
name: name,
|
|
apertureValues: apertureValues,
|
|
ndValues: ndValues,
|
|
shutterSpeedValues: shutterSpeedValues,
|
|
isoValues: isoValues,
|
|
));
|
|
_refreshSavedProfiles();
|
|
}
|
|
|
|
void updateProdile(EquipmentProfileData data) {
|
|
final indexToUpdate = _customProfiles.indexWhere((element) => element.id == data.id);
|
|
if (indexToUpdate >= 0) {
|
|
_customProfiles[indexToUpdate] = data;
|
|
_refreshSavedProfiles();
|
|
}
|
|
}
|
|
|
|
void deleteProfile(EquipmentProfileData data) {
|
|
_customProfiles.remove(data);
|
|
_refreshSavedProfiles();
|
|
}
|
|
|
|
void _refreshSavedProfiles() {
|
|
context.read<UserPreferencesService>().equipmentProfiles = _customProfiles;
|
|
setState(() {});
|
|
}
|
|
}
|
|
|
|
class EquipmentProfiles extends InheritedWidget {
|
|
final List<EquipmentProfileData> profiles;
|
|
|
|
const EquipmentProfiles({
|
|
required this.profiles,
|
|
required super.child,
|
|
super.key,
|
|
});
|
|
|
|
static List<EquipmentProfileData> of(BuildContext context, {bool listen = true}) {
|
|
if (listen) {
|
|
return context.dependOnInheritedWidgetOfExactType<EquipmentProfiles>()!.profiles;
|
|
} else {
|
|
return context.findAncestorWidgetOfExactType<EquipmentProfiles>()!.profiles;
|
|
}
|
|
}
|
|
|
|
@override
|
|
bool updateShouldNotify(EquipmentProfiles oldWidget) => true;
|
|
}
|
|
|
|
class EquipmentProfile extends InheritedWidget {
|
|
final EquipmentProfileData data;
|
|
|
|
const EquipmentProfile({
|
|
required this.data,
|
|
required super.child,
|
|
super.key,
|
|
});
|
|
|
|
static EquipmentProfileData of(BuildContext context, {bool listen = true}) {
|
|
if (listen) {
|
|
return context.dependOnInheritedWidgetOfExactType<EquipmentProfile>()!.data;
|
|
} else {
|
|
return context.findAncestorWidgetOfExactType<EquipmentProfile>()!.data;
|
|
}
|
|
}
|
|
|
|
@override
|
|
bool updateShouldNotify(EquipmentProfile oldWidget) => true;
|
|
}
|