flutter - 没有为“用户”类型颤振火库定义方法“then”
问题描述
我正在开发一些用户具有管理员角色而其他用户具有用户角色的应用程序。下面的类检查分配给用户的角色并将他们引导到适当的屏幕。问题是我不断收到此错误未为“用户”类型定义“然后”方法。我浏览了该平台上发布的一些文档,并在 pubspec.yaml 中增加了我的包的版本,以确保所有内容都已更新,但问题仍然存在。欢迎任何帮助
class UserManagement {
Widget handleAuth() {
return StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (BuildContext context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data.uid);
return AdminDashboard();
}
return LoginScreen();
},
);
}
final auth = FirebaseAuth.instance.currentUser;
authorizeAdmin(BuildContext context) {
auth.then((user) {
FirebaseFirestore.instance
.collection('users')
.where('uid', isEqualTo: user.uid)
.get()
.then((docs) {
if (docs.docs[0].exists) {
if (docs.docs[0].data()['role'] == 'admin') {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => AdminDashboard()),
);
} else {
print('Access Denied');
}
}
});
});
}
}
解决方案
您不需要 .then 语句。获取与新版本User
的firebase同步,因此您只需从 获取用户FirebaseAuth.instance.currentUser;
并在您的方法中使用它。例如,在您的方法中,它看起来像:
final user = FirebaseAuth.instance.currentUser;
authorizeAdmin(BuildContext context) {
FirebaseFirestore.instance
.collection('users')
.where('uid', isEqualTo: user.uid)
.get()
.then((docs) {
if (docs.docs[0].exists) {
if (docs.docs[0].data()['role'] == 'admin') {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => AdminDashboard()),
);
} else {
print('Access Denied');
}
}
});
});
}
推荐阅读
- postgresql - Postgresql 查询每个范围内的第一个和最后一个
- http - HTTP 上 jpeg 图像的权威“内容类型”是什么?
- python - 按目录中的方式列出音频文件
- r - R ggridges plot - 显示 y 轴刻度和标签
- java - 我的 getBindingAdapterrPosition 只返回 -1
- yaml - 如何仅在活动 LTS 甚至当前版本上运行 GitHub 工作流?
- php - 如果子域托管在不同的服务器上,子域上的 SSL 证书是否需要来自同一颁发者?
- reactjs - React JS“npm start”显示无法编译 web-vitals
- javascript - 如何在一个视频结束时连续播放来自不同网站的嵌入多个视频
- python - PyQt5中的窗口切换和线程