【发布时间】:2020-12-11 09:19:28
【问题描述】:
我有以下应用程序,我使用MultiProvider 提供FirebaseUser 流。
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<Position>(
create: (_) => LocationService().location,
),
StreamProvider<FirebaseUser>(
create: (_) => AuthenticationService().user,
),
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: "title",
theme: ThemeData(
primarySwatch: Colors.indigo,
accentColor: Colors.indigoAccent,
),
home: HomeScreen(),
);
}
}
流生成如下:
class AuthenticationService {
Stream<FirebaseUser> get user {
return FirebaseAuth.instance.onAuthStateChanged;
}
}
当用户使用Firebase 登录并在HomeScreen 中访问流时,我第一次得到null 的值。从第二次开始,它工作正常。
class HomeScreenState extends State<HomeScreen> {
FirebaseUser u;
@override
void initState() {
u = Provider.of<FirebaseUser>(context, listen: false);
print(u);
super.initState();
}
}
如何确保Provider.of 返回有效值(即null 仅在用户实际未登录时返回non-null 值在登录时)或某种undefined 值如果值未知?
【问题讨论】:
-
如果用户登录,您可以使用共享首选项来存储布尔值。查看pub.dev/packages/shared_preferences
标签: firebase flutter firebase-authentication provider