bsev 0.7.2 copy "bsev: ^0.7.2" to clipboard
bsev: ^0.7.2 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 HomeEvents extends EventsBase{}

class IncrementEvent extends HomeEvents{}

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,HomeEvents>{

  //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());

  @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)
    }
    
  }
}

Note: If you do not want to use events (for a screen that only starts, loads and displays data) you can use EventsBase as an event. Ex: BlocBase <HomeStreams, EventsBase>

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 BlocStatelessView<HomeBloc,HomeStreams> {

  @override
  void eventReceiver(HomeEvents event) {
    // performs action received by the bloc
  }
  
  @override
  Widget buildView(BuildContext context, HomeStreams streams) {

    return Scaffold(
      appBar: AppBar(),
      body: _buildBody(streams),
      floatingActionButton: FloatingActionButton(
          onPressed: (){
            dispatch(IncrementEvent());
          }
      ),
    );
    
  }
    
  Widget _buildBody(HomeStreams streams) {

    return StreamBuilder(
      stream: streams.count.get,
      initialData: 0,
      builder: (_,snapshot){

        int count = 0;
        if(snapshot.hasData){
          count = snapshot.data;
        }

        return Center(
          child: Text(count)
        )
      }
    );

  }
  
}

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

  MyApp(){

    var injector = Injector.appInstance;
    injector.registerDependency((i)=> HomeBloc());
    injector.registerDependency((i)=> HomeStreams());
    
  }

Questions about how to use the injector consult documentation.

Finally we instantiate our HomeView running:

HomeView().create()

More complex example is found here: exemplo

Using Stateful Widget #

To stateful widget is necessary use mixin and add "create":

class HomeView extends StatefulWidget {

  Widget create(){
    return BlocProvider<BlocBase,StreamsBase>(
      child: this,
    );
  }
  
  @override
  _HomeViewState createState() => _HomeViewState();
}

class _HomeViewState extends State<HomeView> with BlocViewMixin<HomeBloc,HomeStreams>{

  @override
  void eventReceiver(HomeEvents event) {
    // performs action received by the bloc
  }
  
  @override
  Widget buildView(BuildContext context, HomeStreams streams) {
    return Scaffold(
      appBar: AppBar(),
      body: _buildBody(streams),
      floatingActionButton: FloatingActionButton(
          onPressed: (){
            dispatch(IncrementEvent());
          }
      ),
    );
  }
  
  Widget _buildBody(HomeStreams streams) {
    
      return StreamBuilder(
        stream: streams.count.get,
        initialData: 0,
        builder: (_,snapshot){
          
          int count = 0;
          if(snapshot.hasData){
            count = snapshot.data;
          }
          
          return Center(
            child: Text(count)
          )
        }
      );
      
  }
  
}

Used packages #

Packages pub
rxdart Pub
injector Pub
provider Pub

User cases #

Apps
FlutterNews
DartLangBr
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, provider, rxdart

More

Packages that depend on bsev