4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Error: Member not found: ’packageRoot’ in Flutterの対処方法

Posted at

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 公式サイトに詳しく説明がありますが、自分が利用しているパッケージの中で参照しているパッケージのバージョンを指定できる機能のようです。(間違ってたらご指摘ください)
そして、そのパッケージが保証しているバージョンの範囲を超えたものを指定してしまうと、アプリが壊れる可能性もあるようです。
いったん自分の場合は大丈夫そうでしたが、利用にはリスクがありそうだということを念頭に入れておいたほうが良さそうです。

理解が乏しいので、詳しい方がいらっしゃいましたらコメントお願いします。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?