【问题标题】:Flutter BLoC - How to pass parameter to event?Flutter BLoC - 如何将参数传递给事件?
【发布时间】: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) { ?当然

标签: events flutter dart parameters bloc


【解决方案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
猜你喜欢
  • 2020-09-19
  • 2021-09-24
  • 2021-04-05
  • 2018-08-19
  • 2020-08-06
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多