no_bloc 0.3.7

  • Readme
  • Changelog
  • Example
  • Installing
  • 90

A State management library for Dart and Flutter using BLoCs (Business Logic Component)

Checkout the flutter version too: no_bloc_flutter

Why? #

This library provides a simpler alternative for existing libraries which:

  • Require a lot of boilerplate code
  • Expose complexity of underlying reactive streams

Pros 👍 #

  • Easy to use and works out of the box
  • Complete abstraction over Streams and Subscriptions
  • No more states or events boilerplate bloat (just work with functions)

Example #

Easy Bloc hides all streams/yields, exposing only simple functions setState(), setBusy() and setError():

import 'package:no_bloc/no_bloc.dart';

class CounterBloc extends Bloc {
  void increment() => setState(value + 1);
  void decrement() => setState(value - 1);
}

void main() {
  final bloc = CounterBloc();
  
  bloc.increment();
}

 

A bit more complex bloc:

AutoPersistedBloc can be used to save value on app exit, and recover again on app start. Keeps State in sync, shows error messages and loading indicator.

import 'package:no_bloc/no_bloc.dart';

class CounterBloc extends AutoPersistedBloc<CounterBloc, int> {
  void increment() async {
    if (value >= 10) {
      setError(StateError('Counter cannot go beyond 10'));
    }
    
    setBusy();
    await makeNetworkCall();
    
    setState(value + 1);
  }

  void decrement() => setState(value - 1);
}

void main() async {
  final bloc = CounterBloc();
  
  await bloc.increment();
}

Bloc Monitor #

You can monitor your blocs and create side effects simply by using a bloc monitor.

 class BroadcastPrinter extends BlocMonitor {
   @override
   void onBroadcast(String blocName, state, {String event}) {
     print('[$blocName] broadcast: $state ($event)');
   }
 }

For more details: bloc monitor

Test #

testBloc<CounterBloc, int>(
    'counter should work',
    bloc: () async => CounterBloc(0),
    expectBefore: (bloc) async => expect(bloc.isBusy, false),
    expectAfter: (bloc) async => expect(bloc.hasError, false),
    timeout: Duration(seconds: 1),
    expectedStates: emitsInOrder([0, 1, 2, 1]),
    job: (bloc) async {
      bloc.increment();
      bloc.increment();
      bloc.decrement();
    },
  );

Contribution ❤ #

Issues and pull requests are welcome

Please file feature requests and bugs at the issue tracker.

0.3.7 #

  • update description

0.3.6 #

  • fix typos

0.3.5 #

  • update description

0.3.4 #

  • update description

0.3.3 #

  • update description

0.3.0 #

  • bug fixes

0.2.3 #

  • minor bug fix

0.2.1 #

  • remove dependence on dart:io

0.2.0 #

  • bug fixes

0.1.5 #

  • minor changes

0.1.4 #

  • add more documentation

0.1.3 #

  • add more documentation

0.1.2 #

  • Minor changes

0.1.1 #

  • Add a link to github repository

0.1.0 #

  • Initial version

example/main.dart

import 'package:no_bloc/no_bloc.dart';

class BroadcastPrinter extends BlocMonitor {
  @override
  void onBroadcast(String blocName, state, {String event}) {
    print('[$blocName] broadcast: $state ($event)');
  }
}

class CounterBloc extends Bloc<CounterBloc, int> {
  CounterBloc() : super(initialState: 0, monitor: BroadcastPrinter());

  // event names are optional and only used for debugging purpose
  void increment() => setState(value + 1, event: 'increment');
  void decrement() => setState(value - 1, event: 'decrement');
}

void main() {
  final bloc = CounterBloc();

  bloc.state.listen((s) => print(s));

  bloc.increment();
  bloc.decrement();
}

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  no_bloc: ^0.3.7

2. Install it

You can install packages from the command line:

with pub:


$ pub get

with Flutter:


$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:no_bloc/no_bloc.dart';
  
Popularity:
Describes how popular the package is relative to other packages. [more]
79
Health:
Code health derived from static analysis. [more]
100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
100
Overall:
Weighted score of the above. [more]
90
Learn more about scoring.

We analyzed this package on Jul 11, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.8.4
  • pana: 0.13.14

Health suggestions

Format lib/no_bloc.dart.

Run dartfmt to format lib/no_bloc.dart.

Format lib/src/bloc.dart.

Run dartfmt to format lib/src/bloc.dart.

Format lib/src/bloc_test.dart.

Run dartfmt to format lib/src/bloc_test.dart.

Format lib/src/persisted_bloc.dart.

Run dartfmt to format lib/src/persisted_bloc.dart.

Format lib/src/persistence_service.dart.

Run dartfmt to format lib/src/persistence_service.dart.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.7.0 <3.0.0
built_value ^7.0.0 7.1.0
equatable ^1.0.0 1.2.2
hive ^1.0.0 1.4.1+1
meta ^1.1.8 1.2.2 1.3.0-nullsafety
path ^1.0.0 1.7.0
pedantic ^1.0.0 1.9.2
rxdart ^0.24.1 0.24.1
synchronized ^2.0.0 2.2.0+1
test ^1.0.0 1.15.2
Transitive dependencies
_fe_analyzer_shared 5.0.0
analyzer 0.39.12
args 1.6.0
async 2.4.2
boolean_selector 2.0.0
built_collection 4.3.2
charcode 1.1.3
collection 1.14.13 1.15.0-nullsafety
convert 2.1.1
coverage 0.14.0
crypto 2.1.5
csslib 0.16.1
fixnum 0.10.11
glob 1.2.0
html 0.14.0+3
http 0.12.1
http_multi_server 2.2.0
http_parser 3.1.4
io 0.3.4
js 0.6.2
logging 0.11.4
matcher 0.12.8
mime 0.9.6+3
node_interop 1.1.1
node_io 1.1.1
node_preamble 1.4.12
package_config 1.9.3
pool 1.4.0
pub_semver 1.4.4
quiver 2.1.3
shelf 0.7.7
shelf_packages_handler 2.0.0
shelf_static 0.2.8
shelf_web_socket 0.2.3
source_map_stack_trace 2.0.0
source_maps 0.10.9
source_span 1.7.0
stack_trace 1.9.5
stream_channel 2.0.0
string_scanner 1.0.5
term_glyph 1.1.0
test_api 0.2.17
test_core 0.3.10
typed_data 1.2.0 1.3.0-nullsafety
vm_service 4.1.0
watcher 0.9.7+15
web_socket_channel 1.1.0
webkit_inspection_protocol 0.7.3
yaml 2.2.1
Dev dependencies
mockito ^4.0.0