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

Posted

技术标签:

【中文标题】Flutter BLoC - 如何将参数传递给事件?【英文标题】:Flutter BLoC - How to pass parameter to event? 【发布时间】:2019-11-15 01:53:03 【问题描述】:

试图学习 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() 构造函数? 这是一个事件。如果我将一些参数传递给构造函数,if 子句将如何工作? if (event is ChangeSomeValues) ?当然 【参考方案1】:

活动代码:

class ChangeSomeValues extends MyEvent 
  final int data;

  ChangeSomeValues(this.data);

将其发送为:myBloc.dispatch(ChangeSomeValues(15))

集团

class MyBloc extends Bloc<MyEvent, MyState> 

  @override
  Stream<MyState> mapEventToState(MyEvent event) async* 
    if (event is ChangeSomeValues) 
      print("here's the data : $event.data");
    
  

【讨论】:

太棒了!您知道为什么那些构建器生成的按钮在单击时不会更新吗?热重载后,我看到更新的状态,但不是之前 想通了:我必须将状态更改为其他内容,然后再返回更新 BlocBuilder

以上是关于Flutter BLoC - 如何将参数传递给事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给flutter integration_test?

如何有条件地将参数传递给 Flutter/Dart 中的 Widget?

如何将自定义参数传递给事件处理程序

如何将事件和其他参数传递给单击处理程序

flutter_bloc 4.0.0如何获取事件属性参数。

如何将参数传递给使用 libevent 创建的事件函数?