概要
バージョン管理ツールのasdfでFlutterのバージョンを管理しているにも関わらず、プロジェクトディレクトリ内で直接Flutterをインストール/アップグレードしてしまった時の対処法です。
環境
MacBook Pro M1 2020
メモリ:16GB
macOS:Sonoma
結論
プロジェクトディレクトリで
which flutter
を打って/Users/username/.asdf/shims/flutter
を指定している場合は正しくasdfを参照できています。参照元が正しいことを確認できた場合、一旦asdfでFlutterをアンインストールし、再度インストールしましょう!
1.プロジェクトディレクトリにいる状態ですべてのバージョンのFlutterをアンインストール
asdf uninstall flutter
2.Flutterが正しく削除されたことを確認
which flutter
3.Flutterをインストール("バージョン"は3.19.3-stable等バージョンを指定します。)
asdf install flutter バージョン
4.flutterが正しくインストールされたことを確認
flutter doctor -v
上記の方法でFlutterバージョンをasdfの管理下に戻すことができます🎉
※pubのパッケージを利用している場合はプロジェクトをビルドする前にflutter clean && flutter pub get
を実行してpackage導入とクリーンをしましょう!
背景
プロジェクトディレクトリでflutter upgrade
を誤って実行し、問答無用で最新版にアップデートされてしまったのを元に戻すところでハマってしまいました。
当時の状況
- asdfでPCのデフォルトとしてglobal設定しているFlutterバージョンは
3.19.3-stable
- asdfでプロジェクトディレクトリのバージョンとしてlocal設定しているFlutterバージョンは
3.13.8
- プロジェクトのリモートdevelopブランチで使っているFlutterバージョンは
3.19.3
- プロジェクトのリモートdevelopブランチをpullした後プロジェクトディレクトリのバージョンを変更しようとした際に誤って
flutter upgrade
を実行し直接上げてしまったFlutterバージョンは3.22.2
本来はasdfでバージョンを管理しているのでflutter upgrade
をする必要はありません。プロジェクトのflutterバージョンとプロジェクトディレクトリのflutterバージョンが異なることに起因するビルドエラーから頭がこんがらがり、気づいたら間違えてflutter upgrade
を打っていました。着々と最新バージョンがインストールされていく様子に思考が停止しました...
asdfの管理外で直接flutterのバージョンを上げてしまったものの、プロジェクトディレクトリが参照しているのはasdfのままでした。asdfが管理するflutterのフォルダに、直接インストールした最新バージョンの中身が突っ込まれている状態です。新しいバージョンも含め丸ごと消して解決したということになります。
本来行うべきasdfを使ったバージョン管理の方法
プロジェクトディレクトリで使うFlutterバージョンを指定する時
asdf local flutter バージョン
asdfでバージョン管理をしている場合、本来は上記のコマンドを打つだけでバージョンを指定することができます。
備考
asdfで管理している場合、そうでない場合も、flutter downgrade
コマンドは効果がありません。asdfで管理している場合はasdfでバージョン指定を、そうでない場合はGitからFlutterの過去バージョンを取得してダウングレードすることができます。方法はさまざまな記事がありますのでご参照ください。
おわりに
一度失敗したのでもう失敗はしないですね!
最後までお読みいただき、ありがとうございました。