import 'package:flutter/material.dart'; typedef Widget ChangeNotifierWidgetBuilder( BuildContext context, T value, ); class ChangeNotifierBuilder extends StatefulWidget { final ChangeNotifierWidgetBuilder 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 { @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); } }