import 'package:flutter/widgets.dart'; import 'bloc_base.dart'; Type _typeOf() => T; class BlocProvider extends StatefulWidget { BlocProvider({ Key key, @required this.child, @required this.blocs, }) : super(key: key); final Widget child; final List blocs; @override _BlocProviderState createState() => _BlocProviderState(); static List of(BuildContext context) { final type = _typeOf<_BlocProviderInherited>(); _BlocProviderInherited provider = context.ancestorInheritedElementForWidgetOfExactType(type)?.widget; return provider?.blocs; } } class _BlocProviderState extends State> { @override void dispose() { widget.blocs.map((bloc) { bloc.dispose(); }); super.dispose(); } @override Widget build(BuildContext context) { return _BlocProviderInherited( blocs: widget.blocs, child: widget.child, ); } } class _BlocProviderInherited extends InheritedWidget { _BlocProviderInherited({ Key key, @required Widget child, @required this.blocs, }) : super(key: key, child: child); final List blocs; @override bool updateShouldNotify(_BlocProviderInherited oldWidget) => false; }