已执行flutter clean和flutter doctor仍遇Flutter编译错误,如何修复?
问题概述
构建Flutter项目时出现多类编译错误,已执行flutter clean、flutter doctor -v检查环境,问题未解决,最终Gradle任务assembleDebug执行失败,退出码为1。
具体错误信息
: Error: 未找到类型 'EditableTextContextMenuBuilder'。../…/properties/text_field_props.dart:14
final EditableTextContextMenuBuilder? contextMenuBuilder;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: Error: 未找到成员 'FirebaseAppPlatform.verifyExtends'。../…/src/firebase_app.dart:18
FirebaseAppPlatform.verifyExtends(_delegate);^^^^^^^^^^^^^
: Error: 不存在名为 'useSafeArea' 的命名参数。../…/lib/dropdown_search.dart:578
useSafeArea: widget.popupProps.modalBottomSheetProps.useSafeArea,^^^^^^^^^^^
上下文信息:找到候选方法,但参数不匹配。../…/material/bottom_sheet.dart:680Future<T?> showModalBottomSheet<T>({^^^^^^^^^^^^^^^^^^^^
: Error: 无法在 'OverlayState?' 上访问属性 'context',因为它可能为空。../…/lib/dropdown_search.dart:603
- 'OverlayState' 来自 'package:flutter/src/widgets/overlay.dart' ('../../Documents/flutter/packages/flutter/lib/src/widgets/overlay.dart').
package:flutter/…/widgets/overlay.dart:1
建议使用 ?. 进行访问。var overlay = Overlay.of(context).context.findRenderObject() as RenderBox;^^^^^^^
: Error: 不存在名为 'contextMenuBuilder' 的命名参数。../…/widgets/selection_widget.dart:471
contextMenuBuilder: widget.popupProps.searchFieldProps.contextMenuBuilder,^^^^^^^^^^^^^^^^^^
上下文信息:找到候选方法,但参数不匹配。../…/material/text_field.dart:287const TextField({^^^^^^^^^
: Error: 'EditableTextContextMenuBuilder' 不是一个类型。../…/properties/text_field_props.dart:14
final EditableTextContextMenuBuilder? contextMenuBuilder;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
失败原因
- 任务
:app:compileFlutterBuildDebug执行失败,进程/Users/edv-it/Documents/flutter/bin/flutter以非零退出值1结束 - Gradle任务
assembleDebug执行失败,退出码为1
解决方案
- 版本兼容性适配:
EditableTextContextMenuBuilder、contextMenuBuilder是Flutter 2.8+新增API,若当前SDK版本过低,执行flutter channel stable && flutter upgrade升级到稳定版;若SDK版本过高,需升级dropdown_search等依赖包至适配新版本的版本FirebaseAppPlatform.verifyExtends为Firebase旧版API,升级firebase_core等Firebase相关依赖到与当前Flutter兼容的版本
- 更新依赖:执行
flutter pub upgrade更新所有依赖包,确保依赖版本与Flutter SDK匹配 - 修复空安全问题:将
Overlay.of(context).context修改为Overlay.of(context)?.context,并添加空值处理逻辑 - 重新构建:依次执行
flutter clean→flutter pub get→flutter run,清理缓存后重新构建项目
内容的提问来源于stack exchange,提问作者fahrufacher

