我是Flutter Web的新手,一直在为这个问题而烦恼。这正是我在移动设备上对用户进行身份验证的方式,但由于某种原因,当我在flutter web上使用热重载时,用户身份验证会丢失并返回null,并显示CircularProgressIndicator(CPI(。
它为什么要这么做?如果调用了null,那么它肯定会显示LoginPage((——当页面最初加载时就是这样——但一旦我热加载,它就会返回null和CPI。
此外,我添加了一个打印语句来帮助我跟踪用户呼叫,并注意到每次导航到新页面时都会打印用户id,并想知道为什么会这样?
我想实现的目标:
- 如果snapshot.data==null,则登录页将用户引导到登录页
- 如果snapshot.data!=null
- 如果ConnectionState.waiting,则返回循环进度指示符
-
修复如上所述的错误
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(), ), ); }, ); } }
我是通过F5而不是flutter run-d chrome运行程序的通过F5运行程序可以按下VScode上的热重新加载按钮,但重要的是,Flutter Web上目前不提供热重新加载。
我相信,这在一定程度上回答了我的问题。
您正在将流传递到无状态小部件中。将无状态小部件更改为有状态小部件,这将解决您的问题。