😵

【Flutter】これまで発生したエラーやLintからの指摘を解決する方法を一覧にしていきます

2024/02/16に公開

Don't use 'BuildContext's across async gaps

Lint(コードの問題を指摘してくれる静的解析ツール)からの警告文で、何を言っているか理解できなかったので翻訳してみました。

「非同期ギャップをまたいで「BuildContext」を使用しないでください」と言っています。

簡単に言うと、非同期処理の後にBuildContextを使った処理をそのまま行なってしまうのは良くないようです。

下記が参考になるドキュメントなので、読み解いていきましょう。
https://dart.dev/tools/linter-rules/use_build_context_synchronously

悪い例

void onButtonTapped(BuildContext context) async {
  await Future.delayed(const Duration(seconds: 1));
  Navigator.of(context).pop();
}

非同期処理の後に、contextを使って画面をpopしています。
これだと非同期処理の後にcontextが破棄されてアプリがクラッシュする可能性があるという感じでしょうか。

良い例

void onButtonTapped(BuildContext context) async {
  await Future.delayed(const Duration(seconds: 1));

  if (!context.mounted) return;
  Navigator.of(context).pop();
}

非同期処理の後に、context.mountedがfalseであるか確認しています。
context.mountedでウィジェットがマウントされているか確認できます。
つまり、Flutterのウィジェットがビルドされて、ウィジェットツリー内の特定の位置に配置された状態を指します。
もしウィジェットがマウントされていない場合は、ウィジェットツリー内からウィジェットが破棄された状態なので、contextが破棄された状態になると思います。
なので、context.mountedでウィジェットがマウントされているか確認しているのだと思います。

【Flutter】Xcode 15でiOS 17のシュミレーターが起動しないUnable to get list of installed Simulator runtimes

下記の記事を参考にしました。
https://qiita.com/kokogento/items/d33f56d6e0754036636a

👇flutter doctorの結果
インストールされているシミュレーター ランタイムのリストを取得できません。と言われています。

user@USERnoMacBook-Pro mobile-app % flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.19.5, on macOS 14.4.1 23E224 darwin-x64, locale
    ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[!] Xcode - develop for iOS and macOS (Xcode 15.3)
    ✗ Unable to get list of installed Simulator runtimes. 👈
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.2)
[✓] VS Code (version 1.88.0)
[✓] Connected device (2 available)
[✓] Network resources

! Doctor found issues in 1 category.

とりあえず、以下のコマンドを実行しました。

xcodebuild -downloadPlatform iOS 

xcodebuildコマンドはXCodeプロジェクトのビルド、テスト、およびそのほかの操作を行うために使用されます。
-downloadPlatform iOSは、iOS用のプラットフォームリソースをダウンロードするためのオプションです。

👇もう一度、flutter doctorを実行すると先ほどのエラーが出力されなくなりました。

user@USERnoMacBook-Pro mobile-app % flutter doctor                   
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.19.5, on macOS 14.4.1 23E224 darwin-x64, locale
    ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.2)
[✓] VS Code (version 1.88.0)
[✓] Connected device (2 available)
[✓] Network resources

• No issues found!

Invalid Pre-Release Train. The train version '1.4.2' is closed for new build submissions

flutter build ipa コマンドでipaファイルを作成してApple Store Connectにアプリをあげようとしたら、タイトルのようなエラーが発生しました。

バージョン1.4.2で新しいビルドの提出を終了しているため、バージョン1.4.3で新しいビルドを提出したらうまくいきました。
https://qiita.com/orimomo/items/65bfc6d9819486f2d491

Discussion