Flutterのバージョンあげたらエラーが出た
半年ぶりくらいにFlutterのバージョンを上げたら、以下のエラーが出ました。
・Flutterのバージョンを2.10.3に更新
・Visual Studio Codeにてビルドを実施
: Error: Member not found: 'packageRoot'.
../…/interface/local_platform.dart:46
io.Platform.packageRoot; // ignore: deprecated_member_use
flutter pub upgradeすれば直るけど・・・
ググると「flutter pub upgradeすると直る」という情報がたくさん出てくるんです。
そして、記事通りに「flutter pub upgrade」をすると直るんです。
直るんですが、pubspec.lockファイルが更新されてしまうんです。。。
自分は、組み込んでいるpackageのバージョンによって挙動が変わってしまうのは嫌なので、
pub.devからpackageを入れる際は、常にバージョンを指定していれるようにしています。
そして、「flutter pub upgrade」してしまうと、指定したバージョンを無視して最新のものを入れられてしまうのです。
せっかく、ソースコードでバージョン指定しているのに、そのバージョンと異なったバージョンのものが
アプリに組み込まれてしまうのは、正直いただけないのでこのやり方は却下でした。
辿り着いたこのサイト
本件を解決するために、何箇所のサイトを開いたか忘れました。
(そして、何度「flutter pub upgareすればヨシ!」というサイトをみたことか・・・)
そして本日、以下のサイトに出会えました。
https://www.fluttercampus.com/guide/270/error-member-not-found-packageroot-flutter/
ここに記載されていた Solution 3: Overrides Dependency が、自分の中ではベストアンサーでした。
修正方法
pubspec.yamlファイルに以下の行を追加します。
dependencies:
flutter:
sdk: flutter
(中略)
// 以下を追加
dependency_overrides:
platform: ^3.1.0
dependency_overridesとは
いったん、自分がしたかったpubspec.lockに影響を及ぼさない修正はこれで達成できました。
しかし、この修正は安全なのか。dependency_overridesとはなんなのか。疑問が残りました。
Flutter 公式サイトに詳しく説明がありますが、自分が利用しているパッケージの中で参照しているパッケージのバージョンを指定できる機能のようです。(間違ってたらご指摘ください)
そして、そのパッケージが保証しているバージョンの範囲を超えたものを指定してしまうと、アプリが壊れる可能性もあるようです。
いったん自分の場合は大丈夫そうでしたが、利用にはリスクがありそうだということを念頭に入れておいたほうが良さそうです。
理解が乏しいので、詳しい方がいらっしゃいましたらコメントお願いします。