Start Debugging

dart

122 件 · ページ2/13

2026-10-19 flutterdarttheming

Flutter で ThemeExtension を使ってカスタムデザイントークンを定義し、ライトテーマとダークテーマの間でアニメーションさせる方法

ThemeExtension をサブクラス化し、extensions リストで ThemeData ごとに 1 つのインスタンスを登録し、Theme.of(context).extension<T>() で読み取ります。さらに本物の lerp を書いて、ライトとダークの切り替え中に MaterialApp の AnimatedTheme がトークンを補間できるようにします。色、角丸、シャドウ、テキストスタイル、真偽値の扱い、拡張が見つからないときのクラッシュ、他のすべての拡張を消してしまう copyWith の落とし穴、== と hashCode が必要な理由まで、すべて Flutter 3.44.8 のウィジェットテストで検証しています。

Flutter で子ウィジェットの型が変わらないときに AnimatedSwitcher をアニメーションさせる方法

AnimatedSwitcher は Widget.canUpdate が新しい子を別のウィジェットと判定したときだけ遷移します。そのため、キーのない Text から Text への切り替えはその場で更新されるだけです。この記事では 1 行の修正、キーを置くべき位置、UniqueKey が落とし穴になる理由、静的な transitionBuilder が引き起こすスライド方向のバグ、既定の Stack によるレイアウトのずれを、Flutter 3.44.8 のウィジェットテストで検証して解説します。
2026-10-19 flutterdartandroid

Flutter で RestorationMixin を使って Android のプロセス終了後に UI 状態を復元する方法

Android はメモリを確保するためにバックグラウンドの Flutter アプリを終了させ、ユーザーが戻ってくると StatefulWidget はすべて初期状態から始まります。restorationScopeId、RestorationMixin、Restorable プロパティで復元を有効にし、テキストフィールド、スクロール位置、push したルートを復元し、独自の RestorableValue を書き、restartAndRestore と adb ですべてをテストする方法を解説します。Flutter 3.44.8 と Android 16 エミュレーターで検証済みです。

Flutter で runZonedGuarded と PlatformDispatcher.instance.onError を使って捕捉されない非同期エラーをキャッチする方法

FlutterError.onError が受け取るのは、フレームワークのコールバック内で投げられたエラーだけです。await しない Future、タイマー、ストリーム、await の後のコードで起きたエラーは別の場所に流れます。どのハンドラーがどのエラーを捕捉するかを Flutter 3.44.8 で計測し、Web を含めてすべてを捕捉する main() の設定を紹介します。
2026-10-18 dartflutterstreams

rxdart の BehaviorSubject なしで Dart Stream の最新値を後から購読するリスナーに再送する方法

broadcast の StreamController は、購読する前に発行されたイベントをすべて破棄します。ここでは、Stream.multi で作る依存関係なしの BehaviorSubject 代替、既存のストリームに使える replayLatest() 拡張、イベントを黙って取りこぼす async* の近道、StreamBuilder の initialData の注意点を、すべて Dart 3.12.2 で検証して紹介します。

Flutter アプリのローカルストレージを Hive から Drift へ移行する (hive_ce 2.22 から drift 2.35 へ)

既存の Hive box を、ユーザーの端末上の drift SQLite データベースへ一度だけ安全にインポートする方法です。スキーマ設計、インポート関数、冪等性、box の削除に加えて、データを黙って壊す 2 つの落とし穴 (DateTime の精度とクラス名の衝突) を扱います。Flutter 3.44.8、hive_ce 2.22.0、drift 2.35.2 で検証しています。

修正: flutter upgrade や Flutter バージョンの切り替え後に pubspec.lock が変更扱いになる

Flutter SDK は meta、vector_math、test_api、matcher のバージョンを固定しているため、SDK を変えるたびにロックファイルが再解決されます。さらに flutter upgrade は今いるプロジェクトに対して pub upgrade を実行します。リポジトリごとに Flutter バージョンを 1 つに固定し、CI でロックファイルを強制しましょう。

go_router の StatefulShellRoute で NavigationBar の選択タブを現在のルートと同期させる方法

NavigationBar.selectedIndex は、setState で持つフィールドや initState で作ったコピーではなく、StatefulNavigationShell.currentIndex から取得します。Flutter 3.44.8 と go_router 18.0.2 で検証し、ディープリンク、context.go、ブランチをまたぐ push でずれるパターン、location から算出したインデックスが誤る理由、didUpdateWidget でタブ変更に反応する方法を解説します。
前へ 次へ