【Flutter】パッケージの依存関係を確認する
はじめに
私は個人開発で「たびする」という旅行計画アプリをリリース、運用しております。
最近 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
でした。
その上でこのパッケージの Changelog
や issue
を確認し新しいバージョンがないか、macos_ui
について書かれていないかなどを確認します。
と思いましたが、Readme
に macos_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.
- https://github.com/macosui/macos_ui/issues/423
- https://github.com/mono0926/adaptive_dialog/issues/110
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 を以下のように修正しました。
# 中略
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
- adaptive_dialog: ^1.8.3+1
+ adaptive_dialog: ^1.9.0-0
# 中略
その後 flutter pub get
を実施、ビルドするとエラーは発生しなくなりました👏
最後に
少し脱線しましたが、間接的に依存しているパッケージの調べ方をまとめました。
ググらずに、解決できたのが個人的に嬉しかったです笑
備忘録としてまとめましたが、誰かの一助になれば幸いです。
また、「もっといいやり方あるよー!」「ここ間違ってるよー!」などありましたらコメントしてくださると嬉しいです🙇🏻♂️
今後とも楽しく Flutter 開発していきます!
Discussion