在同一页面中使用两个 BLoC,并在第二个 BLoC 中传递第一个 BLoC 的状态



我已经学习Flutter中的Bloc模式几天了。

  1. 我有一个页面,我需要在其中生成OTP并验证它。

  2. 有两个API(generateOpp、validateOpp(两个实现了此功能。

  3. 在generateOpp API响应中,我需要保存一个密钥,即uniqueIdentifier。

  4. 然后我需要将上面的uniqueIdentifier和Otp值(用户输入(传递给validateOpp API。

  5. 我创建了两个独立的BLOC。。。生成TPBloc,验证TPBloc。

  6. 使用MultiBLoC提供程序我正在使用这两个BLoC。

Navigator.of(context).push(
MaterialPageRoute<LandingPage>(
builder: (_) => MultiBlocProvider(
providers: [
BlocProvider<GenerateOtpBloc>(
create: (context) => GenerateOtpBloc(GenerateOtpInitial())
),
BlocProvider<ValidateOtpBloc>(
create: (context) => ValidateOtpBloc(ValidateOtpInitial())
)
],
child: OtpPage(),
),
),
);
  1. 我能够调用API并在我的UI页面中获得API响应

但是如何保存我在generateOpp中获得的uniqueIdentifier值,以及如何在第二个API中传递这个uniqueIdentifier?

我想用setState((来设置uniqueIdentifier的状态。但我收到一个错误。

child: BlocBuilder<GenerateOtpBloc, GenerateOtpState>(
builder: (context, state) {
if (state is GenerateOtpLoading) {
print("**********GenerateOtpLoading*************");
return buildLoading();
} else if (state is GenerateOtpLoaded) {
print("**********GenerateOtpLoaded*************");
***//But Im getting error here.***
***setState(() {
uniqueIdentifier: state.uniqueIdentifier
});***
return buildGenerateOtpWidget(context, state.generateOtpRes);
} else {
print("**********Else*************");
print(state);
}
},
),
),

generateOpp和validateOpp请求和响应完全不同。。。这就是为什么我使用了两种不同的BLOC。

向我建议处理这个问题的最佳方法?

为什么要使用两个bloc来处理它?您可以在一个bloc中使用两个event。这是我在OTP登录项目中的代码,类似于你的项目:

class LoginBloc extends Bloc<LoginEvent, LoginState> {
FirstApiClass _firstApi;
SecondApiClass _secondApi;
LoginBloc() : super(Loading()) {
_firstApi = FirstApiClass();
_secondApi = SecondApiClass();
}
@override
Stream<LoginState> mapEventToState(
LoginEvent event,
) async* {
if (event is GenerateOtp) {
// Use FirstApiClass
} else if (event is ValidateOtpBloc) {
// Use SecondApiClass
}
}
}

然而,在这种情况下,您也可以使用一个Api类!我希望它对你有用。

相关内容

  • 没有找到相关文章

最新更新