ente/lib/ui/change_notifier_builder.dart

47 lines
970 B
Dart
Raw Normal View History

2020-03-24 19:59:36 +00:00
import 'package:flutter/material.dart';
typedef Widget ChangeNotifierWidgetBuilder<T extends ChangeNotifier>(
BuildContext context,
T value,
);
class ChangeNotifierBuilder<T extends ChangeNotifier> extends StatefulWidget {
final ChangeNotifierWidgetBuilder<T> builder;
final T value;
const ChangeNotifierBuilder({
Key key,
@required this.builder,
@required this.value,
}) : super(key: key);
@override
_ChangeNotifierBuilderState createState() => _ChangeNotifierBuilderState();
}
class _ChangeNotifierBuilderState extends State<ChangeNotifierBuilder> {
@override
void initState() {
super.initState();
widget.value.addListener(_onChange);
}
void _onChange() {
if (mounted) {
setState(() {});
}
}
@override
void dispose() {
widget.value.removeListener(_onChange);
super.dispose();
}
@override
Widget build(BuildContext context) {
return widget.builder(context, widget.value);
}
}