【发布时间】:2020-09-13 15:06:04
【问题描述】:
我正在尝试根据身份验证状态创建一个简单的导航到 Firebase,但出于某种原因
Provider.of<FirebaseUser>(context) 在小部件构建方法中始终返回 null 作为第一个值。所以我的应用程序总是导航到身份验证屏幕,然后从 Firebase 获取真实的用户状态。
我在这里想念什么?
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((_) => runApp(App()));
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamProvider<FirebaseUser>.value(
//value of user always corresponds to the right auth status
value: FirebaseAuth.instance.onAuthStateChanged.map((FirebaseUser user) {
AuthService.instance.user = user;
return user;
}),
child: MaterialApp(
title: 'Title',
theme: lightTheme,
home: LandingScreen(),
),
);
}
}
class LandingScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
//Even though the user is logged in it returns null for the first build() call
final user = Provider.of<FirebaseUser>(context);
return AnimatedSwitcher(
duration: const Duration(milliseconds: 3000),
transitionBuilder: ...,
child: user != null ? const MainScreen() : const AuthScreen(),
);
}
}
【问题讨论】:
-
你既没有初始值也没有值参数。
-
谢谢。调用
await FirebaseAuth.instance.currentUser()并将其值传递给 StreamProvider initialData 对我有用。 StreamProvider(不带 initialData 参数)是否总是返回 null 作为其第一个值? -
请阅读答案
-
觉得有用请点赞和点赞
标签: flutter dart firebase-authentication flutter-provider