在DART 2.6中,我可以使用如下扩展方法:

extension on int {
  int giveMeFive() {
    return 5;
  }
}


main(List<String> arguments) async {
  int x;
  x.giveMeFive();
}

一切运行完美!:D

但是现在如果我想把我的扩展名方法放到另一个文件中,像这样:

main.dart

import 'package:untitled5/Classes/ExtendInt.dart';

main(List<String> arguments) async {
  int x;
  x.giveMeFive();
}

ExtendInt.dart

extension on int {
  int giveMeFive() {return 5;}
}

它失败了,并出现令人沮丧的错误.

bin/main.dart:9:5: Error: The method 'giveMeFive' isn't defined for the class 'int'.
Try correcting the name to the name of an existing method, or defining a method named 'giveMeFive'.
  x.giveMeFive();
    ^^^^^^^^^^

是不允许这样做还是我做错了什么? 感谢阅读!:)

推荐答案

这就像预期的那样工作.没有名称的扩展被隐式赋予一个新名称,但它是私有的.因此,如果您希望在声明该扩展的库外使用该扩展,则需要为其命名.

这对用户也很有帮助,因为当有多个扩展在给定的接收器类型上提供giveMeFive时,他们可能需要使用它的名称,以便能够解决冲突,并明确地从扩展中请求扩展方法giveMeFive.

所以你需要做点什么

extension MyExtension on int {
  int giveMeFive() => 5;
}

Dart相关问答推荐

Dart 3.3接口字段类型升级不起作用

flutter.io (dart) - 将填充设置为设备宽度的百分比?

angular.dart NgTwoWay 和 NgAttr 已弃用?

如何在polymer应用程序中实现主要功能

AppLifcycleState.didChangeLifecycleState( ) 函数在应用程序进入前台或后台时不被调用

如何在 Dart 中等待单元测试中的异步设置?

如何调整ShowDialog的子级大小

无法将小部件标记为需要构建,因为框架已经在构建小部件的过程中

如何在 Dart 中使用类型Aliases/Typedefs(也是非函数)?

在flatter中在容器内生成可滚动文本

如何更改手机屏幕上的Flutter应用程序名称显示?

如何在 Dart 中上传文件?

dart的Completer和Future?

您可以将命名参数与简写构造函数参数结合起来吗?

Dart 后期初始化final变量

CoffeeScript 和 Dart 对 JavaScript 的改进之间的主要区别是什么?

我应该更喜欢迭代 Map.entries 还是 Map.values?

使用 Dart 将 Uint8List 转换为字符串

Dart 中的外部是什么意思?

List firstWhere Bad state: No element