gpt4 book ai didi

firebase-realtime-database - 如何在 Dart 2 中为我的用例键入 cast

转载 作者:IT王子 更新时间:2023-10-29 06:55:16 24 4
gpt4 key购买 nike

我正在尝试清理 Flutter Architecture Samples 的一个分支上的一些(工作)代码项目。熟悉 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 应用程序适用于 firestore ,我添加了支持以使其能够与 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>

关于firebase-realtime-database - 如何在 Dart 2 中为我的用例键入 cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50308353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com