我正面临着一些问题,从完成的行动发射状态。我想做以下流程:
1.点击登录按钮;
1.通过登录过程;
1.登录成功后,导航到某个页面;
问题是Blocker的侦听器中的代码永远不会到达,即使状态有效(在LoginCubit中,我在发出LoginState.success()后进行了一些检查,如果state == LoginState.success()返回true;)
我还使用冻结库来生成状态。我的问题是--我的实现是否遗漏了什么?
这是我的腕尺:
class LoginCubit extends CubitBase<LoginState>{
LoginCubit() : super(const LoginState.created());
Future<void> runLoginFlow() async {
final isAuthorized = await startAuth();
if(isAuthorized){
emit(const LoginState.success());
}
emit(const LoginState.failed(failedLogin));
}
Future<bool> startAuth() async {
//doing some stuff
}
}
状态(使用冻结生成):
@freezed
class LoginState with _$LoginState{
const factory LoginState.created() = _Created;
const factory LoginState.failed(String message) = _Failed;
const factory LoginState.success() = _Success;
}
我的UI:
@RoutePage()
class LoginPage extends StatefulWidget {
const LoginPage({super.key});
@override
State<LoginPage> createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
@override
Widget build(BuildContext context) {
return BlocProvider<LoginCubit>(
create: (context) => LoginCubit(),
child: Scaffold(
body: BlocListener<LoginCubit, LoginState>(
listener: (context, state) {
if(state == LoginState.success()){
AutoRouter.of(context).navigate(NextPageRoute())
}
},
bloc: LoginCubit(),
child: _buildContent(context),
),
),
);
}
}
提前感谢所有有用的建议!
1条答案
按热度按时间brccelvz1#
仅当您希望提供一个无法通过BlocProvider和当前BuildContext访问的块时才指定该块。删除块侦听器中的
bloc: LoginCubit()
字段,因为您在上面提供了它。