Flutter BLoC - 如何将参数传递给事件?

15

我试图学习BLoCs时遇到了这个问题。我有一些代码,其中我使用BLoC模式生成了一些按钮。然而,我不知道如何使用dispatch(event)方法更新特定按钮的属性。如何将参数传递给事件ChangeSomeValues

BLoC使用的部分

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

我知道如何使用事件来更改值,但我找不到如何使用这种一般化的实现方式编辑列表中特定参数的方法。


我不明白:你不知道如何将参数传递给 ChangeSomeValues() 构造函数吗? - pskink
这是一个事件。如果我将一些参数传递给构造函数,那么if语句会如何工作? - prkmk
如果(事件是更改某些值){?当然 - pskink
1个回答

30

您活动的代码:

class ChangeSomeValues extends MyEvent {
  final int data;

  ChangeSomeValues(this.data);
}

将其分派为:myBloc.dispatch(ChangeSomeValues(15))

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}");
    }
  }
}

太好了!你知道为什么那些生成器生成的按钮在点击后不会更新吗?热重载后,我可以看到更新后的状态,但之前不行。 - prkmk
1
搞定了:我不得不将状态改为其他内容,然后再更新BlocBuilder。 - prkmk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接