问题描述
我正在尝试根据来自 firebase 的用户身份验证状态进行导航。但是当我尝试这样做时,我没有被导航到 LoginPage 或 HomePage,我被卡在了启动画面上。我需要根据 Riverpod 的身份验证状态进行导航。
我的 AuthStateNotifier 类
@injectable
class AuthStateNotifier extends StateNotifier<AuthStates> {
AuthStateNotifier(this._authFacade) : super(const AuthStates.initial());
final IAuthFacade _authFacade;
Future handleEvents(AuthEvents events) async {
return events.map(
authCheckRequested: (event) async {
final userOption = await _authFacade.getSignedInUser();
state = userOption.fold(() => const AuthStates.unAuthenticated(),(a) => const AuthStates.authenticated());
},signedOut: (event) async {
await _authFacade.signOut();
state = const AuthStates.unAuthenticated();
},);
}
}
我的 AuthEvents 类
@freezed
class AuthEvents with _$AuthEvents {
const factory AuthEvents.authCheckRequested() = AuthCheckRequested;
const factory AuthEvents.signedOut() = SignedOut;
}
我的 AuthStates 类
@freezed
class AuthStates with _$AuthStates {
const factory AuthStates.initial() = Initial;
const factory AuthStates.authenticated() = Authenticated;
const factory AuthStates.unAuthenticated() = UnAuthenticated;
}
我的 MaterialApp
class AppWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
context.read(authStateProvider).handleEvents(AuthEvents.authCheckRequested());
return MaterialApp(
debugShowCheckedModeBanner: false,theme: ThemeData.light().copyWith(
primaryColor: primaryColor,inputdecorationTheme: InputdecorationTheme(
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8.0),borderSide: BorderSide(color: primaryColor),),focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8.0),borderSide: BorderSide(color: primaryColor,width: 2),errorMaxLines: 1,title: 'Share Fest',home: SplashScreen(),);
}
}
我的启动画面
final authStateProvider = StateNotifierProvider<AuthStateNotifier>((ref) {
return getIt<AuthStateNotifier>();
});
class SplashScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer(
builder: (context,watch,child) {
context.read(authStateProvider.state).map(initial: (_) {
print('init');
},authenticated: (_) {
Navigator.push(context,MaterialPageRoute(builder: (context) => HomePage(),));
},unAuthenticated: (_) {
Navigator.push(context,MaterialPageRoute(builder: (context) => LoginForm(),));
});
return Scaffold(
body: Container(
child: Center(
child: CircularProgressIndicator(),));
},);
}
}
为什么我没有被导航到 LoginPage
或 HomePage
? statenotifier
返回 AuthEvents.unAuthenticated()
,但即使如此我也无法导航。
请给出解决方案。提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)