BlocSimple
A simplified approach to using the BLoC pattern in Flutter. Reduce boilerplate, improve readability, and streamline state management with powerful utilities.
โจ Features ๐ Simplified State Management Pre-defined SimpleState
๐ Minimal Boilerplate Just extend SimpleCubit or SimpleBloc, no extra setup required.
๐ Repository Integration Easily connect BLoCs and Cubits to external data sources with RepositoryConnector.
โก Async Execution Automatically handle async loading, success, and error states using executeAsync.
๐งช Testing Support Built-in testing utilities for unit and widget tests.
๐ Installation Add this to your pubspec.yaml:
yaml Copy Edit dependencies: bloc_simple: ^1.0.2 ๐ฆ Usage ๐งฎ Counter Cubit Example dart Copy Edit class CounterCubit extends SimpleCubit
void increment() => setSuccess((state.data ?? 0) + 1); void decrement() => setSuccess((state.data ?? 0) - 1); } ๐ผ๏ธ In UI dart Copy Edit BlocBuilder<CounterCubit, SimpleState
Future
@override void registerEventHandlers() { on
SimpleState.initial() โ Initial idle state
SimpleState.loading() โ While loading
SimpleState.success(data) โ On success
SimpleState.error(message) โ On error
๐งช Testing Utilities Easily test your SimpleCubit or SimpleBloc with:
dart Copy Edit testSimpleCubit
Example
Here's a complete example in example/main.dart
:
import 'package:bloc_simple/simple_cubit.dart';
import 'package:bloc_simple/state_types.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
void main() {
runApp(const MyApp());
}
class CounterCubit extends SimpleCubit<int> {
CounterCubit() {
setSuccess(0);
}
void increment() => setSuccess((state.data ?? 0) + 1);
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'BlocSimple Example',
home: BlocProvider(
create: (_) => CounterCubit(),
child: const CounterScreen(),
),
);
}
}
class CounterScreen extends StatelessWidget {
const CounterScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Simple Counter')),
body: Center(
child: BlocBuilder<CounterCubit, SimpleState<int>>(
builder: (context, state) {
if (state.isLoading) return const CircularProgressIndicator();
if (state.isError) return Text('Error: ${state.errorMessage}');
return Text(
'${state.data ?? 0}',
style: const TextStyle(fontSize: 40),
);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => context.read<CounterCubit>().increment(),
child: const Icon(Icons.add),
),
);
}
}
๐ License
MIT ยฉ Dwaipayan Biswas
Built with โค๏ธ by [Dwaipayan Biswas](https://github.com/dwaipayan7)