Flutter: Macのデスクトップアプリだと、file_pickerの動作中に、アプリ画面を触れてしまう
結論:ファイル選択終了までの間、閉じれないダイアログを表示する
2022/3/12 Flutter エラー・バグ日記
FlutterのiOS・Androidアプリを、Macのデスクトップ用アプリに転用しようとすると、色々調整が必要になるが、コレは盲点だったのでメモ。。
Macのデスクトップアプリで、file_pickerパッケージを試したところ、きちんとPC内のファイル選択ダイアログが表示され、問題なく動作するので、感動していた。
しかし、PCの場合、アプリの画面が開かれたままなので、ファイルの選択中に、アプリの画面を触れてしまうという問題が発覚。
スマホだと、ファイル選択画面に切り替わるので、ファイルを選択またはキャンセルしない限り、元のアプリ画面には戻れない。そのため、ファイルの選択中に、アプリ画面を操作される心配はなかった。
デスクトップ用に、うまく制御してくれるメソッドが無いか、ソースコードを見てみるも、よく分からず。。
結局、OS判定の条件分岐を入れ、Macのデスクトップアプリの場合には、file_pickerの「pickFiles」メソッドを発動したら、ファイル選択が終了するまで(もしくはキャンセルされるまで)、ローディングダイアログを表示(「barrierDismissible」がfalseの「showGeneralDialog」を起動し、ファイル選択中であることを示すメッセージと「CircularProgressIndicator」を表示)し、アプリの画面を触れないようにした。
やはりスマホとPC(デスクトップ)とでは、必要となる対応に違いがある。。
とは言え、Flutterには、OS(プラットフォーム)を判定して条件分岐できるプロパティ(Platform.・・・)が用意されているので、部分的にコードを使い分けるだけで、ほぼ同一のソースコードのまま、複数OSに対応できる点は、非常に便利だと改めて感じる。
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/