https://github.com/hoc081098/flutter_bloc_pattern
:zap: Base class, bloc provider and rxdart stream builder for BLoC pattern in flutter: https://pub.dev/packages/flutter_bloc_pattern
https://github.com/hoc081098/flutter_bloc_pattern
bloc-pattern bloc-pattern-helper bloc-pattern-rxdart bloc-rxdart flutter-bloc flutter-bloc-pattern flutter-bloc-pattern-rxdart flutter-bloc-rxdart flutter-reactive flutter-rx flutter-rxdart
Last synced: 2 months ago
JSON representation
:zap: Base class, bloc provider and rxdart stream builder for BLoC pattern in flutter: https://pub.dev/packages/flutter_bloc_pattern
- Host: GitHub
- URL: https://github.com/hoc081098/flutter_bloc_pattern
- Owner: hoc081098
- License: mit
- Created: 2019-02-08T09:50:17.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-03-24T18:47:06.000Z (3 months ago)
- Last Synced: 2025-03-24T19:39:54.819Z (3 months ago)
- Topics: bloc-pattern, bloc-pattern-helper, bloc-pattern-rxdart, bloc-rxdart, flutter-bloc, flutter-bloc-pattern, flutter-bloc-pattern-rxdart, flutter-bloc-rxdart, flutter-reactive, flutter-rx, flutter-rxdart
- Language: Dart
- Homepage: https://pub.dev/packages/flutter_bloc_pattern
- Size: 195 KB
- Stars: 10
- Watchers: 2
- Forks: 3
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
README
# flutter_bloc_pattern
Base class, BLoC provider and `rxdart` builder for BLoC pattern in Flutter.
[](https://github.com/hoc081098/flutter_bloc_pattern/actions)
[](https://pub.dev/packages/flutter_bloc_pattern)
[](https://pub.dev/packages/flutter_bloc_pattern)
[](https://codecov.io/gh/hoc081098/flutter_bloc_pattern)
[](https://opensource.org/licenses/MIT)
[](https://pub.dev/packages/lints)
[](https://hits.seeyoufarm.com)## Getting Started
### 1. Add this to your package's pubspec.yaml file
```yaml
dependencies:
flutter_bloc_pattern:
```### 2. Implements BaseBloc
```dart
import 'package:disposebag/disposebag.dart';
import 'package:flutter_bloc_pattern/flutter_bloc_pattern.dart';
import 'package:rxdart_ext/rxdart_ext.dart';class MyBloc implements BaseBloc {
StateStream get stream;@override
void dispose() {}
}
```### 3. Consume BLoC
```dart
final bloc = BlocProvider.of(context);
return RxStreamBuilder(
stream: bloc.stream,
builder: (context, state) {
return ...;
},
);
```## Example: A port of the standard "Counter Button" example from Flutter
### 1. File `counter_bloc.dart`
```dart
import 'dart:async';import 'package:disposebag/disposebag.dart';
import 'package:flutter_bloc_pattern/flutter_bloc_pattern.dart';
import 'package:rxdart_ext/rxdart_ext.dart';class CounterBloc extends DisposeCallbackBaseBloc {
/// Inputs
final VoidAction increment;/// Outputs
final StateStream state;CounterBloc._({
required VoidAction dispose,
required this.increment,
required this.state,
}) : super(dispose);factory CounterBloc() {
final incrementController = StreamController();final state$ = incrementController.stream
.scan((acc, _, __) => acc + 1, 0)
.publishState(0);return CounterBloc._(
dispose: DisposeBag([incrementController, state$.connect()]).dispose,
increment: incrementController.addNull,
state: state$,
);
}
}
```### 2. File `main.dart`
```dart
import 'package:example/bloc.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc_pattern/flutter_bloc_pattern.dart';class TextCounter1 extends StatelessWidget {
const TextCounter1({super.key});@override
Widget build(BuildContext context) {
final bloc = BlocProvider.of(context);return RxStreamBuilder(
stream: bloc.state,
builder: (context, state) {
return Text(
'COUNTER 1: $state',
style: Theme.of(context).textTheme.titleLarge,
);
},
);
}
}class IncrementButton extends StatelessWidget {
const IncrementButton({super.key});@override
Widget build(BuildContext context) {
final bloc = context.bloc();return FloatingActionButton(
onPressed: bloc.increment,
tooltip: 'Increment',
child: const Icon(Icons.add),
);
}
}
```