事象
Flutter で開発しており、Android 向けに以前ビルドできていたプロジェクトのビルドが Unresolved reference
エラーで失敗する
e: file:///C:/Users/{your username}/AppData/Local/Pub/Cache/hosted/pub.dev/image_gallery_saver-2.0.3/android/src/main/kotlin/com/example/imagegallerysaver/ImageGallerySaverPlugin.kt:21:48 Unresolved reference 'Registrar'.
原因
image_gallery_saver
パッケージが Flutter の最新バージョンで削除された API に依存していたためだった。
パッケージのソース内に下記記述があり、io.flutter.plugin.common.PluginRegistry.Registrar
を調べたところ最近の Flutter アップデートで削除されていた。
import io.flutter.plugin.common.PluginRegistry.Registrar
解消方法
方法1. image_gallery_saver
パッケージをforkして、新しい API を使用するよう修正する
方法2. Flutter のバージョンを下げる
最新の image_gallery_saver
パッケージ(2.0.3)がまだ古い API を参照したままだったので、image_gallery_saver
のバージョンを上げても解決しない。知らずに Flutter のバージョンアップがされてしまっていたようなのでiOSビルド時にFlutterのアップデートを促されアップデートしてしまったので、私は 2 の方法で解消した。
1. 現在のバージョン確認
$ flutter --version
Flutter 3.29.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 09de023485 (12 days ago) • 2025-02-28 13:44:05 -0800
Engine • revision 871f65ac1b
Tools • Dart 3.7.0 • DevTools 2.42.2
2. ダウングレード
$ flutter downgrade
Downgrade flutter to version 3.27.1
? [y|n]: y
Success
ダウングレード後のバージョン確認
$ flutter --version
Checking Dart SDK version...
Downloading Dart SDK from Flutter engine cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d...
Expanding downloaded archive with PowerShell...
Building flutter tool...
Running pub upgrade...
Resolving dependencies... (1.4s)
Downloading packages...
Got dependencies.
Flutter 3.27.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 17025dd882 (3 months ago) • 2024-12-17 03:23:09 +0900
Engine • revision cb4b5fff73
Tools • Dart 3.6.0 • DevTools 2.40.2
3. 依存関係の更新
$ flutter clean # 実行結果省略
$ flutter pub get # 実行結果省略
4. ビルド
flutter run --debug
おわりに
今回は image_gallery_saver
と Register API だったが、他のパッケージと API でも同様のことは起こりえるので、Unresolved reference
エラー発生時はパッケージの依存している Flutter API が廃止されていないか調べるとよさそう。