事象概要
現在参画しているPJにてshared_preferencesを2023/02現在の最新(2.0.18
)に上げたところ、iOSでのみSharedPreferences利用時に以下のようなエラーが吐かれるようになった。
MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)
Androidでは問題無くshared_preferencesが利用できるため原因調査に至った。
原因 (恐らく)
shared_preferencesに依存するiOSライブラリに起因するもの?
Ver 2.0.16でiOSに依存しているライブラリshared_preferences_iosが廃止され、shared_preferences_foundationというライブラリに移行しているが、pub getで取得した依存関係にshared_preferences_iosが残っており、getAll
関数が見つからないと怒られている可能性がある。
※shared_preferences_iosは既に DISCONTINUED となった模様。
対応策
調べたところ現状以下2点の対応策が候補に挙がり、1で今の所問題無さそうな為1を採用して経過観察することにしました。一応どちらの方法でもエラーは回避できる模様。
1. SharedPreferenceのインスタンス生成のタイミングで各OSでregisterWith()
をコール
2. shared_preferencesを2.0.15に固定
SharedPreferences.setMockInitialValues({});
をセットすると動くよという記事もあるが、流石にこれはテスト用の関数という公式の記載もあるので、恐らく誤用な気がします。
まとめ
Ver 2.0.18の状態でflutter clean
等を繰り返しても変わらず、本記事投稿に至りました。
もしかするとローカル環境の依存状態に起因している可能性もありますが、
同様の事象が発生した方は一度試してみるといいかもしれません。
或いはこういった対応策が最善ですよ、等あれば是非コメント頂けますと幸いです。
参考
以下は該当エラーのissue一覧