flutterのSDKのバージョン設定する際、依存関係で悩んでいる方多いと思うので、本記事で解決策をまとめてみます。
anyで解決する
下記の例でflutter pub getすると、バージョンコンフリクトが発生すると思います。
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
url_launcher: ^6.1.7
バージョンコンフリクト
Because demo depends on url_launcher >=6.1.3 which requires Flutter SDK version >=2.8.0, version solving failed.
pub get failed (1; Because demo depends on url_launcher >=6.1.3 which requires Flutter SDK version >=2.8.0, version solving failed.)
exit code 1
解決策:
- anyで問題ないバージョンを探し出す。
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
url_launcher: any
- pubspec.lockファイルから問題なかったバージョンを確認する
url_launcher:
dependency: "direct main"
description:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
- yamlファイルのバージョンを修正する
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
url_launcher: 6.1.2
dependency_overrides
下記はパッケージの取得エラーです。
原因はもう1つのパッケージに同じsdkのfl_chartが^0.36.1を使っていたからです。
当然、その解決策は今使っているパッケージのバージョンを同じバージョンの^0.36.1にすれば解決できますが、もし2つのSDKで違うバージョンのSDKが存在する、または上記anyでも解決できない場合はdependency_overridesで解決できます。
Because some_package depends on another_package from path which depends on fl_chart ^0.36.1, fl_chart ^0.36.1 is required.
So, because some_package depends on fl_chart 0.20.1, version solving failed.
pub get failed (1; So, because some_package depends on fl_chart 0.20.1, version solving failed.)
exit code 1
解決策
dependencies:
flutter:
sdk: flutter
fl_chart: 0.20.1
dependency_overrides:
fl_chart: 0.20.1
注意
この方法でバージョン依存関係コンフリクト解決できますが、SDK想定外の動作発生することがあるため、慎重に使った方が良いと思います。