class CounterBloc extends Bloc<CounterEvent, int> { CounterBloc() : super(0) { on<CounterEvent>((event, emit) { if (event is Increment) { emit(state + 1); } else if (event is Decrement) { emit(state - 1); } }); } } abstract class CounterEvent {} class Increment extends CounterEvent {} class Decrement extends CounterEvent {} class CounterWidget extends StatelessWidget { @override Widget build(BuildContext context) { return BlocProvider( create: (context) => CounterBloc(), child: Column( children: [ Expanded(child: CounterWidgetA()), Expanded(child: CounterWidgetB()), ], ), ); } } class CounterWidgetA extends StatelessWidget { @override Widget build(BuildContext context) { final counterBloc = BlocProvider.of<CounterBloc>(context); return Scaffold( body: Center( child: BlocBuilder<CounterBloc, int>( builder: (context, count) { return Text('$count'); }, ), ), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, children: [ FloatingActionButton( onPressed: () => counterBloc.add(Increment()), child: Icon(Icons.add), ), FloatingActionButton( onPressed: () => counterBloc.add(Decrement()), child: Icon(Icons.remove), ), ], ), ); } } class CounterWidgetB extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: BlocBuilder<CounterBloc, int>( builder: (context, count) { return Text('$count'); }, ), ), ); } }
class Counter extends ChangeNotifier { int _count = 0; int get count => _count; void increment() { _count++; notifyListeners(); } } class CounterProviderWidget extends StatelessWidget { @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (_) => Counter(), child: Column( children: [ Expanded(child: CounterWidgetA()), Expanded(child: CounterWidgetB()), ], ), ); } } class CounterWidgetA extends StatelessWidget { @override Widget build(BuildContext context) { return Consumer<Counter>( builder: (context, counter, child) { return Scaffold( body: Center(child: Text('${counter.count}')), floatingActionButton: FloatingActionButton( onPressed: counter.increment, child: const Icon(Icons.add), ), ); }, ); } } class CounterWidgetB extends StatelessWidget { @override Widget build(BuildContext context) { return Consumer<Counter>( builder: (context, counter, child) { return Center(child: Text('${counter.count}')); }, ); } }
class CounterBloc extends Bloc<CounterEvent, int> { CounterBloc() : super(0) { on<CounterEvent>((event, emit) { if (event is Increment) { emit(state + 1); } else if (event is Decrement) { emit(state - 1); } }); } } abstract class CounterEvent {} class Increment extends CounterEvent {} class Decrement extends CounterEvent {} class CounterWidget extends StatelessWidget { @override Widget build(BuildContext context) { return BlocProvider( create: (context) => CounterBloc(), child: Column( children: [ Expanded(child: CounterWidgetA()), Expanded(child: CounterWidgetB()), ], ), ); } } class CounterWidgetA extends StatelessWidget { @override Widget build(BuildContext context) { final counterBloc = BlocProvider.of<CounterBloc>(context); return Scaffold( body: Center( child: BlocBuilder<CounterBloc, int>( builder: (context, count) { return Text('$count'); }, ), ), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, children: [ FloatingActionButton( onPressed: () => counterBloc.add(Increment()), child: Icon(Icons.add), ), FloatingActionButton( onPressed: () => counterBloc.add(Decrement()), child: Icon(Icons.remove), ), ], ), ); } } class CounterWidgetB extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: BlocBuilder<CounterBloc, int>( builder: (context, count) { return Text('$count'); }, ), ), ); } }