Flutter跨文件导入扩展无法编译:方法未定义问题求助
问题描述
在Android Studio中,我单独创建了一个DateTime扩展类,将其导入其他文件后,编译器提示this method isn't defined,无法识别该扩展方法;但把扩展代码复制到使用文件内就能正常运行。
扩展代码如下:
extension on DateTime { String convertToString() { DateTime date = this; String convertedDate = date.toString(); convertedDate = convertedDate.split(' ')[0]; convertedDate = convertedDate.split('-').reversed.toList().join('-'); return convertedDate; } }
使用示例:DateTime.now().convertToString();,该代码仅在同文件内有效。
附flutter doctor检测结果:
Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, 3.0.1, on Microsoft Windows [Version 10.0.22000.856], locale en-US) [√] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1) [√] Chrome - develop for the web [X] Visual Studio - develop for Windows X Visual Studio not installed; this is necessary for Windows development. Download at https://visualstudio.microsoft.com/downloads/. Please install the "Desktop development with C++" workload, including all of its default components [√] Android Studio (version 2021.2) [√] VS Code (version 1.70.0) [√] VS Code, 64-bit edition (version 1.64.1) [√] Connected device (3 available) [√] HTTP Host Availability ! Doctor found issues in 1 category.
解决方案
问题出在你定义的是匿名扩展(未指定扩展名称),Dart的匿名扩展仅能在其定义的文件内部访问,无法通过跨文件导入使用。解决步骤如下:
- 给扩展命名
修改扩展代码,添加一个自定义名称,比如DateTimeConverter:
extension DateTimeConverter on DateTime { String convertToString() { DateTime date = this; String convertedDate = date.toString(); convertedDate = convertedDate.split(' ')[0]; convertedDate = convertedDate.split('-').reversed.toList().join('-'); return convertedDate; } }
- 正确导入扩展文件
在需要使用该扩展的文件顶部,导入包含扩展的dart文件(假设扩展文件名为date_time_extension.dart,请替换为实际路径):
import 'path/to/date_time_extension.dart';
完成以上两步后,就能在其他文件正常调用DateTime.now().convertToString()了。
内容的提问来源于stack exchange,提问作者Ammar Mohamed
相关产品推荐
相关产品推荐

