flutter - 无法在泛型函数中使用泛型函数

标签 flutter dart

我的代码中有以下类

abstract class DatabaseKey<T> implements Built<DatabaseKey<T>, DatabaseKeyBuilder<T>> {
  DatabaseKey._();
  factory DatabaseKey([void Function(DatabaseKeyBuilder<T>) updates]) = _$DatabaseKey<T>;

  String get name;
}

然后,我定义如下泛型 typedef 函数:

typedef ObserveDatabaseEntity = Observable<DatabaseEntity<T>> Function<T>(DatabaseKey<T> key);

但是,当我尝试如下使用时,代码有错误。

  static ObserveConfigurationValue observe(
      GetConfigurationState getState,
      ObserveDatabaseEntity observeDatabaseEntity,
  ) {
    assert(getState != null);
    assert(observeDatabaseEntity != null);

    return <KT>(ConfigKey<KT> key) {
      return Observable.just(getState())
          .flatMap((state) {
            final dbKey = _databaseKeyFromConfig<KT>(key);

            return observeDatabaseEntity(dbKey)
              .map(_configValueFromDatabaseEntity);
          });
    }
  }
DatabaseKey<T> _databaseKeyFromConfig<T>(ConfigKey<T> key) {
  return DatabaseKey((build) => build
    ..name = key.value,
  );
}

我得到的错误是:

The argument type DatabaseKey can't be assigned to the parameter DatabaseKey.

我看不出这段代码有什么问题,或者为什么它不应该工作,但也许我对可以用 Dart 编写的内容的理解是错误的。如果可能的话,写这个的正确方法是什么?

编辑#1:

注意:

typedef ObserveDatabaseEntity 在一个文件中 static ObserveConfigurationValue observe(GetConfigurationState getState, ObserveDatabaseEntity observeDatabaseEntity) 是另一个文件

从玩弄,似乎将它们放在一个文件中,错误消失了。

不过,我相信这也应该在单独的文件中工作,

最佳答案

此错误看起来像是导入不匹配。

在 dart 中,您可以通过相对路径或包导入文件。

import 'lib/some_file.dart'; //relative
import 'package:myapp/lib/some_file.dart'; //package

确实没有更好的方法,但是一旦您选择了一种方法,就必须坚持下去。如果你不这样做(意味着你已经使用包导入导入了一个文件,并且在其他地方使用相对路径导入了同一个文件)Dart 会将它们放在两个不同的命名空间中,并认为它们是两个不同的类。

关于flutter - 无法在泛型函数中使用泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57265947/

相关文章:

flutter - 如何更改文本字段的设置值

flutter - 如何在 mac 中卸载 flutter?

Dart:使用泛型扩展方法,得到 NoSuchMethodError: Class 'xxx' has no instance method 'yyy'

flutter - Flutter 如何在文本字符串中使用引号?

dart - 如何在 Dart 中获取字符串中的最后 n 个字符?

flutter - 如何在 flutter 朔迷离的共享首选项中存储主题

flutter - 使用 flutter 包有缺点吗?

flutter - "every thing is a widget in Flutter"是什么意思

flutter - 函数返回 Future<String> 的实例而不是 String

dart - 如何根据选择的选项卡更改样式?