firebase - 无法通过 StreamProvider 获取 Firebase 用户
问题描述
我在我的第一个小部件中注册了 firebase 用户,并在登录第二个屏幕后尝试访问它。我得到的结果是空的,我得到了这个错误:Could not find the correct provider above this widget.
经过研究,我仍然找不到原因。我猜上下文可能在某个地方,但仍然无法弄清楚为什么。
这是我的第一个小部件:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Chat App',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blueGrey,
visualDensity: VisualDensity.adaptivePlatformDensity,
inputDecorationTheme: InputDecorationTheme(
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20),
)),
buttonTheme: ButtonThemeData(buttonColor: Colors.blueGrey)),
home: MultiProvider(providers: [
StreamProvider<FirebaseUser>.value(
value: FirebaseAuth.instance.onAuthStateChanged,
)
], child: SignInPage()));
}
}
这是我的第二个屏幕的片段:
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)),
child: ListTile(
leading: Container(
color: Colors.white,
child: Image.network(
'https://cdn4.iconfinder.com/data/icons/new-google-logo-2015/400/new-google-favicon-512.png',
width: 25,
height: 25,
),
),
title: Text(
'Sign In with Google',
style: TextStyle(
color: Colors.white, fontWeight: FontWeight.bold),
),
),
onPressed: () async {
setState(() {
_progressBarActive = true;
});
FirebaseUser user =
Provider.of<FirebaseUser>(context, listen: false);
await signInWithGoogle().then((value) {
print(value.uid);
// print(user.uid);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => ChatRoom()));
}).whenComplete(() => {
setState(() {
_progressBarActive = false;
})
});
},
),
解决方案
MultiProvider
与交换MaterialApp
:
return MultiProvider(
providers: [
StreamProvider<FirebaseUser>.value(
value: FirebaseAuth.instance.onAuthStateChanged,
)
],
child: MaterialApp(
home: SignInPage(),
),
);
推荐阅读
- c# - 程序停止时如何确保c#完成写入文件?
- php - 将获取值结转形成的问题
- php - 如何锁定数据库的原始数据,直到另一个操作
- r - sapply(), 带有 unique() 和条件 - R
- android-studio - 没有找到 int io.netty.internal.tcnative.Library.aprMajorVersion() 的实现
- java - 如何检查字节数组是protobuf序列化字节数组还是普通字节数组?
- bash - Bash:如何用分隔符分割一行并将每个元素打印在新行上?
- python - ColumnTransformer 在 sklearn 中尝试 fit_transform 管道时生成 TypeError
- sql - 导致 SSRS 报告添加额外空格的 SQL 数据类型问题
- cassandra - Cassandra 不会在目录被自动标记为只读的 Windows 中启动