如何在 Dart 2 中为我的用例键入 cast
How to type cast for my use case in Dart 2
我正在尝试清理 Flutter Architecture Samples github 项目的分支上的一些(工作)代码。有没有熟悉 Dart 2 转换的人对如何清理我的尝试有任何建议?
这可能会在发布后发生变化,但我目前拥有的是:
Stream<List<TodoEntity>> todos() {
return firebase.reference().child(path).onValue.map((event) {
if (event.snapshot == null || event.snapshot.value == null) return [];
return Map
.castFrom(event.snapshot.value.map((key, doc) {
return MapEntry(
key,
TodoEntity(
doc['task'],
key,
doc['note'] ?? '',
doc['complete'] ?? false,
));
}))
.values
.toList()
.cast();
});
}
我进行了多次转换,我希望我可以删除 .cast()
并更明确地说明类型,以便编译器知道该做什么并且更容易阅读和理解。
完整代码目前可以在我的fork
上找到
顺便说一句:flutter_redux flutter app works with firestore, I have added support to enable it to work with firebase realtime database,包括测试。
编辑:
感谢 Rémi Rousselet,以下作品无需转换:
Stream<List<TodoEntity>> todos() {
return firebase.reference().child(path).onValue.map((event) {
if (event.snapshot == null || event.snapshot.value == null) return [];
final Map<dynamic, dynamic> value = event.snapshot.value;
final todoMap = value.map((key, doc) {
return MapEntry(
key,
TodoEntity(
doc['task'],
key,
doc['note'] ?? '',
doc['complete'] ?? false,
));
});
return todoMap.values.toList();
});
}
实际上,您可以删除的不仅仅是最后一个 cast
,还可以进行类型检查。
final Map<String, dynamic> value;
final foo = value.map((key, doc) {
return MapEntry(
key,
TodoEntity(
doc['task'],
key,
doc['note'] ?? '',
doc['complete'] ?? false,
));
});
final values = foo.values.toList();
Dart 会相应地自动推断类型。所以 foo
是 Map<String, TodoEntity>
类型,values
是 List<TodoEntity>
类型
我正在尝试清理 Flutter Architecture Samples github 项目的分支上的一些(工作)代码。有没有熟悉 Dart 2 转换的人对如何清理我的尝试有任何建议?
这可能会在发布后发生变化,但我目前拥有的是:
Stream<List<TodoEntity>> todos() {
return firebase.reference().child(path).onValue.map((event) {
if (event.snapshot == null || event.snapshot.value == null) return [];
return Map
.castFrom(event.snapshot.value.map((key, doc) {
return MapEntry(
key,
TodoEntity(
doc['task'],
key,
doc['note'] ?? '',
doc['complete'] ?? false,
));
}))
.values
.toList()
.cast();
});
}
我进行了多次转换,我希望我可以删除 .cast()
并更明确地说明类型,以便编译器知道该做什么并且更容易阅读和理解。
完整代码目前可以在我的fork
上找到顺便说一句:flutter_redux flutter app works with firestore, I have added support to enable it to work with firebase realtime database,包括测试。
编辑: 感谢 Rémi Rousselet,以下作品无需转换:
Stream<List<TodoEntity>> todos() {
return firebase.reference().child(path).onValue.map((event) {
if (event.snapshot == null || event.snapshot.value == null) return [];
final Map<dynamic, dynamic> value = event.snapshot.value;
final todoMap = value.map((key, doc) {
return MapEntry(
key,
TodoEntity(
doc['task'],
key,
doc['note'] ?? '',
doc['complete'] ?? false,
));
});
return todoMap.values.toList();
});
}
实际上,您可以删除的不仅仅是最后一个 cast
,还可以进行类型检查。
final Map<String, dynamic> value;
final foo = value.map((key, doc) {
return MapEntry(
key,
TodoEntity(
doc['task'],
key,
doc['note'] ?? '',
doc['complete'] ?? false,
));
});
final values = foo.values.toList();
Dart 会相应地自动推断类型。所以 foo
是 Map<String, TodoEntity>
类型,values
是 List<TodoEntity>