【Flutter】パッケージの依存関係を確認する

2023/07/17に公開

はじめに

私は個人開発で「たびする」という旅行計画アプリをリリース、運用しております。
最近 Flutter がバージョン 3.10.x をリリースし、そろそろ自分のアプリもアップデートしたいと思い、現在アップデートしている最中です。
Flutter のバージョンを 3.10.6 に変更し、各パッケージをアップデート、ビルドエラーを一つ一つ修正しています。
その中で間接的に依存しているパッケージのエラーが発生し、そのパッケージに依存しているパッケージを調べないといけないことがありましたので、備忘録として記事に残します。

実際に発生したエラー

ビルド中に発生したエラーは以下です。

Error (Xcode): ../../.pub-cache/hosted/pub.dev/macos_ui-1.12.2/lib/src/fields/text_field.dart:108:35: Error: The parameter 'details' of the method '_TextFieldSelectionGestureDetectorBuilder.onSingleTapUp' has type 'TapUpDetails', which does not match the corresponding type, 'TapDragUpDetails', in the overridden method, 'TextSelectionGestureDetectorBuilder.onSingleTapUp'.

どうやら macos_ui というパッケージが使用している型がおかしいみたいです。
私のプロジェクトでは macos_ui パッケージに直接的に依存していないので、macos_ui に依存しているパッケージを調べ、そのパッケージをアップデートすることで解決しようと試みました。

【本題】パッケージの依存関係を調べる方法

flutter pub コマンドに何かそれらしいものはないか調べてみました。

ターミナル
flutter pub --help | less

上記を実行すると deps というコマンドがあり、パッケージの依存関係を出力してくれるものだということがわかりました。
このコマンドを使用して調べてみます。

ターミナル
flutter pub deps | less -N

macos_ui で検索をかけるとでてきました。

ターミナル
├── adaptive_dialog 1.8.3+1
│   ├── animations 2.0.7
│   │   └── flutter...
│   ├── collection...
│   ├── dynamic_color 1.6.6
│   │   ├── flutter...
│   │   ├── flutter_test...
│   │   └── material_color_utilities...
│   ├── flutter...
│   ├── intersperse 2.0.0
│   ├── macos_ui 1.12.2

どうやら adaptive_dialog パッケージが macos_ui パッケージに依存しているみたいです。

【余談】解決方法

本記事の「パッケージの依存関係を確認する」という本題は終わったのですが、このまま終わってもキリが悪いので、エラーを解決した方法も書いておきます(といっても大したことはしていません)。

adaptive_dialog パッケージを確認

本プロジェクトで依存している adaptive_dialog のバージョンは 1.8.3+1 でした。
その上でこのパッケージの Changelogissue を確認し新しいバージョンがないか、macos_ui について書かれていないかなどを確認します。

と思いましたが、Readmemacos_ui パッケージで発生している問題と解決方法がとても丁寧にまとめられていました。

Readme 一部抜粋

⚠️ Compatibility with Flutter 3.10

Due to the fact that the dependent macos_ui package has not yet been updated for compatibility with Flutter 3.10, adaptive_dialog package is affected and results in compilation errors with version 1.8.3.

Solution 1 (recommended)

In pubspec.yaml, indicate to resolve dependencies with 1.9 prerelease version:

dependencies:
  adaptive_dialog: ^1.9.0-0

In this case, a version without macos_ui dependency will be temporarily used, resulting in a UI on macOS is same as iOS. Upon stable release, the UI that uses the original macos_ui will be restored.

解決策の通り pubspec.yaml を以下のように修正しました。

pubspec.yaml
# 中略

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter

-  adaptive_dialog: ^1.8.3+1
+  adaptive_dialog: ^1.9.0-0

# 中略

その後 flutter pub get を実施、ビルドするとエラーは発生しなくなりました👏

最後に

少し脱線しましたが、間接的に依存しているパッケージの調べ方をまとめました。
ググらずに、解決できたのが個人的に嬉しかったです笑

備忘録としてまとめましたが、誰かの一助になれば幸いです。

また、「もっといいやり方あるよー!」「ここ間違ってるよー!」などありましたらコメントしてくださると嬉しいです🙇🏻‍♂️

今後とも楽しく Flutter 開発していきます!

GitHubで編集を提案

Discussion