bsev 1.0.1 copy "bsev: ^1.0.1" to clipboard
bsev: ^1.0.1 copied to clipboard

discontinued
outdated

Useful to aid in the use of BloC pattern with dependency injection

pub package

BSEV (BloC,Streams,Events,View) #

Set of packages and utilitarian functions that help in the use of BloC pattern with dependency injection.

With bsev you will use the Bloc pattern in a simple, reactive and organized way. Communication between the business logic and the view occurs entirely through two-way streams.

fluxo_bsev

Usage #

To use this plugin, add bsev as a dependency in your pubspec.yaml file.

We should initially create the class that represents our Streams and Events:

Streams

import 'package:bsev/bsev.dart';

class HomeStreams extends StreamsBase{

  var count = BehaviorSubjectCreate<Int>(initValue: 0);
  //var count = StreamCreate<Int>();
  //var count = PublishSubjectCreate<Int>();
  //var count = ReplaySubjectCreate<Int>();

  @override
  void dispose() {
    count.close();
  }

}

Events

import 'package:bsev/bsev.dart';

class IncrementEvent extends EventsBase{}

Now we can create our Bloc, class that will be centralized the business rule.

Bloc

import 'package:bsev/bsev.dart';

class HomeBloc extends BlocBase<HomeStreams>{

  //If you need to communicate with some instantiated BloC, regardless of whether part of your tree of widgets can use:
  //dispatchToBloc<OtherBloc>(MsgEvent());
  
  //If you need to send an event to the view:
  //dispatchView(MyEvent());
  
  // If you need send event to all BloCs
  //dispatchAll(MyEvent());

  @override
  void initView() {
  }
  
  @override
  void eventReceiver(EventsBase event) {
  
  // called when the Bloc receives an event
  
    if(event is IncrementEvent){
      streams.count.set(streams.count.value + 1)
    }
    
  }
}

In our bloc we have 2 mandatory methods: initState and eventReceiver:

initView: In the first buildView this method is invoked;

eventReceiver: Invoked whenever the pad receives an event;

View

import 'package:bsev/bsev.dart';

class HomeView extends StatelessWidget{
  
  @override
  Widget build(BuildContext context) {
    
    return Bsev<HomeBloc,HomeStreams>(
      dataToBloc: "any data", //optional initial data to bloc
      eventReceiver: (event, communication){ //optional
        // performs action received by the bloc
      },
      builder: (context,communication){
      
          return Scaffold(
            appBar: AppBar(),
            body: communication.streams.count.builder<int>((value) {
                return Text(value.toString());
            }),
            floatingActionButton: FloatingActionButton(
                onPressed: (){
                  communication.dispatcher(IncrementEvent());
                }
            ),
          );
      
      }
    );
    
  }
  
}

As our Bloc and our StreamsBase will be injected automatically, we should configure it in the Injector in the main of our application:

  MyApp(){

    registerBloc<HomeBloc, HomeStreams>((i) => HomeBloc(), () => HomeStreams());

    //Example of the register any things.
    //registerDependency((i) => CryptoRepository(i.getDependency()));

    //Example of the register any things Singleton.
    //registerSingleton((i) => CryptoRepository(i.getDependency()));

    //Example get dependency anywhere
    //var dependency = getDependency<CryptoRepository>();
    
  }

Questions about how to use the injector consult documentation.

More complex example is found here

Testing HomeBloc #

import 'package:flutter_test/flutter_test.dart';

void main() {
  HomeBloc _homeBloc;
  HomeStreams _homeStreams;

  setUp(() {
    _homeStreams = HomeStreams();
    _homeBloc = HomeBloc()..streams = _homeStreams;
  });

  tearDown(() {
    _homeBloc?.dispose();
  });
  
  test('initial streams', () {
    expect(_homeStreams.count.value, 0);
  });
  
  test('increment value', () {
    _homeBloc.eventReceiver(IncrementEvent());
    expect(_homeStreams.count.value, 1);
  });

  test('increment value 3 times', () {
    _homeBloc.eventReceiver(IncrementEvent());
    _homeBloc.eventReceiver(IncrementEvent());
    _homeBloc.eventReceiver(IncrementEvent());
    expect(_homeStreams.count.value, 3);
  });
  
}

Test example with asynchronous call: here

Used packages #

Packages pub
rxdart Pub
injector Pub

User cases #

Apps
FlutterNews
DartLangBr
Boleiro
0
likes
0
pub points
0%
popularity

Publisher

unverified uploader

Useful to aid in the use of BloC pattern with dependency injection

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

flutter, injector, rxdart

More

Packages that depend on bsev