import 'package:flutter/widgets.dart'; import 'package:thesis_shop/bloc/user_bloc.dart'; import 'utils/disposable.dart'; class BlocProvider implements Disposable { final UserBloc userBloc; const BlocProvider({required this.userBloc}); @override Future dispose() async { await Future.wait([ userBloc.dispose(), ]); } } class AppState extends StatefulWidget { final Widget child; final BlocProvider blocProvider; const AppState({ Key? key, required this.blocProvider, required this.child, }) : super(key: key); static AppState of(BuildContext context) { final AppState? state = context.findAncestorWidgetOfExactType(); if (state == null) { throw Exception("AppState is not an ancestor of this widget"); } return state; } @override _AppStateState createState() => _AppStateState(); } class _AppStateState extends State { @override Widget build(BuildContext context) { return widget.child; } @override void dispose() { widget.blocProvider.dispose(); super.dispose(); } }