从 Dart 中的另一个文件导入扩展方法

Joh*_*nny 9 dart flutter

使用 Dart 2.6,我可以使用这样的扩展方法:

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


main(List<String> arguments) async {
  int x;
  x.giveMeFive();
}
Run Code Online (Sandbox Code Playgroud)

一切正常!:D

但是现在如果我想将我的扩展方法放在另一个文件中,如下所示:

main.dart

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

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

Run Code Online (Sandbox Code Playgroud)

扩展程序

extension on int {
  int giveMeFive() {return 5;}
}
Run Code Online (Sandbox Code Playgroud)

它因令人沮丧的错误而失败..

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();
    ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*nst 14

这是按预期工作的。一个没有名字的扩展被隐含地赋予了一个新名字,但它是私有的。所以如果你想在声明它的库之外使用扩展,你需要给它一个名字。

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

所以你需要做类似的事情

extension MyExtension on int {
  int giveMeFive() => 5;
}
Run Code Online (Sandbox Code Playgroud)