🦅

非同期処理の中にBuildContextを書くとLintの警告が出る!

2023/03/12に公開

画面遷移のコードを書くと出てきた?

このようなものが出てきて困りました😇
非同期処理の中に、BuildContext書いてはダメだそうです。

こちらの動画でその理由が解説がされています。字幕を翻訳してみれば日本語表示できますので、なんとなくわかった。
動画で、「Flutterで安全にBuildするには、BuildContextの非同期仕様を避けることですが」と解説が出てきました。
https://www.youtube.com/watch?v=bzWaMpD1LHY

解決策が過去の記事で紹介されていたのですが、StatefulWidgetでしか使えないようで困りました。
https://note.com/saburo_engineer/n/neca1aff48fc5

でも、Flutter3.3.7から、便利な機能が出てきたのでバージョンアップしたら、解決ができました。

こちらのサイトが参考になりました!
https://codewithandrea.com/tips/flutter-3.7-using-context-mounted/

Up until recently, it wasn't possible to check if a StatelessWidget was mounted in Flutter.

But since Flutter 3.7, BuildContext itself has a mounted property! 🎉

つい最近まで、FlutterではStatelessWidgetがマウントされているかどうかを確認することができませんでした。

しかし、Flutter 3.7からはBuildContext自体にmountedプロパティが用意されているのです! 🎉

バージョンアップすると解決できました。
if (context.mounted)でgo_routerのコードを囲む。

最後に

Flutterは進化するのが、速くて以前のバージョンでは解決する方法が限定されていたのが、他の方法でできるようになって便利なっていくから、開発体験が良い技術だなといつも感動します!
最近は、3Dのゲームも作れるようになったらしい?

Flutter大学

Discussion