This app shows a number on screen that increases each time you press the button. The BLoC handles the counting logic and updates the UI through a stream.
import 'dart:async';
import 'package:flutter/material.dart';
class CounterBloc {
final _counterController = StreamController<int>.broadcast();
int _counter = 0;
Stream<int> get counterStream => _counterController.stream;
void increment() {
_counter++;
_counterController.sink.add(_counter);
}
void dispose() {
_counterController.close();
}
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final CounterBloc bloc = CounterBloc();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('BLoC Pattern Example')),
body: Center(
child: StreamBuilder<int>(
stream: bloc.counterStream,
initialData: 0,
builder: (context, snapshot) {
return Text('Count: ${snapshot.data}', style: TextStyle(fontSize: 30));
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: bloc.increment,
child: Icon(Icons.add),
tooltip: 'Increment',
),
),
);
}
}