mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2025-03-12 13:20:42 +00:00
added stub FilmsProvider
This commit is contained in:
parent
1be7c3be48
commit
088c273e9a
4 changed files with 116 additions and 28 deletions
|
@ -2,11 +2,12 @@ library m3_lightmeter_iap;
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:m3_lightmeter_iap/src/providers/equipment_profile_provider.dart';
|
import 'package:m3_lightmeter_iap/src/providers/equipment_profile_provider.dart';
|
||||||
|
import 'package:m3_lightmeter_iap/src/providers/films_provider.dart';
|
||||||
import 'package:m3_lightmeter_iap/src/providers/iap_products_provider.dart';
|
import 'package:m3_lightmeter_iap/src/providers/iap_products_provider.dart';
|
||||||
|
|
||||||
export 'src/data/models/iap_product.dart';
|
export 'src/data/models/iap_product.dart';
|
||||||
|
|
||||||
export 'src/providers/equipment_profile_provider.dart' hide EquipmentProfilesAspect;
|
export 'src/providers/equipment_profile_provider.dart';
|
||||||
export 'src/providers/iap_products_provider.dart';
|
export 'src/providers/iap_products_provider.dart';
|
||||||
|
|
||||||
class IAPProviders extends StatelessWidget {
|
class IAPProviders extends StatelessWidget {
|
||||||
|
@ -22,8 +23,10 @@ class IAPProviders extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return IAPProductsProvider(
|
return IAPProductsProvider(
|
||||||
child: EquipmentProfileProvider(
|
child: FilmsProvider(
|
||||||
child: child,
|
child: EquipmentProfileProvider(
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:m3_lightmeter_iap/src/providers/selectable_provider.dart';
|
||||||
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
||||||
|
|
||||||
class EquipmentProfileProvider extends StatefulWidget {
|
class EquipmentProfileProvider extends StatefulWidget {
|
||||||
|
@ -27,7 +28,7 @@ class EquipmentProfileProviderState extends State<EquipmentProfileProvider> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return EquipmentProfiles(
|
return EquipmentProfiles(
|
||||||
profiles: const [_defaultProfile],
|
values: const [_defaultProfile],
|
||||||
selected: _defaultProfile,
|
selected: _defaultProfile,
|
||||||
child: widget.child,
|
child: widget.child,
|
||||||
);
|
);
|
||||||
|
@ -42,38 +43,19 @@ class EquipmentProfileProviderState extends State<EquipmentProfileProvider> {
|
||||||
void deleteProfile(EquipmentProfile data) {}
|
void deleteProfile(EquipmentProfile data) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum EquipmentProfilesAspect { list, selected }
|
class EquipmentProfiles extends SelectableInheritedModel<EquipmentProfile> {
|
||||||
|
|
||||||
class EquipmentProfiles extends InheritedModel<EquipmentProfilesAspect> {
|
|
||||||
const EquipmentProfiles({
|
const EquipmentProfiles({
|
||||||
super.key,
|
super.key,
|
||||||
required this.profiles,
|
required super.values,
|
||||||
required this.selected,
|
required super.selected,
|
||||||
required super.child,
|
required super.child,
|
||||||
});
|
});
|
||||||
|
|
||||||
final List<EquipmentProfile> profiles;
|
|
||||||
final EquipmentProfile selected;
|
|
||||||
|
|
||||||
static List<EquipmentProfile> of(BuildContext context) {
|
static List<EquipmentProfile> of(BuildContext context) {
|
||||||
return InheritedModel.inheritFrom<EquipmentProfiles>(
|
return InheritedModel.inheritFrom<EquipmentProfiles>(context, aspect: SelectableAspect.list)!.values;
|
||||||
context,
|
|
||||||
aspect: EquipmentProfilesAspect.list,
|
|
||||||
)!
|
|
||||||
.profiles;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static EquipmentProfile selectedOf(BuildContext context) {
|
static EquipmentProfile selectedOf(BuildContext context) {
|
||||||
return InheritedModel.inheritFrom<EquipmentProfiles>(
|
return InheritedModel.inheritFrom<EquipmentProfiles>(context, aspect: SelectableAspect.selected)!.selected;
|
||||||
context,
|
|
||||||
aspect: EquipmentProfilesAspect.selected,
|
|
||||||
)!
|
|
||||||
.selected;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
bool updateShouldNotify(EquipmentProfiles oldWidget) => false;
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool updateShouldNotifyDependent(EquipmentProfiles oldWidget, Set<EquipmentProfilesAspect> dependencies) => false;
|
|
||||||
}
|
}
|
||||||
|
|
58
iap/lib/src/providers/films_provider.dart
Normal file
58
iap/lib/src/providers/films_provider.dart
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:m3_lightmeter_iap/src/providers/selectable_provider.dart';
|
||||||
|
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
||||||
|
|
||||||
|
class FilmsProvider extends StatefulWidget {
|
||||||
|
final Widget child;
|
||||||
|
|
||||||
|
const FilmsProvider({
|
||||||
|
required this.child,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
static FilmsProviderState of(BuildContext context) {
|
||||||
|
return context.findAncestorStateOfType<FilmsProviderState>()!;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<FilmsProvider> createState() => FilmsProviderState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class FilmsProviderState extends State<FilmsProvider> {
|
||||||
|
late Film _selected = Film.values.first;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Films(
|
||||||
|
values: Film.values,
|
||||||
|
selected: _selected,
|
||||||
|
child: widget.child,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setFilm(Film film) {
|
||||||
|
if (_selected != film) {
|
||||||
|
_selected = film;
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveFilms(List<Film> films) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Films extends SelectableInheritedModel<Film> {
|
||||||
|
const Films({
|
||||||
|
super.key,
|
||||||
|
required super.values,
|
||||||
|
required super.selected,
|
||||||
|
required super.child,
|
||||||
|
});
|
||||||
|
|
||||||
|
static List<Film> of(BuildContext context) {
|
||||||
|
return InheritedModel.inheritFrom<Films>(context, aspect: SelectableAspect.list)!.values;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Film selectedOf(BuildContext context) {
|
||||||
|
return InheritedModel.inheritFrom<Films>(context, aspect: SelectableAspect.selected)!.selected;
|
||||||
|
}
|
||||||
|
}
|
45
iap/lib/src/providers/selectable_provider.dart
Normal file
45
iap/lib/src/providers/selectable_provider.dart
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
enum SelectableAspect { list, selected }
|
||||||
|
|
||||||
|
class SelectableInheritedModel<T> extends InheritedModel<SelectableAspect> {
|
||||||
|
const SelectableInheritedModel({
|
||||||
|
super.key,
|
||||||
|
required this.values,
|
||||||
|
required this.selected,
|
||||||
|
required super.child,
|
||||||
|
});
|
||||||
|
|
||||||
|
final List<T> values;
|
||||||
|
final T selected;
|
||||||
|
|
||||||
|
static List<T> of<T>(BuildContext context) {
|
||||||
|
return InheritedModel.inheritFrom<SelectableInheritedModel<T>>(
|
||||||
|
context,
|
||||||
|
aspect: SelectableAspect.list,
|
||||||
|
)!
|
||||||
|
.values;
|
||||||
|
}
|
||||||
|
|
||||||
|
static T selectedOf<T>(BuildContext context) {
|
||||||
|
return InheritedModel.inheritFrom<SelectableInheritedModel>(
|
||||||
|
context,
|
||||||
|
aspect: SelectableAspect.selected,
|
||||||
|
)!
|
||||||
|
.selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool updateShouldNotify(SelectableInheritedModel oldWidget) => true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool updateShouldNotifyDependent(SelectableInheritedModel oldWidget, Set<SelectableAspect> dependencies) {
|
||||||
|
if (dependencies.contains(SelectableAspect.list)) {
|
||||||
|
return true;
|
||||||
|
} else if (dependencies.contains(SelectableAspect.selected)) {
|
||||||
|
return selected != oldWidget.selected;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue