Open13

Flutterなんでもメモ

futaba3futaba3

Widget描画時に一回だけ行いたい処理で使う関数

  • StatefulWidget のinitState()
  • WidgetsBinding.instance.addPostFrameCallback()
  • flutter hooksのuseEffect()

それぞれの違いは処理が実行されるタイミング。処理を行いたいタイミングに応じて使い分ける。
initState()useEffect()はWidgetの描画が完了する前に読み込まれる。
WidgetsBinding.instance.addPostFrameCallback()はWidgetが描画されてから処理を実行してくれる。
例えばuseEffect()内でWidgetsBinding.instance.addPostFrameCallback()を利用すると、ウィジェットの再構築時に毎回Widget描画後の処理を実行できる。
https://zenn.dev/kirisimacreate/articles/8fe3c5da372170

futaba3futaba3

https://github.com/flutter/flutter/issues/22025

Cannot listen to inherited widgets inside HookState.initState. Use HookState.build instead

useEffect 内で直接 DefaultTabController.of(context) を呼び出しているために発生しています。useEffect は initState のタイミングで実行されるため、この時点では InheritedWidget にアクセスできません。

futaba3futaba3

pubを使って何らかファイル生成するときのコマンド

ex. flutter_svgでsvg画像を追加する時、freezedしたファイルを生成するとき、retrofitのAPIクライアントファイルを生成するときなど

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

dartの三項演算子

条件式 ?1 :2
futaba3futaba3

Flutter関係ないけどgitで追跡していたファイルを途中から追跡をやめたいとき
.gitignoreに追加するだけでなく対象ファイルのキャッシュを削除する必要がある

git rm --cached android/app/src/main/AndroidManifest.xml
git commit -m "Remove AndroidManifest.xml from version control"
futaba3futaba3

useAutomaticKeepAliveClient() タブを切り替えてもステートを保持してくれる

futaba3futaba3

演算子
スプレッド演算子 (...)
スプレッド演算子は、リストやマップなどのコレクションを他のコレクションに展開するために使用されます。ここでは、条件に基づいてウィジェットのリストに要素を追加するために使われています。
スプレッド演算子は、Listのような複数の値を保持するコレクションに、
複数の値を一気に挿入するのに用います。

コレクション・リテラル ([])
コレクション・リテラルは、リストやマップなどのコレクションを作成するための構文です。ここでは、ウィジェットのリストを作成するために使われています。

https://blog.flutteruniv.com/dart-cascades/