如何解决对 null 的 UID 调用和提供程序无法通过 TypeError 传递数据“FirebaseUser”类型不是“String”类型的子类型
我尝试获取用户数据以确定管理员角色并将其传递给 Future Builder。根据管理员的不同,结果将决定哪个小部件是否可用。
floatingActionButtonLocation:
FloatingActionButtonLocation.centerDocked,floatingActionButton:
FutureBuilder(
future: _getProfileData(user,authNotifier),builder: (context,snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
_isAdmin = snapshot.data['isAdmin'] ?? false;
}
return Container(
child: Column(
children: <Widget>[
adminFeature(),]
));
}),
下面的小部件提供有关用户的信息。
Widget adminFeature() {
if(_isAdmin == true) {
return
FloatingActionButton(
backgroundColor:CompanyColors.blue[500],child: const Icon(Icons.add),onpressed: () {
var foodNotifier = Provider.of<FoodNotifier>(context,listen: false);
foodNotifier.currentFood = null;
Navigator.of(context).push(
MaterialPageRoute(builder: (BuildContext context) {
return FoodForm(
isUpdating: false,);
}),);
});
} else {
return Container();
}
}
_getProfileData(User user,AuthNotifier authNotifier) async {
final uid = await Provider.of<AuthNotifier>(context,listen: false).getCurrentUser();
await Firestore.instance
.collection('Users')
.document(uid)
.get().then((result) {
user.isAdmin = result.data['isAdmin'];
});
}
下面是提供者。它适用于所有应用程序,但我无法获取用户数据并将其传递给小部件。
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => AuthNotifier(),),ChangeNotifierProvider(
create: (context) => FoodNotifier(),ChangeNotifierProvider(create: (context) => ThemeProvider(isLightTheme: false)),ChangeNotifierProvider(create: (context) => UserxProvider()),ChangeNotifierProvider(create: (context) => UsersProvider()),],child: MyApp());
}
下面提到了通知程序:
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
Future<String> getCurrentUID() async {
return (await _firebaseAuth.currentUser()).uid;
}
// GET CURRENT USER
Future getCurrentUser() async {
return await _firebaseAuth.currentUser();
}
解决方法
在您的 _getProfileData
方法中,您应该更改以下内容:
await Provider.of(context,listen: false)
到
await Provider.of<UserxProvider>(context,listen: false)
// or UsersProvider,whichever you're trying to call
问题在于,当您在未指定所需模型(即类型)的情况下调用 Provider
时,它会变为 Provider.of<dynamic>
,因此您会收到该错误消息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。