flutter - Flutter:NoSuchMethodError:参数不匹配的闭包调用:函数'Global.models。'
问题描述
在fireship.io的 Flutter Firebase 课程的帮助下,我正在构建自己的 Flutter 应用程序。课程资料库在这里。
但是,由于放弃了多个流 - 在开始课程之前我自己尝试过 - 支持具有匿名类型的类,因此我收到以下错误消息并且无法理解原因。
目标: 我想要一个包含来自任何 Firestore 集合的所有文档的 Stream,在本例中为“hochschulen”。集合存在并充满数据。所有字段都是字符串。
预期: 没有错误消息
实际结果:
flutter: The following assertion was thrown:
flutter: An exception was throw by _MapStream<QuerySnapshot, List<University>> listened by
flutter: StreamProvider<List<University>>, but no `catchError` was provided.
flutter:
flutter: Exception:
flutter: NoSuchMethodError: Closure call with mismatched arguments: function 'Global.models.<anonymous
flutter: closure>'
flutter: Receiver: Closure: (dynamic, String) => University
flutter: Tried calling: Global.models.<anonymous closure>(data: _LinkedHashMap len:10)
flutter: Found: Global.models.<anonymous closure>(dynamic, String) => University
flutter:
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
我努力了:
这是我要加载一些数据的小部件:
class LegalScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamProvider<List<University>>.value(
value: Global.universityRef.streamData(),
child: LegalScreenContent(),
);
}
}
这是我的全球课程:
class Global {
static final FirebaseAnalytics analytics = FirebaseAnalytics();
static final Map models = {
// Dish: (data, id) => Dish.fromMap(data, id),
// Event: (data, id) => Event.fromMap(data, id),
// News: (data, id) => News.fromMap(data, id),
// Subject: (data, id) => Subject.fromMap(data, id),
University: ({Map data}) => University.fromMap(data: data),
// UserModel: (data, id) => UserModel.fromMap(data, id),
};
static final UserData<UserModel> userModelRef =
UserData<UserModel>(collection: 'users');
static final Collection<University> universityRef =
Collection<University>(path: 'hochschulen');
}
这是大学的模型:
class University {
String city;
String domain;
String mail;
String name;
String shortName;
String street;
String phone;
String website;
String zip;
University(
{this.city,
this.domain,
this.mail,
this.name,
this.shortName,
this.street,
this.phone,
this.website,
this.zip});
University.fromMap({Map data}) {
city = data['city'] ?? '';
domain = data['domain'] ?? '';
mail = data['mail'] ?? '';
name = data['name'] ?? '';
shortName = data['short_name'] ?? '';
street = data['street'] ?? '';
phone = data['tel'] ?? '';
website = data['website'] ?? '';
zip = data['zip'] ?? '';
}
}
这是我的收藏类:
class Collection<T> {
final FirebaseFirestore _db = FirebaseFirestore.instance;
final String path;
CollectionReference ref;
Collection({this.path}) {
ref = _db.collection(path);
}
Future<List<T>> getData() async {
var snapshots = await ref.get();
return snapshots.docs
.map((doc) => Global.models[T](doc.data, doc.id) as T)
.toList();
}
Stream<List<T>> streamData() {
return ref.snapshots().map((snapshot) => snapshot.docs
.map((doc) => Global.models[T](data: doc.data()) as T)
.toList());
}
}
解决方案
推荐阅读
- python - 我该如何解决这个正则表达式逻辑错误?
- r - 单个闪亮应用程序中不同变量的散点图
- google-cloud-platform - 使用 Cloud Scheduler 在每个月的第一个星期六安排
- python - pydrive如何将电子表格结果提取到json中
- amazon-web-services - 如何在 Amazon RDS Aurora 上创建多个数据库?
- vue.js - 我们如何使用 vue/nuxt 在浏览器上显示来自 s3 的图像?
- python - 随着时间的推移,使用熊猫计算滚动窗口中唯一 id 的特定条件事件的数量
- c# - 通过 companyName 过滤 MS Graph 不起作用
- arrays - 如何删除元素字段为NULL的数组元素
- python - 获取用户输入,然后将输入写入特定区域的 python 文件