我一直在开发一个应用程序,这里的基本结构看起来像。有一个 MultiblocProvider。有两条路线。
Route generateRoute(RouteSettings routeSettings) {
switch (routeSettings.name) {
case BASE_ROUTE:
return MaterialPageRoute(
builder: (_) => BlocProvider(
create: (context) => SignupCubit(),
child: SignUp(),
),
);
case OTP_VERIFY:
return MaterialPageRoute(
builder: (_) => MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => VerifyCubit(),
),
BlocProvider(
create: (context) => SignupCubit(),
),
],
child: Verify(),
),
);
default:
return MaterialPageRoute(builder: (_) => Broken());
}
}
在 OTP_Verify 路由中,我可以访问两个 Cubit,VerifyCubit() 和 SignupCubit()。
现在,我正在做的是,有两个屏幕,一个是注册,另一个是验证。在注册屏幕中,如果状态为SignUpSuccess,我正在导航以验证 OTP 屏幕。
class SignUp extends StatelessWidget {
const SignUp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
double deviceHeight = MediaQuery.of(context).size.height;
return Scaffold(
body: BlocListener<SignupCubit, SignupState>(
listener: (context, state) {
if (state is SignUpError) {
showToast("Please try again");
} else if (state is SignupSuccess) {
print(state.email);
Navigator.pushNamed(context, OTP_VERIFY); <--- Here
} else if (state is EmailValidationError) {
showToast("Not valid email");
}
},
child: SafeArea(
bottom: false,
child: CustomScrollView(
slivers: [
.... rest of code....
在 VerifyOTP 屏幕中,我正在尝试读取当前 SignUpCubit 的状态
....other code....
ElevatedButton(
style: ElevatedButton.styleFrom(
minimumSize: const Size.fromHeight(45),
primary: Theme.of(context).primaryColor),
onPressed: () {
final signUpState = BlocProvider.of<SignupCubit>(context).state; <--- Here
if (signUpState is SignupSuccess) {
print(signUpState.email);
}
BlocProvider.of<VerifyCubit>(context).setOtp(otp);
},
child: const Text('Verify'),
),
.....other code.....
这是我的注册状态
part of 'signup_cubit.dart';
@immutable
abstract class SignupState {}
class SignupIntial extends SignupState {}
class SignUpError extends SignupState {}
class SignupSuccess extends SignupState {
final String email;
SignupSuccess({required this.email});
}
class EmailValidationError extends SignupState {}
现在我假设我已经SignupSuccess
在第一页发出了,如果我通过 MultiBlocProvider 提供了该状态,我可以在第二页中阅读它。但它没有发生。我得到了SignUpIntial
。
有人可以帮忙吗,我可能做错了什么,或者我的方法是否有效?