如何根据用户角色显示类别,Firebase Flutter
How to display categories based on user role, Firebase Flutter
我有两种用户“d”和“p”。
对于他们来说,有一个特殊的集合 - roles,它存储了用户的 uid 和他的 role.
我正在尝试显示角色,并根据角色显示相应的类别。
但是,我收到以下错误。
The argument type 'Future<QuerySnapshot<Object?>>? Function(QuerySnapshot<Map<String, dynamic>>)' can't be assigned to the parameter type 'FutureOr<QuerySnapshot<Object?>> Function(QuerySnapshot<Map<String, dynamic>>)' because 'Future<QuerySnapshot<Object?>>?' is nullable and 'Future<QuerySnapshot<Object?>>' isn't.
我有哪些替代方案可以实现相同的功能?该操作发生在一个函数中,然后在 FutureBuilder 中调用和处理该函数。
getCategoryData(String _collection, {bool forMap = false}) {
FirebaseFirestore.instance.collection('roles').where('uid', isEqualTo: FirebaseAuth.instance.currentUser!.uid).get().then((value){
for (var element in value.docs) {
if(forMap == false && element.data()['role'] == 'd'){
Future<QuerySnapshot> _snapshot = FirebaseFirestore.instance.collection(_collection).where('for_d', isEqualTo: true).get();
return _snapshot;
}else if((forMap == false && element.data()['role'] == 'p') || (forMap == true)){
Future<QuerySnapshot> _snapshot = FirebaseFirestore.instance.collection(_collection).get();
return _snapshot;
}
}
});
}
这里的问题是,您的 getCategoryData
函数有可能 return 一个空对象。
如果遍历所有文档并且其中 none 匹配给定的两个 if 条件,默认情况下 return 为空值。
您的数据库设计可能永远不会发生这种情况,但编译器并不知道。
您可以通过 return在 for 循环之后输入一个空的 future 来解决这个问题。编译器将不再显示此错误。虽然我希望你已经很好地设计了你的数据库,这种情况永远不会发生。
我有两种用户“d”和“p”。
对于他们来说,有一个特殊的集合 - roles,它存储了用户的 uid 和他的 role.
我正在尝试显示角色,并根据角色显示相应的类别。
但是,我收到以下错误。
The argument type 'Future<QuerySnapshot<Object?>>? Function(QuerySnapshot<Map<String, dynamic>>)' can't be assigned to the parameter type 'FutureOr<QuerySnapshot<Object?>> Function(QuerySnapshot<Map<String, dynamic>>)' because 'Future<QuerySnapshot<Object?>>?' is nullable and 'Future<QuerySnapshot<Object?>>' isn't.
我有哪些替代方案可以实现相同的功能?该操作发生在一个函数中,然后在 FutureBuilder 中调用和处理该函数。
getCategoryData(String _collection, {bool forMap = false}) {
FirebaseFirestore.instance.collection('roles').where('uid', isEqualTo: FirebaseAuth.instance.currentUser!.uid).get().then((value){
for (var element in value.docs) {
if(forMap == false && element.data()['role'] == 'd'){
Future<QuerySnapshot> _snapshot = FirebaseFirestore.instance.collection(_collection).where('for_d', isEqualTo: true).get();
return _snapshot;
}else if((forMap == false && element.data()['role'] == 'p') || (forMap == true)){
Future<QuerySnapshot> _snapshot = FirebaseFirestore.instance.collection(_collection).get();
return _snapshot;
}
}
});
}
这里的问题是,您的 getCategoryData
函数有可能 return 一个空对象。
如果遍历所有文档并且其中 none 匹配给定的两个 if 条件,默认情况下 return 为空值。
您的数据库设计可能永远不会发生这种情况,但编译器并不知道。
您可以通过 return在 for 循环之后输入一个空的 future 来解决这个问题。编译器将不再显示此错误。虽然我希望你已经很好地设计了你的数据库,这种情况永远不会发生。