[Q&A]flutter/「packages have newer versions incompatible with dependency constraints」

1月 4, 2024
0 0
Read Time:5 Minute, 36 Second

Q)
flutterのcodelabsのhomescreen_codelabサンプルコードを、 VSCodeで開き、そのTERMINALで、flutter pub getを実行すると、以下のメッセージが表示されました。 どういう意味ですか?

> flutter pub get
Resolving dependencies…
home_widget 0.3.1 (0.4.1 available)
matcher 0.12.16 (0.12.16+1 available)
material_color_utilities 0.5.0 (0.8.0 available)
meta 1.10.0 (1.11.0 available)
path 1.8.3 (1.9.0 available)
Got dependencies! 7 packages have newer versions incompatible with dependency constraints.
Try `flutter pub outdated` for more information.

A)
 このメッセージは、Flutterプロジェクトの依存関係(dependencies)を更新しようとした際に表示されるものです。具体的には、
 いくつかのパッケージに新しいバージョンが利用可能であるが、
 現在のプロジェクトの設定により、それらの最新バージョンを取得できない状態
を示しています。これは通常、pubspec.yamlファイル内で指定されているバージョン制約によるものです。

・「Resolving dependencies…」:依存関係を解決していることを示します。

・各パッケージ名の後に表示されている2つのバージョン:

 現在インストールされているバージョンと、利用可能な新しいバージョンを示しています。

・「Got dependencies!」:依存関係の解決が完了したことを意味します。

・「7 packages have newer versions incompatible with dependency constraints.」:

 7つのパッケージに新しいバージョンが存在するが、現在のプロジェクトの依存関係の制約によりこれらをインストールできないことを示しています。

対応1)

> flutter pub outdated

 解決策としては、flutter pub outdatedコマンドを実行して、どの依存関係がアップデート可能か、どのような制約があるかを確認します。
 その後、必要に応じてpubspec.yamlを編集して依存関係のバージョンを調整し、再度flutter pub getを実行して依存関係を更新します。

実行結果1:

Showing outdated packages.
[*] indicates versions that are not the latest available.
Package Name Current Upgradable Resolvable Latest
direct dependencies:
home_widget *0.3.1 *0.3.1 0.4.1 0.4.1
dev_dependencies: all up-to-date.
1 dependency is constrained to a version that is older than a resolvable version.
To update it, edit pubspec.yaml, or run flutter pub upgrade --major-versions.

内容1:

 flutter pub outdated コマンドの実行結果は、Flutter プロジェクト内の依存関係(dependencies)の現状と、更新可能なバージョンに関する情報を提供します。

・「Showing outdated packages.」: 更新が必要なパッケージを表示しています。

・「[] indicates versions that are not the latest available.」: アスタリスク()が付いているバージョンは最新ではないことを示します。

(詳細)

home_widget パッケージ:

・「Current」: 現在のプロジェクトで使用されているバージョンは 0.3.1 です。
・「Upgradable」: 0.3.1 は、現在のバージョン制約の範囲内でアップグレード可能な最新バージョンです。
・「Resolvable」: プロジェクトの他の依存関係との互換性を保ちつつインストール可能な最新バージョンは 0.4.1 です。
「Latest」: 利用可能な最新バージョンは 0.4.1 です。

●「dev_dependencies: all up-to-date.」: 開発依存関係(dev_dependencies)はすべて最新の状態です。

●「1 dependency is constrained to a version that is older than a resolvable version.」: 1つの依存関係が解決可能なバージョンよりも古いバージョンに制約されています。

対応2)

① pubspec.yaml ファイルを編集して、home_widget パッケージのバージョンを更新します。
 例えば、home_widget: ^0.4.1 のように指定することで最新バージョンにアップデートできます。

② または、コマンドラインで flutter pub upgrade --major-versions を実行して、メジャーバージョンのアップグレードを試みることができます。これにより、バージョン制約を満たしつつ可能な限り最新のバージョンにアップデートされます。

 上記の手順により、home_widget パッケージを最新バージョンに更新することができます。ただし、依存関係を更新する際には、新しいバージョンがプロジェクトの他の部分と互換性があることを確認することが重要です。

結果2)

> flutter pub outdated
Showing outdated packages.
[*] indicates versions that are not the latest available.
Package Name Current Upgradable Resolvable Latest
direct dependencies: all up-to-date.
dev_dependencies: all up-to-date.
all dependencies are up-to-date.

(内容)
 「direct dependencies: all up-to-date.」と「dev_dependencies: all up-to-date.」と表示されており、これはすべての直接依存関係と開発依存関係が最新の状態であることを意味します。
 このメッセージは、現在のプロジェクトで使用されているパッケージのバージョンがすべて最新であることを示しており、アップデートする必要があるパッケージはないということです。

 flutter pub outdated コマンドを実行した結果、すべての直接依存関係開発依存関係が最新の状態であることが確認されました。これはプロジェクトの依存関係がすべて最新であり、アップグレードが必要なパッケージはないことを意味します。

対応3)

※上記により「アップデートが必要なパッケージは無くなった」はずですが、念の為、再度以下を実施したところ、上記以外のパッケージについても指摘を受けてしまったが…。

> flutter pub get

結果3)
Resolving dependencies…
matcher 0.12.16 (0.12.16+1 available)
material_color_utilities 0.5.0 (0.8.0 available)
meta 1.10.0 (1.11.0 available)
path 1.8.3 (1.9.0 available)
test_api 0.6.1 (0.7.0 available)
web 0.3.0 (0.4.0 available)
Got dependencies!
6 packages have newer versions incompatible with dependency constraints.
Try flutter pub outdated for more information.

問題点3)

 おそらく間接依存関係(他のパッケージによって引き込まれる依存関係)であることが示唆されます。間接依存関係を確認するコマンドは次の通りです。
> flutter pub deps

結果4)

>flutter pub deps
Resolving dependencies…
Note: path is pinned to version 1.8.3 by flutter_test from the flutter SDK.
(flutter_test パッケージが path パッケージのバージョン ^1.8.3 に固定されている
(これはFlutter SDKによって固定されている))
See https://dart.dev/go/sdk-version-pinning for details.
Because every version of flutter_test from sdk depends on path 1.8.3 and homescreen_widgets depends on path ^1.9.0,
(しかし、貴方のプロジェクト homescreen_widgetspath パッケージのバージョン ^1.9.0 を要求しています)
flutter_test from sdk is forbidden.
(このため、flutter_test が要求する path のバージョンとあなたのプロジェクトが要求するバージョンが競合しており、結果として flutter_test の使用が「禁止」されています)
So, because homescreen_widgets depends on flutter_test from sdk, version solving failed.
(これはバージョン競合の一種で、Flutter SDKの特定のバージョンに固定された依存関係と、プロジェクトで要求されるバージョンが異なるために発生しています)

対応5)

① pubspec.yaml ファイルで path パッケージのバージョン指定を、Flutter SDKに固定されたバージョン 1.8.3 に合わせます。つまり、path: ^1.9.0path: 1.8.3 に変更します。

② 変更を保存した後、再度 flutter pub get を実行して、依存関係を更新します。

③ その後、再度 flutter pub deps を実行して、依存関係ツリーを表示させます。

結果5)

上記同様のメッセージが、metaパッケージについても表示された。
※以下同様の対応が出来れば良い事になる…。

> flutter pub get
Resolving dependencies…
Note: meta is pinned to version 1.10.0 by flutter_test from the flutter SDK.
See https://dart.dev/go/sdk-version-pinning for details.
Because every version of flutter_test from sdk depends on meta 1.10.0 and homescreen_widgets depends on meta ^1.11.0,
flutter_test from sdk is forbidden.
So, because homescreen_widgets depends on flutter_test from sdk, version solving failed.

対応6)

 yamlファイルの修正→ meta: ^1.10.0

> flutter pub get
Resolving dependencies…
Note: matcher is pinned to version 0.12.16 by flutter_test from the flutter SDK.
See https://dart.dev/go/sdk-version-pinning for details.
Because every version of flutter_test from sdk depends on matcher 0.12.16 and homescreen_widgets depends on matcher
^0.12.16+1, flutter_test from sdk is forbidden.
So, because homescreen_widgets depends on flutter_test from sdk, version solving failed.
You can try the following suggestion to make the pubspec resolve:
Consider downgrading your constraint on matcher: flutter pub add matcher:^0.12.16

結果6)

flutter pub get
Resolving dependencies…
matcher 0.12.16 (0.12.16+1 available)
material_color_utilities 0.5.0 (0.8.0 available)
meta 1.10.0 (1.11.0 available)
path 1.8.3 (1.9.0 available)
test_api 0.6.1 (0.7.0 available)
web 0.3.0 (0.4.0 available)
Got dependencies!
6 packages have newer versions incompatible with dependency constraints.
Try flutter pub outdated for more information.

※パッケージ依存関係の問題は無くなった。

問題7)

 flutter run で、ブラウザ選択時は正常起動するが、Windows選択時に以下のエラーが表示された。

対応7)

・Visual Studioの「Desktop development with C++」を確認する。

「Desktop development with C++」ワークロードの下にある「オプション」で、必要なコンポーネントが選択されていることを確認します。FlutterのWindowsデスクトップアプリ開発には、特に「MSVC v142 – VS 2019 C++ x64/x86 ビルドツール」や「Windows 10 SDK」が必要です。

・パス(C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE)をシステム環境変数に設定する。

・Visual Studio 2022でのプロジェクトファイルの検証:
 ・Flutterプロジェクトの windows フォルダ内にある Runner.sln ファイルを探し、選択して「開く」をクリックします。
 ・ビルド設定を確認します。これには、「デバッグ」や「リリース」モードの選択、対象となるアーキテクチャ(x86、x64)の確認などが含まれます。
 ・プロジェクトエクスプローラーでプロジェクト名を右クリックし、「プロパティ」を選択して、ビルド設定を確認

もし、Runner.slnが見つからない場合:

・> flutter upgrade
・> flutter config –enable-windows-desktop

・IDE再起動
・> flutter create .

・flutter channel master

・> flutter upgrade

・> flutter config –enable-windows-desktop

・> flutter devices

・> flutter create .

>flutter create .
Recreating project ....
Resolving dependencies...
Note: material_color_utilities is pinned to version 0.8.0 by flutter_test from the flutter SDK.
See https://dart.dev/go/sdk-version-pinning for details.


Because every version of flutter_test from sdk depends on material_color_utilities 0.8.0 and homescreen_widgets depends
  on material_color_utilities ^0.5.0, flutter_test from sdk is forbidden.
So, because homescreen_widgets depends on flutter_test from sdk, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try upgrading your constraint on material_color_utilities: flutter pub add material_color_utilities:^0.8.0

・pubspec.yamlを編集:
   # material_color_utilities: ^0.5.0
  material_color_utilities: ^0.8.0

・再び > flutter create .

・Flatterプロジェクトが深過ぎて、かつ日本語を含むフォルダがあるので、
 これを、c:\app下に、コピーしてみた。

できました~( ノД`)
最終的な原因: Flutterプロジェクトの場所が、日本語を含むフォルダだった!!

でした。。。

確認後、「変更」押下後、インストール。

以上でした。。。

Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

コメントを残す