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?