Flutter:仅在通过电子邮件验证用户时才显示主页时,如何防止奇怪的导航?

问题描述

预期流程:仅在用户验证其电子邮件时显示主页。 实际情况:用户可以弹出导航堆栈以显示主页。

我正在使用Firebase来处理我的身份验证流程,当前正在使用StreamBuilder在应用程序的根目录上显示登录页面或主页,具体取决于用户是否经过验证且不为空。

//create user object based on Firebase User
  UserApp _userFromFirebaseUser(User user) {
    return user != null ? UserApp(uid: user.uid,isVerified: user.emailVerified):null;
  }

//userapp type class
class UserApp {
  final String uid;
  final bool isVerified;
  UserApp({this.isVerified,this.uid});
}

然后我有一个StreamBuilder驻留在main.dart文件的顶部:

class AuthWidgetBuilder extends StatelessWidget {
  const AuthWidgetBuilder({Key key,@required this.builder}) : super(key: key);
  final Widget Function(BuildContext,AsyncSnapshot<UserApp>) builder;

  @override
  Widget build(BuildContext context) {
    final authService = Provider.of<AuthService>(context,listen: false);
    return StreamBuilder<UserApp>(
        stream: authService.onAuthStateChanged,builder: (context,snapshot) {
          final UserApp user = snapshot.data;
          //only show home page if user is non null and also if they verified their email.
          if (user != null && authService.currentUser().isVerified == true) {
            return MultiProvider(
              providers: [
                Provider<UserApp>.value(value: user),],child: builder(context,snapshot),);
          }
          return builder(context,snapshot);
        });
  }
}

class AuthWidget extends StatelessWidget {
  const AuthWidget({Key key,@required this.userSnapshot}) : super(key: key);
  final AsyncSnapshot<UserApp> userSnapshot;

  @override
  Widget build(BuildContext context) {
    if (userSnapshot.connectionState == ConnectionState.active) {
      return userSnapshot.hasData ? HomePage() : LandingPage();
    }
    return Scaffold(
      body: Center(
        child: CircularProgressIndicator(),),);
  }
}

然后这是我的main.dart文件,在小部件树的顶部带有StreamBuilder和AuthService类:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Provider<AuthService>(
        create: (_) => AuthService(),child: AuthWidgetBuilder(builder: (context,userSnapshot) {
          return MaterialApp(
            home: AuthWidget(userSnapshot: userSnapshot),);
        }));
  }

即使我尚未通过电子邮件验证用户,我怎么能弹出导航堆栈以显示主页?我需要在代码中进行哪些更改,以确保用户在验证电子邮件后只能看到主页?我有什么资源可以用来更好地理解这些概念?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)