bsev 0.9.3 copy "bsev: ^0.9.3" to clipboard
bsev: ^0.9.3 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: (context, event, dispatcher){ //optional
        // performs action received by the bloc
      },
      builder: (context, dispatcher, streams){
      
          return Scaffold(
            appBar: AppBar(),
            body: _buildBody(streams),
            floatingActionButton: FloatingActionButton(
                onPressed: (){
                  dispatcher(IncrementEvent());
                }
            ),
          );
      
      }
    );
    
  }
    
  Widget _buildBody(HomeStreams streams) {

    return StreamListener<int>(
      stream: streams.count.get,
      builder: (_,snapshot){
        return Center(
          child: Text(snapshot.data.toString())
        )
      }
    );

  }
  
}

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

  MyApp(){

    registerBlocFactory<HomeBloc, HomeStreams>((i) => HomeBloc(), () => HomeStreams());
      
    //Example of the register bloc singleton.
    //registerBlocSingleton<HomeBloc, HomeStreams>((i) => HomeBloc(), () => HomeStreams());

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

Questions about how to use the injector consult documentation.

More complex example is found here: exemplo

Used packages #

Packages pub
rxdart Pub
injector Pub

User cases #

Apps
FlutterNews
DartLangBr
Boleiro
0
likes
35
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

MIT (LICENSE)

Dependencies

flutter, injector, rxdart

More

Packages that depend on bsev