Flutter 如何在颤振群中调用并行请求
我在Flutter 如何在颤振群中调用并行请求,flutter,bloc,flutter-bloc,Flutter,Bloc,Flutter Bloc,我在flatter中使用BLoC 一旦创建了BLoC实例,我就要调用API。为了实现这一点,我在构造函数中添加了以下代码 class MyBloc extends Bloc<MyBlocEvent, MyBlocState> { MyBloc() { _repository = MyAccountRepository(); _myAccountList = List(); add(API1CallEevent());
flatter
中使用BLoC
一旦创建了BLoC实例,我就要调用API。为了实现这一点,我在构造函数中添加了以下代码
class MyBloc extends Bloc<MyBlocEvent, MyBlocState> {
MyBloc() {
_repository = MyAccountRepository();
_myAccountList = List();
add(API1CallEevent());
add(API2CallEevent());
}
...
类MyBloc扩展了Bloc{
MyBloc(){
_repository=MyAccountRepository();
_myAccountList=List();
添加(api1callevent());
添加(api2callevent());
}
...
以及事件处理部分
...
@override
Stream<MyBlocState> mapEventToState(MyBlocEvent event) async* {
if (event is API1CallEevent) {
var ap1 =
await _repository.getAPI1();
----
----
}else if (event is API2CallEevent) {
var api2 =
await _repository.getAPI2();
----
---
}
}
。。。
@凌驾
流mapEventToState(MyBloceEvent事件)异步*{
if(事件为API1CallEevent){
var ap1=
wait_repository.getAPI1();
----
----
}else if(事件为API2CallEevent){
api2变种=
wait_repository.getAPI2();
----
---
}
}
我面临的问题是API调用不是并行执行的,这意味着在API1CallEvent
完成后,API2CallEvent
执行…
有什么方法可以并行执行吗?在我看来,并行执行两个API调用并同时期望结果与BLoC没有多大关系。
如果每个bloc事件触发一组特定的操作,并且事件彼此解耦,则效果更好 另外;
与其在init块内引发事件,不如在提供程序内初始化Bloc
BlocProvider<AuthBloc>(
lazy: false,
create: (context) => AuthBloc(
userRepository: _userRepository,
)..add(AppStartedEvent()),
),
BlocProvider(
懒惰:错,
创建:(上下文)=>AuthBloc(
userRepository:\u userRepository,
)…添加(AppStartedEvent()),
),
这会在Bloc初始化后立即生成一个事件。在我看来,并行执行两个API调用并同时期望结果与Bloc没有多大关系。
如果每个bloc事件触发一组特定的操作,并且事件彼此解耦,则效果更好 另外;
与其在init块内引发事件,不如在提供程序内初始化Bloc
BlocProvider<AuthBloc>(
lazy: false,
create: (context) => AuthBloc(
userRepository: _userRepository,
)..add(AppStartedEvent()),
),
BlocProvider(
懒惰:错,
创建:(上下文)=>AuthBloc(
userRepository:\u userRepository,
)…添加(AppStartedEvent()),
),
这会在Bloc初始化后立即生成一个事件。A基本上是一个状态机。它不执行并行操作,这不是它构建的目的。它是按顺序从一个状态进入另一个状态。在执行此操作时,它可以在内部并行操作,但不能(或不应该)并行接收输入
如果希望一个事件并行执行多个等待的操作,可以执行以下操作:
@override
Stream<MyBlocState> mapEventToState(MyBlocEvent event) async* {
if (event is CallTheAPIsEvent) {
final results = await Future.wait([
_repository.getAPI1(),
_repository.getAPI2()
]);
// do something with the results
yield ApisHaveBeenCalledState();
}
// more event handling
}
@覆盖
流mapEventToState(MyBloceEvent事件)异步*{
如果(事件被称为ApisEvent){
最终结果=等待未来。等待([
_repository.getAPI1(),
_repository.getAPI2()
]);
//对结果做点什么
产量apiswavebeencalledstate();
}
//更多事件处理
}
A基本上是一个状态机。它不执行并行操作,这不是它构建的目的。它是从一个状态依次进入另一个状态。在这样做时,它可以在内部并行操作,但它不能(或不应该)并行接收输入
如果希望一个事件并行执行多个等待的操作,可以执行以下操作:
@override
Stream<MyBlocState> mapEventToState(MyBlocEvent event) async* {
if (event is CallTheAPIsEvent) {
final results = await Future.wait([
_repository.getAPI1(),
_repository.getAPI2()
]);
// do something with the results
yield ApisHaveBeenCalledState();
}
// more event handling
}
@覆盖
流mapEventToState(MyBloceEvent事件)异步*{
如果(事件被称为ApisEvent){
最终结果=等待未来。等待([
_repository.getAPI1(),
_repository.getAPI2()
]);
//对结果做点什么
产量apiswavebeencalledstate();
}
//更多事件处理
}
。我还对..为什么需要将存储库实例..传递给bloc构造函数而不是在bloc中创建..感到困惑..我在许多地方看到了这些类型的示例..不理解..为什么需要这样做。实际上,您不必通过提供程序传递存储库,但如果有必要,您可以这样做。例如,当您想要初始化时在main
中初始化存储库,然后将其传递给相关的BLoC其他示例,当您只想在main
中初始化存储库一次,然后使其在多个BLoC中可用时。感谢您获得了它…我们在BLoC中是否可以调用并行调用…在我的情况下,每个事件都有特定的用例..这是创建BLoC后我想要做的。不幸的是y我没有关于并行进行API调用的答案。但正如我在回答中所说的,我认为它与BLoC无关…我还对…为什么存储库实例…需要传递给BLoC构造函数而不是在BLoC中创建..我在很多地方看到了这些类型的示例..不理解..为什么需要它。实际上,您不必通过提供者传递存储库,但如果有必要,您可以这样做。例如,当您想在main
中初始化存储库,然后将其传递给相关的bloc其他示例时,当您想在main
中只初始化存储库一次,然后使其在多个bloc中可用时。谢谢您得到了它…我们有什么叫pa的吗在我的例子中,每个事件都有特定的用例。一旦创建了BLoC,我就想这样做。不幸的是,我没有关于并行进行API调用的答案。但是正如我在回答中所说的,我认为它与BLoC无关。