m3_lightmeter/iap/lib/src/providers/films_provider.dart

66 lines
1.7 KiB
Dart
Raw Normal View History

2023-09-11 15:02:44 +00:00
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> {
@override
Widget build(BuildContext context) {
return Films(
2023-09-12 15:30:19 +00:00
values: const [Film.other()],
2023-09-14 13:58:28 +00:00
filmsInUse: const [Film.other()],
2023-09-12 15:30:19 +00:00
selected: const Film.other(),
2023-09-11 15:02:44 +00:00
child: widget.child,
);
}
2023-09-12 15:30:19 +00:00
void setFilm(Film film) {}
2023-09-11 15:02:44 +00:00
void saveFilms(List<Film> films) {}
}
class Films extends SelectableInheritedModel<Film> {
2023-09-14 13:58:28 +00:00
final List<Film> filmsInUse;
2023-09-11 15:02:44 +00:00
const Films({
super.key,
required super.values,
2023-09-14 13:58:28 +00:00
required this.filmsInUse,
2023-09-11 15:02:44 +00:00
required super.selected,
required super.child,
});
2023-09-14 13:58:28 +00:00
/// [Film.other()] + all the custom fields with actual reciprocity formulas
2023-09-11 15:02:44 +00:00
static List<Film> of(BuildContext context) {
2023-09-14 13:58:28 +00:00
return InheritedModel.inheritFrom<Films>(context)!.values;
}
/// [Film.other()] + films in use selected by user
static List<Film> inUseOf<T>(BuildContext context) {
return InheritedModel.inheritFrom<Films>(
context,
aspect: SelectableAspect.list,
)!
.filmsInUse;
2023-09-11 15:02:44 +00:00
}
static Film selectedOf(BuildContext context) {
return InheritedModel.inheritFrom<Films>(context, aspect: SelectableAspect.selected)!.selected;
}
}