Flutter Web - 身份验证。热重载时用户 ID 丢失

Gar*_*all 5 firebase-authentication flutter-web

我对 Flutter Web 非常陌生,并且一直在研究这个问题。这正是我在移动设备上对用户进行身份验证的方式,但是由于某种原因,当我在 flutter web 上使用热重载时,用户身份验证丢失并返回 null 并显示 CircularProgressIndicator(CPI)。

为什么要这样做?如果 null 被调用,那么它肯定应该显示 LoginPage() - 这是在页面最初加载时执行的 - 但是一旦我热重新加载它就会返回 null 和 CPI。

此外 - 我添加了一个打印语句来帮助我跟踪用户调用 - 并且注意到每次我导航到一个新页面时都会打印用户 ID 并想知道这是为什么?

我想达到的目标:

  1. 如果snapshot.data == null,登陆页面将用户定向到登录页面
  2. 如果 snapshot.data != null,登陆页面会将用户定向到主页
  3. 如果 ConnectionState.waiting,则返回一个循环进度指示器
  4. 如上所述修复错误

    class Landing extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    final auth = Provider.of<UserRepository>(context, listen: false);
    return StreamBuilder(
      stream: auth.onAuthStateChanged,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.active) {
          User user = snapshot.data;
          print(user);
          return user == null ? LoginPage() : HomePage();
        } else
          return Scaffold(
            body: Center(
              child: CircularProgressIndicator(),
            ),
          );
      },
    );
     }
      }
    
    Run Code Online (Sandbox Code Playgroud)

小智 -1

您正在将流传递到无状态小部件中。将无状态小部件更改为有状态小部件,这将解决您的问题。