flutter_bloc_side_effect 1.0.0
flutter_bloc_side_effect: ^1.0.0 copied to clipboard
Extended BLoC with second stream of Side Effects and widgets.
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_bloc_side_effect/flutter_bloc_side_effect.dart';
import 'package:flutter_bloc_side_effect_example/my_bloc.dart';
void main() {
runApp(const App());
}
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(home: MyView());
}
}
class MyView extends StatefulWidget {
const MyView({super.key});
@override
State<MyView> createState() => _MyViewState();
}
class _MyViewState extends State<MyView> {
final _bloc = MyBloc();
@override
void dispose() {
_bloc.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BlocConsumerWithSideEffects<MyBloc, MyState, MySideEffect>(
bloc: _bloc,
sideEffectsListener: (context, sideEffect) {
sideEffect.map(
error: (sideEffect) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(sideEffect.message)),
);
},
);
},
listener: (_, state) => log(state.stateName),
builder: (context, state) {
return Scaffold(
appBar: AppBar(title: Text(state.stateName)),
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: () => _bloc.add(const MyEvent.throwError()),
child: const Text('Error'),
),
],
),
);
},
);
}
}