Flutterなんでもメモ

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

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

pubを使って何らかファイル生成するときのコマンド
ex. flutter_svgでsvg画像を追加する時、freezedしたファイルを生成するとき、retrofitのAPIクライアントファイルを生成するときなど
flutter pub run build_runner build --delete-conflicting-outputs

flutter clean && dart pub get

dartの三項演算子
条件式 ? 式1 : 式2

flutterのパッケージを紹介してくれている人をみつけた

Flutter関係ないけどgitで追跡していたファイルを途中から追跡をやめたいとき
.gitignoreに追加するだけでなく対象ファイルのキャッシュを削除する必要がある
git rm --cached android/app/src/main/AndroidManifest.xml
git commit -m "Remove AndroidManifest.xml from version control"

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

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

Riverpodの話はこちらに