Moodiary手动编译的版本不一致问题修复

Moodiary手动编译的版本不一致问题修复

  • Flutter Version: 3.32.1
  • Dart Version: 3.8..1

问题复现与修复


使用fvm flutter pub get命令后报错如下:

1
2
>>> Could not find a file named "packages/isar_flutter_libs/pubspec.yaml" in https://github.com/ZhuJHua/isar fc323a5660b9987fd4d137f71b0d3dbad0915e4f.
>>> Failed to update packages.

pubspec.yaml文件中将:

1
2
3
4
isar_flutter_libs:
git:
url: https://github.com/ZhuJHua/isar
path: packages/isar_flutter_libs

修改为:

1
2
3
4
5
isar_flutter_libs:
git:
url: https://github.com/ZhuJHua/isar
path: packages/isar_flutter_libs
ref: main

再次运行fvm flutter pub get命令后报错如下:

1
2
3
4
>>> Because every version of isar_flutter_libs from git depends on isar 4.0.0-zjh.1 and moodiary depends on isar
4.0.0-dev.14, isar_flutter_libs from git is forbidden.
>>> So, because moodiary depends on isar_flutter_libs from git, version solving failed.
>>> Failed to update packages.

注意到,moodiary项目依赖的isar_flutter_libs所在的项目代码处,在https://github.com/ZhuJHua/isar/commit/d8011e7fb1357a6f1053a5a3a3947a2bbc2b2b51这次提交中,isar库的版本从4.0.0-dev.14修改为4.0.0-zjh.1,而moodiary项目的pubspec.yaml中依赖的isar库仍然为4.0.0-dev.14,两者产生版本冲突。

尝试在pubspec.yaml中修改为isar: 4.0.0-zjh.1后仍然报错:

1
2
>>> Because moodiary depends on isar 4.0.0-zjh.1 which doesn't match any versions, version solving failed.
>>> Failed to update packages.

修改为:

1
2
3
4
5
isar:
git:
url: https://github.com/ZhuJHua/isar
path: packages/isar
ref: main

报错:

1
2
3
4
>>> Because every version of isar_flutter_libs from git depends on isar from hosted and moodiary depends on isar from git,
isar_flutter_libs from git is forbidden.
>>> So, because moodiary depends on isar_flutter_libs from git, version solving failed.
>>> Failed to update packages.

原因推测:ZhuJHua 仓库中 isar_flutter_libspubspec.yaml 要从pub.dev去拉 isar 4.0.0-zjh.1,而不是项目里声明的 Git 版本。

在此基础上添加:

1
2
3
4
5
6
dependency_overrides:
isar:
git:
url: https://github.com/ZhuJHua/isar
path: packages/isar
ref: main

最终正常通过编译。

此外, Windows 平台 Flutter 构建报错信息中,在自定义插件 gal_plugin 的链接阶段,提示多个 LNK2019 无法解析的外部符号,这些符号来自 WinRT (Windows Runtime),而链接失败的原因为插件项目没有链接 windowsapp.lib,所以编译器找不到这些 WinRT API 的实现。

修复方式为找到对应文件:

1
2
3
4
5
6
7
8
moodiary/
└── windows/
└── flutter/
└── ephemeral/
└── .plugin_symlinks/
└── gal/
└── windows/
└── CMakeLists.txt

CMakeLists.txt 中将target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin)修改为:

1
2
3
4
5
6
target_link_libraries(${PLUGIN_NAME}
PRIVATE
flutter
flutter_wrapper_plugin
windowsapp
)

但这个报错可能只是我个人的环境问题,将解决方法放于此仅供参考。