@@ -47,10 +47,12 @@ class MyBloc implements BaseBloc {
4747
4848## Example: A port of the standard "Counter Button" example from Flutter
4949
50- ### 1. File ` counter_bloc.dart ` :
50+ ### 1. File ` counter_bloc.dart `
51+
5152``` dart
5253import 'dart:async';
5354
55+ import 'package:disposebag/disposebag.dart';
5456import 'package:flutter_bloc_pattern/flutter_bloc_pattern.dart';
5557import 'package:rxdart_ext/rxdart_ext.dart';
5658
@@ -62,41 +64,36 @@ class CounterBloc extends DisposeCallbackBaseBloc {
6264 final StateStream<int> state;
6365
6466 CounterBloc._({
65- required void Function() dispose,
67+ required VoidAction dispose,
6668 required this.increment,
6769 required this.state,
6870 }) : super(dispose);
6971
7072 factory CounterBloc() {
71- // ignore: close_sinks
7273 final incrementController = StreamController<void>();
7374
74- final state = incrementController.stream
75+ final state$ = incrementController.stream
7576 .scan<int>((acc, _, __) => acc + 1, 0)
7677 .publishState(0);
77- final connection = state.connect();
7878
7979 return CounterBloc._(
80- dispose: () async {
81- await connection.cancel();
82- await incrementController.close();
83- print('CounterBloc::disposed');
84- },
85- increment: () => incrementController.add(null),
86- state: state,
80+ dispose: DisposeBag([incrementController, state$.connect()]).dispose,
81+ increment: incrementController.addNull,
82+ state: state$,
8783 );
8884 }
8985}
9086```
9187
92- ### 2. File ` main.dart ` :
88+ ### 2. File ` main.dart `
89+
9390``` dart
9491import 'package:example/bloc.dart';
9592import 'package:flutter/material.dart';
9693import 'package:flutter_bloc_pattern/flutter_bloc_pattern.dart';
9794
9895class TextCounter1 extends StatelessWidget {
99- const TextCounter1({Key? key}) : super( key: key );
96+ const TextCounter1({super. key} );
10097
10198 @override
10299 Widget build(BuildContext context) {
@@ -107,15 +104,15 @@ class TextCounter1 extends StatelessWidget {
107104 builder: (context, state) {
108105 return Text(
109106 'COUNTER 1: $state',
110- style: Theme.of(context).textTheme.headline6 ,
107+ style: Theme.of(context).textTheme.titleLarge ,
111108 );
112109 },
113110 );
114111 }
115112}
116113
117114class IncrementButton extends StatelessWidget {
118- const IncrementButton({Key? key}) : super( key: key );
115+ const IncrementButton({super. key} );
119116
120117 @override
121118 Widget build(BuildContext context) {
@@ -124,9 +121,8 @@ class IncrementButton extends StatelessWidget {
124121 return FloatingActionButton(
125122 onPressed: bloc.increment,
126123 tooltip: 'Increment',
127- child: Icon(Icons.add),
124+ child: const Icon(Icons.add),
128125 );
129126 }
130127}
131-
132128```
0 commit comments