找不到 Dart 扩展函数

Ili*_*tov 15 extension-methods dart flutter

我有一个关于颤振的项目,我非常想在那里使用扩展方法。我已升级pubspec.yaml文件以使用sdk: ">=2.6.0 <3.0.0". 我创建了一个list_extensions.dart包含内容的文件

import 'dart:math';

extension ListExtension<T> on List<T> {

  T randomElement() => this.elementAt(Random().nextInt(this.length));

}
Run Code Online (Sandbox Code Playgroud)

当我尝试在其他文件中使用此扩展方法时

String getRandomText(List<String> texts) => texts.randomElement();
Run Code Online (Sandbox Code Playgroud)

我看到一个带有文本的编译器错误:The method 'randomElement' isn't defined for the class 'List'

但是当我尝试在list_extensions.dart文件中使用这个扩展方法时- 编译器可以接受。

问题是我的另一个项目可以找到我声明的所有扩展方法。

flutter doctor 说:

Doctor summary (to see all details, run flutter doctor -v):
[?] Flutter (Channel master, v1.10.17-pre.74, on Mac OS X 10.15 19A603, locale en-RU)
[!] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    ? Android license status unknown.
      Try re-installing or updating your Android SDK Manager.
      See https://developer.android.com/studio/#downloads or visit https://flutter.dev/setup/#android-setup for detailed instructions.
[?] Xcode - develop for iOS and macOS (Xcode 10.2)
[?] Android Studio (version 3.5)
[?] Android Studio (version 3.4)
[?] VS Code (version 1.39.2)
[?] Connected device (1 available)
Run Code Online (Sandbox Code Playgroud)

flutter --version 说:

Flutter 1.10.17-pre.74 • channel master • https://github.com/flutter/flutter.git
Framework • revision bcc93bca23 (6 days ago) • 2019-11-13 11:31:20 -0800
Engine • revision 31cd2dfca2
Tools • Dart 2.7.0
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能强制编译器查看我的扩展方法?

Eri*_*gel 20

这不是你的情况,但对我来说,它在更新 Android Studio、Flutter 插件和 Dart 插件后工作。也许它会帮助别人。

版本的extension方法工作:

  • 安卓工作室 3.6.2
  • Flutter 插件 192.7761
  • Dart 插件 45.1.1

另一个重要的一点是extension必须命名。如果未命名,则不能在其他文件中使用:

私人extension

extension on Banana {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

公众extension

extension BananaExtension on Banana {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

在 YouTube上 Dartextension公告的评论中找到了它

  • 看起来这个在 3.6.3 中被破坏了:( (3认同)