Flutter3にアップグレードしたら、menubarプラグインが使えない

結論:Flutter3用のアップデート版をGitHubから直接インポートする 

2022/7/18 Flutter エラー・バグ日記

 

FlutterがMacのデスクトップアプリに正式対応する前、メニューバーを設置するために、下記ページを参照し、Googleが「flutter-desktop-embedding」として提供している「menubar」のプラグインを使用していた。

 

 

しかし、Flutter3にアップグレードしたところ、エラーになり、このプラグインが使えなくなってしまった。

 

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

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

 

公式の「PlatformMenuBar」に変更するも、複数画面に設置したらエラー

Flutter3では、「PlatformMenuBar」というデスクトップアプリ用にメニューバーを作成できる新しいクラスが提供されているので、下記の公式ページを参考に、早速置き換えてみた。

 

 

確かに設置することはできたが、アプリの画面ごとにメニューバーを設置すると、画面切り替え時に以下のエラーが発生してしまった。

 

'package:flutter/src/widgets/platform_menu_bar.dart': Failed assertion: line 376 pos 12: '() {
      // It's OK to lock if the lock isn't set, but not OK if a different
      // context is locking it.
      if (_lockedContext != null && _lockedContext != context) {
        return false;
      }
      _lockedContext = context;
      return true;
    }()': is not true.

 

こちらの説明を見ると、「PlatformMenuBar」は一度に1つしかアクティブにできない、ということらしく、複数の画面でそれぞれ「PlatformMenuBar」を設置することはできない?模様。

 

いったんアクティブになった「PlatformMenuBar」を破棄できれば良さそうだが、ソースコードや公式の説明ページを見てもその方法が分からず。。(「debugUnlockDelegate」メソッドを使って何かやるかもしれないのだが、、)。

 

ネットで調べても全く情報が出てこない。。

 

最初に「main.dart」で全画面分の「PlatformMenuBar」を一気に設置する方法も試みたが、ページによって、メニュー項目のアクティブ・非アクティブを切り替えたいので、処理が複雑になり、やりづらい。。

 

従前の「menubar」のプラグインなら、ページごとに「initState」メソッドの中で、メニューバーを設置する「Submenu」クラスのインスタンス「setApplicationMenu」メソッドを書けば良かったので、正直使いやすかった。。

 

menubarプラグインがFlutter3対応用にアップデートされた!

しばらく日を置いて、もう一度「flutter-desktop-embedding」のページを見てみると、「[menubar] Update to work with Flutter 3」と書かれ、アップデートされていた。

 

 

こちらに、Flutter3用に書き直すべき箇所が分かるように掲示されている。

 

 

早速、上記に沿ってメソッド名やクラス名を修正すると、問題なく動くようになった。

 

※修正したのは以下の点。

 

  • 「Submenu」→「NativeSubmenu」に修正
  • 「MenuItem」→「NativeMenuItem」に修正
  • 「onClicked」→「onSelected」に修正

 

あくまで非公式のプラグインであり、今後大きく変更される可能性があるとは書かれているが、とりあえずエラーにならず動くので、こちらをしばらく採用することとする。

 

ちなみに、2022年7月時点では、「pubspec.yaml」に記載する際、下記のように7桁のハッシュ値を指定することで、今回の最新版のプラグインをインポートできる。

 

  menubar:
    git:
      url: https://github.com/google/flutter-desktop-embedding.git
      path: plugins/menubar
      ref: 12decbe

 

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

 

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

暗記用マーカー – シンプル穴埋め問題作成

Google Play で手に入れよう
Download on the App Store

 

超即ToDo –最短2タップで通知登録できるタスク管理アプリ

Google Play で手に入れよう
Download on the App Store

 

かんたんプリント管理:アラート・OCR文字認識・検索機能を搭載

Google Play で手に入れよう
Download on the App Store

 

シンプルメモ帳「BasicMemo」 – 文字カウント、ワンタッチ入力、タグ管理等の機能を搭載

Macのデスクトップ版もリリースしました。

Google Play で手に入れよう
Download on the App Store

 

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

おすすめの学習教材

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

 

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

 

おすすめの学習書籍

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

 

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


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

 

おすすめのソフトウェア

安くて高機能。アプリの独自ドメイン・紹介サイト構築に最適/

 

\アイコン作成・画面設計・クラウド保存…何でもできて超必須

 

おすすめのハードウェア

\リーズナブルな価格で検証端末を確保できる/

 

\目線の高さを調節しやすく、疲れにくい

 

\キータッチが超静音で心地よい/

 

おすすめのサポートアイテム

\部屋の中を仕切って、集中できる開発環境を作れる/

 

\部屋の中でも大き過ぎず、長時間座っても疲れない

 

\バグと格闘した後の肩こりを解消してくれる/

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