【问题标题】:Why Dart extension methods don't work for Image class为什么 Dart 扩展方法不适用于 Image 类
【发布时间】:2022-01-10 00:57:29
【问题描述】:

大家好,我面临一个简单的问题,我有这个小代码,但无法正常工作

extension ImageExt on Image {
  static Image base64(String encode, {double? width, double? height}) {
  final reserveWord = 'base64,';
  final codePart = encode.contains(reserveWord)
    ? encode.substring(encode.indexOf(reserveWord) + reserveWord.length)
    : encode;

  return Image.memory(base64Decode(codePart), width: width, height: height);
}

}

当我尝试使用 VSCode 的自动完成功能时,该方法不存在。

我在文件顶部包含了指向定义我的扩展名的正确文件的导入语句。所以我无法弄清楚出了什么问题,请在这里提供任何帮助。在这些情况下,同一文件中存在其他对 String 和 Map 类型的扩展,并且工作正常。

【问题讨论】:

标签: flutter image dart extension-methods


【解决方案1】:

您可以在ImageExt 上致电base64,例如ImageExt.base64('...', width: 24, height: 24);。目前,扩展上的静态成员只能在扩展本身的命名空间中访问(在这种情况下是 ImageExt 而不是 Image)。

您可能有兴趣阅读不久前在 dart 语言存储库上提交的此功能请求,要求更改静态扩展方法以支持此功能。 https://github.com/dart-lang/language/issues/723

【讨论】:

  • 更有理由让它成为顶级功能。请参阅 Remi 在问题中的评论:“我同意在泛型 on 上使用 static 关键字没有意义。”
  • 似乎 Remi 可能会将其重写为工厂构造函数(如果支持的话)而不是静态成员(基于他的完整评论),但顶级函数将是一种完全合理的方法这个也是。
  • @RichardHeap 这就是我所做的,我得到了一些回应。非常感谢
猜你喜欢
  • 2020-05-08
  • 2011-03-21
  • 2013-09-21
  • 2021-11-13
  • 2015-03-09
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多