Start Debugging

dart

122 件 · ページ1/13

Flutter の設定保存に shared_preferences と path_provider の JSON ファイルのどちらを使うべきか

少数のフラットなフラグには shared_preferences (SharedPreferencesWithCache) を、構造化された設定オブジェクトには getApplicationSupportDirectory に置く JSON ファイルを使います。アトミックな書き込みパターン、同時保存の競合状態、Windows と Linux での Documents フォルダーの罠、Web 対応、Flutter 3.44.8 で計測した書き込みコストを解説します。

API キーを公開せずに Flutter Web アプリから OpenAI API を呼び出す方法

Flutter Web ビルドにコンパイルしたものは、--dart-define の値も含めて、すべて平文でブラウザーに配信されます。安全な方法は、キーを保持し、ユーザーを認証し、モデルを固定し、Responses API の SSE をストリーミングで返す小さなバックエンドプロキシだけです。Flutter 3.44、Dart 3.12、http 1.6 で検証した Dart shelf プロキシと Flutter クライアントの完全なコードを紹介します。
2026-10-25 flutterdartios

Flutter で 1 つの画面だけ画面の向きを固定する方法 (iPad のマルチタスクで無視される理由も解説)

SystemChrome.setPreferredOrientations で Flutter の 1 つのルートだけを横向きまたは縦向きに固定し、アプリの他の部分を壊さない方法を解説します。pushReplacement を乗り越えて pop 時に復元されるスタック方式のロック、空のリストがリセットに向かない理由、iPad のマルチタスクと Android 16 の大画面でロックが無視される理由、iPadOS 26 と iOS 27 SDK 以降の UIRequiresFullScreen の扱いを取り上げます。Flutter 3.47.8、Dart 3.13.7、Xcode 27.1 で検証しています。

Dart の List を反復処理しながら ConcurrentModificationError を出さずに要素を削除する方法

for-in ループや forEach の中で remove を呼ぶと ConcurrentModificationError がスローされます。その場でフィルタリングするなら removeWhere、新しいリストを作るなら where か collection-for、インデックスで回すなら逆順のループを使います。Dart 3.13.7 で検証し、ループ内の removeAt が遅い理由をベンチマークで示します。
2026-10-25 dartflutterjson

Dart の sealed クラス階層を JSON にシリアライズ/デシリアライズする方法

JSON に判別フィールドを入れ、sealed な基底クラスのファクトリでそれを switch し、書き戻すときはサブタイプで switch します。Dart 3.13.7 で動作する 3 つの実装(手書きのパターンマッチング、json_serializable 6.15.2、unionKey と fallbackUnion を使う Freezed 4.0.3)と、それぞれに潜む落とし穴を紹介します。
2026-10-24 dartflutterlints

Dart の depend_on_referenced_packages lint とは何か、推移的インポートで警告が出るのはなぜか

depend_on_referenced_packages は、別の依存関係経由で解決できる場合でも、自分の pubspec.yaml に記載されていないパッケージを import または export すると警告します。Dart 3.12.2 と Flutter 3.44.8 でこのルールが何を検査するのか、推移的インポートが実際にバグである理由、そして各パターンの修正方法を解説します。

Flutter アプリを Color.withOpacity から Color.withValues へ移行する (Flutter 3.27 以降)

非推奨になった Color.withOpacity、opacity、value、red、green、blue、alpha を withValues、.a/.r/.g/.b、toARGB32 に置き換えます。dart fix が書き換える範囲、書き換えずに残す 4 つのゲッター、置き換え後に色の厳密なアサーションと Map<Color, T> の検索が壊れる理由、そして withOpacity が Display P3 を黙って失わせる仕組みを解説します。Flutter 3.44.8 と Dart 3.12.2 で検証しました。

Flutter アプリを WidgetsBindingObserver.didChangeAppLifecycleState から AppLifecycleListener に移行する (Flutter 3.13+)

手書きの WidgetsBindingObserver によるライフサイクル処理を AppLifecycleListener に置き換えます。コールバックの対応表、強制される状態遷移、網羅的な switch を壊す新しい hidden 状態、デスクトップの終了リクエスト、突然アサートに失敗するテストまでを扱います。Flutter 3.44.8 と Dart 3.12.2 で検証しています。

Flutter の Expanded と Flexible の違い: FlexFit.tight と FlexFit.loose を解説

子ウィジェットが Row や Column 内の自分の割り当て分を埋める必要があるなら Expanded、割り当て分より小さくてもよいなら Flexible を使います。Flutter 3.44 での実測レイアウトで、余った領域の行き先、loose な子が兄弟に領域を譲らない理由、無制限の制約下で Flexible だけが使える場面を確認します。
次へ