Flutter更新后出现AssetManifest重复导入错误求助
问题情况
一年前开发的Flutter应用原本运行正常,近期按Flutter提示完成更新后,应用无法启动,核心报错为AssetManifest类同时来自Flutter框架自身和google_fonts依赖包,具体错误日志如下:
在AOSP on IA模拟器上以调试模式启动lib/main.dart...
运行Gradle任务'assembleDebug'...
../../.pub-cache/hosted/pub.dev/google_fonts-3.0.1/lib/src/google_fonts_base.dart:14:1:
错误: 'AssetManifest'同时来自'package:flutter/src/services/asset_manifest.dart'和'package:google_fonts/src/asset_manifest.dart'。
import 'asset_manifest.dart';
^^^^^^^^^^^^^
../../.pub-cache/hosted/pub.dev/google_fonts-3.0.1/lib/src/google_fonts_base.dart:34:31:
错误: 'AssetManifest'同时来自'package:flutter/src/services/asset_manifest.dart'和'package:google_fonts/src/asset_manifest.dart'。
AssetManifest assetManifest = AssetManifest();
^^^^^^^^^^^^^
Target kernel_snapshot失败: ExceptionFAILURE: 构建因异常失败。
- 位置: 脚本'/Users/innot/Developer/flutter/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy'第1214行
- 错误原因: 任务':app:compileFlutterBuildDebug'执行失败。
进程'command '/Users/innot/Developer/flutter/bin/flutter''以非零退出值1结束
- 建议: 使用--stacktrace选项获取堆栈跟踪,使用--info或--debug选项获取更多日志输出,使用--scan获取完整分析信息。
- 更多帮助: https://help.gradle.org
BUILD FAILED in 7s
Exception: Gradle任务assembleDebug以退出码1失败
解决步骤
升级google_fonts依赖(推荐方案)
旧版本google_fonts(3.0.1)与更新后的Flutter版本存在命名冲突,Flutter后续版本在框架内新增了同名的AssetManifest类,升级google_fonts到最新稳定版即可解决:- 打开项目根目录的
pubspec.yaml文件 - 将
google_fonts: ^3.0.1替换为google_fonts: ^[最新稳定版号](可通过执行flutter pub outdated查看当前可用的最新版本) - 执行命令
flutter pub get更新依赖
- 打开项目根目录的
清理缓存重建项目
若升级依赖后仍有报错,执行以下命令清理缓存并重新构建:flutter clean flutter pub get flutter run临时修改依赖源码(不推荐)
如果暂时无法升级依赖,可临时修改google_fonts的源码解决命名冲突,但后续升级依赖会覆盖修改,仅作为临时应急方案:- 找到本地pub缓存中的文件:
../../.pub-cache/hosted/pub.dev/google_fonts-3.0.1/lib/src/asset_manifest.dart - 将文件中的
class AssetManifest重命名为class GoogleFontsAssetManifest - 同步修改
google_fonts_base.dart中的导入引用和实例化代码,将所有AssetManifest替换为GoogleFontsAssetManifest
- 找到本地pub缓存中的文件:
内容的提问来源于stack exchange,提问作者Vincent

