15

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.

prkmk
  • 343
  • 1
  • 4
  • 11

1 Answers1

29

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}");
    }
  }
}
Muldec
  • 4,641
  • 1
  • 25
  • 44
  • Great! Do you know why those builder generated buttons won't update when clicked? After hot reload I see the updated states but not before – prkmk Jul 05 '19 at 08:10
  • 1
    Figured it out: I had to change state into something else and then back to update the BlocBuilder – prkmk Jul 05 '19 at 08:34