Flutter项目构建AppBundle失败,请求解决编译错误
Flutter构建AppBundle时的编译错误及解决方法
我是Flutter新手,购买了一个在线Flutter项目,构建AppBundle时失败,错误信息如下:
编译警告(不直接导致构建失败,建议后续处理)
注意:部分输入文件使用或覆盖了已弃用的API。 注意:使用-Xlint:deprecation重新编译以获取详细信息。 注意:C:\flutter\.pub-cache\hosted\pub.dartlang.org\firebase_messaging-14.4.1\android\src\main\java\io\flutter\plugins\firebase\messaging\FlutterFirebaseMessagingPlugin.java使用了未检查或不安全的操作。 注意:使用-Xlint:unchecked重新编译以获取详细信息。 注意:部分输入文件使用或覆盖了已弃用的API。 注意:使用-Xlint:deprecation重新编译以获取详细信息。 注意:部分输入文件使用或覆盖了已弃用的API。 注意:使用-Xlint:deprecation重新编译以获取详细信息。 注意:部分输入文件使用了未检查或不安全的操作。 注意:使用-Xlint:unchecked重新编译以获取详细信息。 注意:部分输入文件使用或覆盖了已弃用的API。 注意:使用-Xlint:deprecation重新编译以获取详细信息。 注意:C:\flutter\.pub-cache\hosted\pub.dartlang.org\flutter_native_image-0.0.6+1\android\src\main\java\com\example\flutternativeimage\FlutterNativeImagePlugin.java使用或覆盖了已弃用的API。 注意:使用-Xlint:deprecation重新编译以获取详细信息。 注意:部分输入文件使用或覆盖了已弃用的API。 注意:使用-Xlint:deprecation重新编译以获取详细信息。 注意:C:\flutter\.pub-cache\hosted\pub.dartlang.org\launch_review-3.0.1\android\src\main\java\com\iyaffle\launchreview\LaunchReviewPlugin.java使用或覆盖了已弃用的API。 注意:使用-Xlint:deprecation重新编译以获取详细信息。
致命编译错误(直接导致构建失败)
lib/ui/checkout/checkout3_view.dart:455:29: 错误:参数类型'String?'无法分配给参数类型'String',因为'String?'可为空而'String'不可为空。 currency: valueHolder.defaultFlutterWaveCurrency, ^ lib/ui/common/ps_expansion_tile.dart:116:33: 错误:无法在'PageStorageBucket?'上调用方法'readState',因为它可能为空。 - 'PageStorageBucket'来自'package:flutter/src/widgets/page_storage.dart' ('/C:/flutter/packages/flutter/lib/src/widgets/page_storage.dart')。 尝试使用?.调用。 PageStorage.of(context).readState(context) ?? widget.initiallyExpanded; ^^^^^^^^^ lib/ui/common/ps_expansion_tile.dart:141:31: 错误:无法在'PageStorageBucket?'上调用方法'writeState',因为它可能为空。 - 'PageStorageBucket'来自'package:flutter/src/widgets/page_storage.dart' ('/C:/flutter/packages/flutter/lib/src/widgets/page_storage.dart')。 尝试使用?.调用。 PageStorage.of(context).writeState(context, _isExpanded); ^^^^^^^^^^ lib/ui/checkout/one_page_checkout/one_page_checkout_view.dart:791:31: 错误:参数类型'String?'无法分配给参数类型'String',因为'String?'可为空而'String'不可为空。 currency: valueHolder.defaultFlutterWaveCurrency, ^ lib/ui/common/expansion_tile.dart:120:33: 错误:无法在'PageStorageBucket?'上调用方法'readState',因为它可能为空。 - 'PageStorageBucket'来自'package:flutter/src/widgets/page_storage.dart' ('/C:/flutter/packages/flutter/lib/src/widgets/page_storage.dart')。 尝试使用?.调用。 PageStorage.of(context).readState(context) ?? widget.initiallyExpanded; ^^^^^^^^^ lib/ui/common/expansion_tile.dart:147:29: 错误:无法在'PageStorageBucket?'上调用方法'writeState',因为它可能为空。 - 'PageStorageBucket'来自'package:flutter/src/widgets/page_storage.dart' ('/C:/flutter/packages/flutter/lib/src/widgets/page_storage.dart')。 尝试使用?.调用。 PageStorage.of(context).writeState(context, _isExpanded); ^^^^^^^^^^
构建最终失败信息
FAILURE: 构建因异常失败。 * 位置: 脚本'C:\flutter\packages\flutter_tools\gradle\flutter.gradle'第1159行 * 错误原因: > 进程'命令'C:\flutter\bin\flutter.bat''以非零退出值1结束。 * 尝试: > 使用--stacktrace选项获取堆栈跟踪。 > 使用--scan选项获取完整洞察。 * 获取更多帮助:https://help.gradle.org 运行Gradle任务'bundleRelease'... 103.1s Gradle任务bundleRelease失败,退出码1 PS C:\Flutter Projects\planhome> flutter --stacktrace 找不到名为"stacktrace"的选项。
解决方法
1. 修复空安全相关错误
(1)处理String?转String的问题
在checkout3_view.dart第455行和one_page_checkout_view.dart第791行,valueHolder.defaultFlutterWaveCurrency是可空类型,但currency参数需要非空字符串,二选一修复:
- 确认值不会为空时,强制解包:
currency: valueHolder.defaultFlutterWaveCurrency!, - 可能为空时,提供默认值:
currency: valueHolder.defaultFlutterWaveCurrency ?? "USD", // 替换为项目实际默认货币代码
(2)处理PageStorageBucket的空安全调用
在ps_expansion_tile.dart和expansion_tile.dart中,按照提示用?.处理空对象:
- 读取状态:
PageStorage.of(context)?.readState(context) ?? widget.initiallyExpanded; - 写入状态,先判断非空再调用:
final bucket = PageStorage.of(context); if (bucket != null) { bucket.writeState(context, _isExpanded); }
2. 处理API弃用警告(可选)
这些警告来自第三方依赖包,可通过两种方式处理:
- 升级依赖:在
pubspec.yaml中更新firebase_messaging、flutter_native_image、launch_review的版本号,执行flutter pub upgrade。 - 暂时忽略:警告不影响AppBundle构建,后续有需求再处理。
3. 正确获取堆栈跟踪
flutter命令无--stacktrace选项,正确获取堆栈跟踪的命令是:
flutter build appbundle --debug --stacktrace
内容的提问来源于stack exchange,提问作者Mkazre
相关产品推荐
相关产品推荐

