【发布时间】:2019-11-19 21:21:36
【问题描述】:
我有一个关于颤振的项目,我非常想在那里使用扩展方法。
我已将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));
}
当我尝试在像这样的其他文件中使用此扩展方法时
String getRandomText(List<String> texts) => texts.randomElement();
我看到一个带有文本的编译器错误: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)
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
如何强制编译器查看我的扩展方法?
【问题讨论】:
-
必须导入定义扩展名的文件
-
如果我手动添加导入 - 我真的可以使用我声明的扩展方法。感谢您的建议。但我认为扩展方法应该被 IDE 识别为我扩展的类的方法。我想使用自动完成。至少在不久的将来它会像我预期的那样工作吗?
-
我从 Android 和 Kotlin 开始学习 Flutter 和 dart,对我来说,扩展方法应该在您的项目中随处可用,这似乎非常实用。否则,我应该知道已为应用程序中的哪些类声明了哪些扩展。可以找到静态函数但不能找到扩展方法?对我来说似乎不合逻辑。
-
可能我不清楚我期望什么行为。我不想在不导入扩展方法的情况下使用它们。我完全同意这是不合适的。我只希望 IDE 能够看到它们并建议我在输入它们的名称时导入它们 - 简单的自动完成和自动导入。
-
我知道刚刚添加了支持,但我想在这件事上留下两分钱。与 util 函数相比,扩展函数的一大好处是它们在自动完成中被建议。如果我需要知道每个扩展函数在哪里,不妨使用 Utils。事实上,使用带有建议和自动导入的 util 类可能比记住和手动输入导入行更容易。
标签: flutter dart extension-methods