Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter BLoC - How to pass parameter to event?

Trying to learn BLoCs I came up with this problem. I have some code in which I generate some buttons with BLoC pattern. However, I have no clue how to update specific buttons properties with dispatch(event) method. How to pass parameters to the event ChangeSomeValues??

The part where the BLoC is used

BlocBuilder(
  bloc: myBloc,
  builder: (context, state) {
    return ListView.builder(
      itemCount: state.buttonList.length,
      itemBuilder: (context, index) {
        return MyButton(
          label: buttonList[index].label,
          value: buttonList[index].value,
          onPressed: myBloc.dispatch(ChangeSomeValues()),
        );
      }
    );
  }
),

MyBloc.dart

class MyBloc extends Bloc<MyEvent, MyState> {

  @override
  Stream<MyState> mapEventToState(MyEvent event) async* {
    if (event is ChangeSomeValues) {
      ... modify specific parameters in list here ...
      yield MyState1(modifiedList);
    }
  }
}

I know how to use the events to change values but I couldn't find how to edit specific parameters in list with this kind of a generic implementation.

like image 261
prkmk Avatar asked Jul 04 '19 10:07

prkmk


1 Answers

Code for your event :

class ChangeSomeValues extends MyEvent {
  final int data;

  ChangeSomeValues(this.data);
}

dispatch it as : myBloc.dispatch(ChangeSomeValues(15))

The bloc

class MyBloc extends Bloc<MyEvent, MyState> {

  @override
  Stream<MyState> mapEventToState(MyEvent event) async* {
    if (event is ChangeSomeValues) {
      print("here's the data : ${event.data}");
    }
  }
}
like image 149
Muldec Avatar answered Nov 14 '22 01:11

Muldec