0 purchases
bloc widget arch
Bloc Widget Architecture #
An architecture that introduces a powerful and organized approach to
building flutter applications. This package provides an assortment
of abstract classes and utilities that seamlessly integrate with the
BLoC pattern, enabling you to create clear and maintainable code.
Important #
Note: This package requires iOS version 10.3 or higher for compatibility.
Features #
BaseArchBloc: An abstract class at the core of the Bloc Widget Architecture. It serves as a blueprint for structuring widgets that effectively interact with BLoCs. Extend this class to create widgets that respond to BLoC events and efficiently update the UI based on state changes.
StatefulBlocWidget: A class designed for crafting stateful widgets that interact with BLoCs. By inheriting from this class, you can effortlessly pair your BLoC with a widget while keeping your codebase modular and clean.
StatelessBlocWidget: Designed for the creation of stateless widgets that work harmoniously with BLoCs. Subclassing this abstract class simplifies the process of integrating BLoCs into widgets and ensures that your UI remains responsive and up-to-date.
Usage #
BaseArchBloc #
class ScreenBloc extends BaseArchBloc<ScreenState> {
ScreenBloc()
: super(
ScreenState(
someInt: 0,
),
);
@override
EventBus get eventBus => Modular.get<EventBus>();
@override
void registerEvents() {
super.registerEvents();
listen<SomeEvent>((event) {
updateState(
state.copyWith(
someInt: state.someInt + 1,
),
);
});
}
}
class ScreenState {
final int someInt;
ScreenState({required this.someInt});
}
extension ScreenStateCopyWith on ScreenState {
ScreenState copyWith({
int? someInt,
}) {
return ScreenState(
someInt: someInt ?? this.someInt,
);
}
}
class SomeEvent {}
copied to clipboard
StatefulBlocWidget #
class ScreenStatefulBlocWidget extends StatefulBlocWidget {
const ScreenStatefulBlocWidget({super.key, required this.someString});
final String someString;
@override
State<StatefulBlocWidget> createState() => ScreenStatefulBlocWidgetState();
}
class ScreenStatefulBlocWidgetState
extends StatefulBlocWidgetState<ScreenBloc, ScreenState> {
ScreenStatefulBlocWidget get customWidget => widget as ScreenStatefulBlocWidget;
@override
ScreenBloc get bloc => Modular.get<ScreenBloc>();
// Set up state objects, controllers, etc.
@override
Widget onBuild(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BlocWidgetArch'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Text(
customWidget.someString,
style: TextStyle(fontSize: 18.0),
),
),
Center(
child: Text(
bloc.state.someInt.toString(),
style: TextStyle(fontSize: 16.0),
),
),
SizedBox(
height: 24.0,
),
ElevatedButton(
onPressed: () {
bloc.eventBus.fire(SomeEvent());
},
child: Text('press me'),
),
],
),
);
}
}
copied to clipboard
StatelessBlocWidget #
class Screen extends StatelessBlocWidget<ScreenBloc, ScreenState> {
const Screen({super.key});
@override
get bloc => Modular.get<ScreenBloc>();
@override
Widget onBuild(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BlocWidgetArch'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Text(
bloc.state.someInt.toString(),
style: TextStyle(fontSize: 16.0),
),
),
SizedBox(
height: 24.0,
),
ElevatedButton(
onPressed: () {
bloc.eventBus.fire(SomeEvent());
},
child: Text('press me'),
),
],
),
);
}
}
copied to clipboard
Getting started #
TODO: List prerequisites and provide or point to information on how to
start using the package.
Additional information #
This package was developed with modularity and scalability in mind.
It works great with flutter_modular (it was originally developed in a project utilizing it).
License #
This project is licensed under the terms of the MIT License. See the LICENSE file for details.
Author: [Cody L. Bainter]
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.