change_notifier_builder.dart 970 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import 'package:flutter/material.dart';
  2. typedef Widget ChangeNotifierWidgetBuilder<T extends ChangeNotifier>(
  3. BuildContext context,
  4. T value,
  5. );
  6. class ChangeNotifierBuilder<T extends ChangeNotifier> extends StatefulWidget {
  7. final ChangeNotifierWidgetBuilder<T> builder;
  8. final T value;
  9. const ChangeNotifierBuilder({
  10. Key key,
  11. @required this.builder,
  12. @required this.value,
  13. }) : super(key: key);
  14. @override
  15. _ChangeNotifierBuilderState createState() => _ChangeNotifierBuilderState();
  16. }
  17. class _ChangeNotifierBuilderState extends State<ChangeNotifierBuilder> {
  18. @override
  19. void initState() {
  20. super.initState();
  21. widget.value.addListener(_onChange);
  22. }
  23. void _onChange() {
  24. if (mounted) {
  25. setState(() {});
  26. }
  27. }
  28. @override
  29. void dispose() {
  30. widget.value.removeListener(_onChange);
  31. super.dispose();
  32. }
  33. @override
  34. Widget build(BuildContext context) {
  35. return widget.builder(context, widget.value);
  36. }
  37. }