Flutter3.7アップグレード後の不具合対応

※当サイトは、アフィリエイト広告を利用しています

結論:flutter pub upgrade --major-versionsでパッケージを最新に更新する、など

2023/2/3 Flutter エラー・バグ日記

 

Flutter SDKを3.3.4から3.7.1にアップグレード後、運用中のMacデスクトップ用アプリをビルドしたら、山のようなエラーが発生し、対処に苦労したので、その過程を記録。

 

後で分かったが、アップグレード後に、AndroidやiOSでビルドした時にも、一部同様のエラーが発生するため、Macデスクトップに限らず、参考になる部分あり。

 

本記事はライトな日記思考で書いているので、詳細説明はしておらず、基本、テキストのみで画像とかはあまり載せておりません。。m(_ _)m

解説記事ではないため、解決していない内容や、その時々の間違った解釈を述べてしまっている可能性が大いにありますので、何卒、ご了承ください。

 

①メニューバー関連で「The name 'MenuItem' isn't a type」のエラー

最初に以下のエラーが出た。

  

error: The name 'MenuItem' isn't a type, so it can't be used as a type argument. (non_type_as_type_argument at [####] lib/####/####.dart:##)

  

デスクトップアプリのメニューバーを表示するために、以下のプラグイン

 

 

を導入していたが、そのプラグイン経由で使用していた「MenuItem」というクラス(メニュー項目を設定するクラス)に問題が生じたらしい。

 

導入していたバージョンの下記説明

 

 

を見たところ、

 

「新しいフレームワークのクラス名との衝突を避けるために、MenuItem を NativeMenuItem に名前変更します」

 

との記載があった。

 

どうやら、Flutterのバージョンを上げたことで、名前衝突の問題が顕在化したらしい。

 

コード中の「MenuItem」をすべて「NativeMenuItem」に変更したところ、このエラーは解消された。

 

②「The method 'ForwardingFile.createSync' has fewer named arguments」のエラー

続いて以下のエラーが出た。

 

../../../.pub-cache/hosted/pub.dev/file-6.1.2/lib/src/forwarding/forwarding_file.dart:22:8: Error: The method 'ForwardingFile.createSync' has fewer named arguments than those of overridden method 'File.createSync'.
void createSync({bool recursive = false}) =>
^
org-dartlang-sdk:///third_party/dart/sdk/lib/io/file.dart:248:8: Context: This is the overridden method ('createSync').
void createSync({bool recursive = false, bool exclusive = false});
^

 

ForwardingFile.createSync」というメソッドの引数が不足している、とのことだが、そもそもこのメソッドを使用している認識がなく、検討がつかない。。

 

お決まりの不具合解消法である

 

Podfile.lock削除(macosフォルダ内にあるファイルを削除)
→ flutter clean(プロジェクトフォルダ内で実行)
→ Pub get(Android Studioのボタンを押す)
→ pod install --repoupdate(macosフォルダ内で実行)

 

を実行してみるも、状況は変わらず。。

 

調べると、全く同じエラーに関する以下のQA記事があった。

 

 

どうやらDartのライブラリが古いことが原因の模様。

 

dart pub upgrade

 

で解消できるとのこと。確かにやってみると、このエラーは解消された。

 

※ただ、この後、Flutter関連のパッケージが古いことによるエラーも発生したので、本当はこの時点で、「flutter pub upgrade」にしておけば良かったと思われる。

 

③moorの自動生成コードにエラーが発生

「dart pub upgrade」をした結果、使用しているローカルDBのパッケージ「moor」自動生成コード(自分の場合は「database.g.dart」というファイル)にエラーが発生した。

 

「moor」は、現在「drift」というパッケージに置き換わっており、「Pub get」でパッケージ取得処理をすると、以下のように表示され、自動的に「drift」が読み込まれるようになっていた。

 

moor 4.6.1+1 (discontinued replaced by drift)
moor_generator 4.6.0+1 (discontinued replaced by drift_dev)

 

恐らく「drift」に更新されたことで、コード生成をやり直す必要があるのだろうと考え、

 

flutter packages pub run build_runner build --delete-conflicting-outputs

 

で再生成したところ、エラーは解消された。

 

再生成された「database.g.dart」を確認すると、主に以下3点が修正されていた。

 

  • 「GeneratedDatabase」型の「_db」という変数名が、「attachedDatabase」に変更
  • 「typeName: 'INTEGER'」という引数指定方法が、「type: const IntType()」に変更(bool型の場合は「type: const BoolType()」に変更)
  • 「typeName: 'TEXT'」という引数指定方法が、「type: const StringType()」に変更

 

④「Error output from CocoaPods: Ignoring ffi-1.15.3 because its extensions are not built.」のエラー

ビルドすると、今度は以下のエラーが発生。

 

Error output from CocoaPods:

Ignoring ffi-1.15.3 because its extensions are not built. Try: gem pristine ffi --version 1.15.3
Error: CocoaPods's specs repository is too out-of-date to satisfy dependencies.
To update the CocoaPods specs, run:
pod repo update
Exception: Error running pod install

 

メッセージの指示どおり、

 

sudo gem pristine ffi --version 1.15.3

 

を実行してみる。

 

※下記記事を参考にさせていただき、「sudo」をつけて実行(つけないと自分の場合は権限エラーになった)。

 

 

続けて、メッセージに書かれている「pod repo update」を実行すると、以下のメッセージが出た。

 

CocoaPods 1.11.3 is available.
To update use: sudo gem install cocoapods

 

素直に「sudo gem install cocoapods」で「cocoapods」をアップデートし、Podfile.lock削除 → flutter clean → Pub get → pod installを実行。

 

これで「Ignoring ffi-1.15.3・・・」のエラーは解消された模様。

 

⑤「Member not found: 'FirebaseAppPlatform.verifyExtends'.」のエラー

ビルドすると、今度は以下のエラーが出た(エラーが終わらない。。)。

 

../../../.pub-cache/hosted/pub.dev/firebase_core-1.24.0/lib/src/firebase_app.dart:18:25: Error: Member not found: 'FirebaseAppPlatform.verifyExtends'.
FirebaseAppPlatform.verifyExtends(_delegate);
^^^^^^^^^^^^^

 

調べると以下のQA記事があった。

 

 

様々な回答がされているが、つまるところ、2022年10月にあったfirebaseの破壊的変更の影響らしく、「firebase_core_platform_interface」というパッケージ(「firebase_core」をインポートすると裏側で一緒に導入されるパッケージ)を、「dependency_overrides」の方法を使って、バージョン4.5.1に固定する方法が提案されていた。

 

ただ、現在は10月からしばらく時間が経っていることもあり、バージョン固定することに違和感もあったので、試しに固定せずに、下記コマンドで「firebase_core」を含む全てのパッケージを最新に更新してみた。

 

flutter pub upgrade --major-versions

 

改めて、Podfile.lock削除 → flutter clean → Pub get → pod installを実行の上、ビルドすると、「Member not found・・・」のエラーは発生しなくなった。

 

※恐らく、前述②のところで最初から「flutter pub upgrade」にしておけば、このエラーは発生しなかったと思われる。

 

⑥「PathProviderPlugin」と「SharedPreferencesPlugin」で「ambiguous use of 'register(with:)'」のエラー

「Member not found・・・」のエラーは消えたが、今度は下記2つのエラーが発生した(本当にエラーが終わらない、、)。

 

/Users/########/macos/Flutter/GeneratedPluginRegistrant.swift:##:##: error: ambiguous use of 'register(with:)'
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))

/Users/########/macos/Flutter/GeneratedPluginRegistrant.swift:##:## error: ambiguous use of 'register(with:)'
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))

 

本エラーの対処履歴については、長くなるので、下記日記に分けて整理。

 

 

 

この2つのエラーを解消後、やっとのことで正常にビルドできるようになった。。

 

いつもFlutter SDKのアップグレード対応では多少の苦労があるが、今回はデスクトップアプリだったこともあり、結構大変だった。。

 

\一般的なエラー対処法をまとめた記事はこちら/

 

リリースしたアプリ(全てFlutterで開発)

 

個人アプリ開発で役立ったもの

おすすめの学習教材

超初心者向けでオススメな元Udemyの講座/

 

 \キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/

 

\Gitの基礎について無料で学べる/

 

おすすめの学習書籍

実用的image_pickerに関してかなり助けられた/

 

Dartの基礎文法を素早くインプットできる/


Dart入門 - Dartの要点をつかむためのクイックツアー

タイトルとURLをコピーしました