如何在Dart 2中为我的用例输入cast

mmccabe 05/12/2018. 1 answers, 27 views
firebase-database dart dart google-cloud-firestore flutter flutter flutter-test

我正试图清理Flutter Architecture Samples github项目的一个分支上的一些(工作)代码。 有没有人熟悉飞镖2中的铸造对于如何清理我的尝试有任何建议?

发布后这可能会改变,但我目前拥有的是:

Stream> 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()并且更加明确地说明类型,因此编译器知道该做什么并且更易于阅读和理解。

完整的代码可以在我的叉子上找到

btw: flutter_redux flutter应用程序与firestore 协同工作,我增加了支持,使其能够与firebase实时数据库一起工作,包括测试。

编辑:感谢RémiRousselet ,以下作品无需投射:

Stream> todos() {
  return firebase.reference().child(path).onValue.map((event) {
    if (event.snapshot == null || event.snapshot.value == null) return [];
    final Map 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();
  });
} 

1 Answers


Rémi Rousselet 05/12/2018.

实际上,除了最后一次cast阵容之外,你还可以删除更多类型并进行类型检查。

final Map 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的类型为MapList类型的values

Related questions

Hot questions

Language

Popular Tags