person t-kobayashi

Flutterの依存パッケージのアップデート手順

calendar_today 2021年08月11日 update 2021年08月11日
Facebook Twitter LINE はてなブックマーク Pocket

Flutterでアプリを作っていると、https://pub.devで見つけたパッケージを使うことになると思います。しかし、これらのパッケージは日々更新されていて、依存したパッケージをアップデートせずに放置していると、セキュリティ的にも問題があるし、iOSやAndroidの各プラットフォームの更新に対応できなくなってしまう可能性があります。

今回はFlutterのパッケージやプラグインをアップデートするのに便利なコマンド等を紹介していきたいと思います。

古くなったパッケージがないか確認する

まず、自分のアプリが依存しているパッケージの中に、アップデートが必要なものが含まれているのか確認します。下記のコマンドを使います。

dart pub outdated

しばらくアップデートしていないと結構長いリストが出力されるはずです。以下はアプトプットの例です。

Showing outdated packages.
[*] indicates versions that are not the latest available.

Package Name                     Current   Upgradable  Resolvable  Latest  

direct dependencies:            
audio_session                    *0.1.0    0.1.5       0.1.5       0.1.5   
cupertino_icons                  *1.0.2    1.0.3       1.0.3       1.0.3   
json_serializable                *4.1.0    *4.1.4      *4.1.4      5.0.0   
just_audio                       *0.7.4+1  *0.7.5      0.9.5       0.9.5   
package_info                     *2.0.0    2.0.2       2.0.2       2.0.2   
path_provider                    *2.0.1    2.0.2       2.0.2       2.0.2   
shared_preferences               *2.0.5    2.0.6       2.0.6       2.0.6   
url_launcher                     *6.0.3    6.0.9       6.0.9       6.0.9   

dev_dependencies:               
・・・

transitive dependencies:        
・・・

transitive dev_dependencies:    
・・・

46 upgradable dependencies are locked (in pubspec.lock) to older versions.
To update these dependencies, use `dart pub upgrade`.

3  dependencies are constrained to versions that are older than a resolvable version.
To update these dependencies, edit pubspec.yaml, or run `dart pub upgrade --major-versions`.

パッケージをアップデートする

pubspec.yamlファイルの内容を編集して、dart pub upgradeを実行する方法がありますが、パッケージが多いと結構手間になると思います。まずは以下のコマンドを事項することで、一括でアップデートが適用されます。

dart pub upgrade --major-versions

これを実行することで、dart pub outdatedのアウトプットがかなりスッキリしたものになるのではないでしょうか。

上記で解決できなかったパッケージについては、手動でpubspec.yamlファイルに記述されているバージョンをResolvable列に記載されている値に修正して、flutter pub getを実行することでほとんどのパッケージは最新のものに修正できるはずです。

ここで一旦大きなバグが発生していないか、確認します。バグが発生してしまった場合は、一旦コードを元に戻して、パッケージを1つずつ手動でアップデートしていきます。

それでもアップデートできないパッケージ

今回、json_serializableというパッケージのResolvableバージョンと最新バージョンが異なっていて、pubspec.yamlファイルで5.0.0に設定しても、以下のエラーがでて更新がうまくいきません。

Running "flutter pub get" in flag_app...                        
Because every version of flutter from sdk depends on meta 1.3.0 and analyzer >=2.0.0 depends on meta ^1.7.0, flutter from sdk is incompatible with analyzer >=2.0.0.


And because json_serializable >=5.0.0 depends on analyzer ^2.0.0, flutter from sdk is incompatible with json_serializable >=5.0.0.
So, because flag_app depends on both flutter any from sdk and json_serializable ^5.0.0, version solving failed.
pub get failed (1; So, because flag_app depends on both flutter any from sdk and json_serializable ^5.0.0, version solving failed.)
exit code 1

transitive dependenciesセクションに含まれるmetaanalyzerというパッケージが問題になっています。上記のメッセージによるとsdkのflutterの全てのバージョンがmeta 1.3.0に依存しており、meta ^1.7.0に依存するanalyzer >=2.0.0はflutterと互換性がない、とのことです。

つまり、analyzer ^2.0.0に依存するjson_serializable 5.0.0もflutterとの互換性がないという結論のようです。正直、flutterで使うことが前提のパッケージが、flutterの最新安定板と互換性がないというこの状況が理解できません。とりあえずアプリの動作には問題なさそうなので、いずれ修正されるバグであると信じて、様子を見ることにします。※今後何か進展があれば、追記します。

まとめ

しばらく放置していたアプリを一気にアップデートしようとしてエラーが発生した場合、過去のどの時点でどのパッケージが原因で発生したエラーなのか、判断することが困難になることも考えられます。

アプリを開発したら、こまめに依存パッケージやプラットフォームの更新に対応する習慣をつけるようにしましょう。

関連記事

Flutterの記事一覧を見る

Flutterの質問

soichiro1210 が1年前に投稿

質問日時 2023年07月31日

a-sato が3年前に投稿

質問日時 2021年07月01日

a-sato が3年前に投稿

質問日時 2021年06月30日

takumi が3年前に投稿

質問日時 2021年05月20日

a-sato が3年前に投稿

質問日時 2021年05月14日

Flutterの質問一覧を見る
search