【问题标题】:snapshot.data.emailVerified not changing the screen in realtime after the email has been verified by user flutter firebasesnapshot.data.emailVerified 在用户颤振 firebase 验证电子邮件后不会实时更改屏幕
【发布时间】:2021-06-07 11:24:12
【问题描述】:

我想在用户验证电子邮件之后实时导航到主屏幕 用户已验证他们的电子邮件,它仍保留在 VerifyEmailScreen 上。

到目前为止,我只能在用户注销或登录时实时导航到 LoginScreen 和 HomeScreen

我尝试在 3 之后重新加载给用户,但它仍然在 EmailVerification 屏幕 .....请帮忙

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Timer timer;
  @override
  void initState() {
    timer = Timer(Duration(seconds: 3), () {
      FirebaseAuth.instance.currentUser.reload();
    });
    super.initState();
  }

  @override
  void dispose() {
    timer.cancel();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      child: MaterialApp(
          darkTheme: ThemeData(
            brightness: Brightness.dark,
          ),
          themeMode: ThemeMode.dark,
          debugShowCheckedModeBanner: false,
          home: LandingPage()
      ),
      providers: [
        ChangeNotifierProvider(create: (_)=>FirebaseMethods()),
        ChangeNotifierProvider(create: (_)=>ProfileScreenUtils())
      ],
    );
  }
}

class LandingPage extends StatelessWidget {

  //final FirebaseRepository _repository = FirebaseRepository();
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<User>(
      stream: FirebaseAuth.instance.authStateChanges(),
      builder: (context, AsyncSnapshot<User> snapshot) {
            if (snapshot.hasData) {
           // print("USER ID IF USER IS NOT NULL :  " + user.uid);
              if(snapshot.data.emailVerified)
                {
                  return HomeScreen();
                }
              else
                {
                  return VerifyEmailScreen();
                }
            }
            else if(snapshot.hasError)
              {
                return CircularProgressIndicator();
              }
            else {
              //print("USER ID IF THE USER IS NULL :  " + user.uid);
              return LoginScreen();
            }
      },
    );
  }
}

【问题讨论】:

    标签: firebase flutter dart firebase-authentication stream-builder


    【解决方案1】:

    当用户验证电子邮件时,不会调用 authStateChanges。 您应该调用FirebaseAuth.instance.currentUser.reload(); 来获取用户的刷新数据。 您可以使用轮询请求来执行此操作,例如每分钟:

    Timer timer = Timer(Duration(seconds: 1), () {
      FirebaseAuth.instance.currentUser.reload();
    });
    

    或者您可以添加一个按钮,用户在验证电子邮件时单击该按钮。

    【讨论】:

    • 嘿,我已经按照您所说的进行了更改,但即使在刷新用户数据后,它仍然在 VerifyEmailScreen
    • 您是否尝试过虚假注册,例如使用 mailinator.com,并尝试验证电子邮件地址?
    猜你喜欢
    • 2019-07-02
    • 2017-02-23
    • 1970-01-01
    • 2021-05-10
    • 2016-10-20
    • 2019-01-07
    • 1970-01-01
    • 2019-04-03
    • 2018-02-13
    相关资源
    最近更新 更多