第1章 環境構築とアプリの実行 ── Flutter SDK、Android Studio、Xcode
▼1.1
# なぜFlutterが注目を集めているのか
## マルチプラットフォーム
## 高速な実行速度
## 優れた開発者体験
▼1.2
# Flutterの環境構築
## Flutterのインストール
## プラットフォームごとの環境のインストール
### Androidの開発環境をインストールする
### iOSの開発環境をインストールする
#### Tips:Xcodeのバージョンを使い分けるインストールのしかた
#### Tips:CocoaPodsがインストールできない場合
## Android Studioの設定 ── Flutterと親和性の高いIDE
▼1.3
# fvmによるFlutterのバージョン管理
## fvmのインストール
## fvmを利用したFlutterのインストール
▼1.4
# プロジェクトの作成
## Android Studioでの作成手順
## テンプレートプロジェクトをのぞいてみよう
## fvmの設定
▼1.5
# Flutterアプリの実行
## iOS Simulatorでの実行
## Android Emulatorでの実行
### Android Emulatorを作成する
### Android Emulatorを起動し、アプリを実行する
▼1.6
# まとめ
第2章 Dartの言語仕様
▼2.1
# 変数宣言
## 変数と型推論
## 定数 ── finalとconst
## いろいろな初期値の与え方
### 遅延初期化
▼2.2
# 組み込み型
## 数値型
### int ── 整数型
### double ── 浮動小数型
## String ── 文字列型
## bool ── 論理型
## List ── 配列
## Set ── 集合
## Map ── 連想配列
## Record ── タプル
## Objectクラス ── すべてのクラスのスーパークラス
▼2.3
# ジェネリクス
## ジェネリッククラス
## ジェネリック関数
▼2.4
# 演算子
## 算術演算子
## 比較演算子
## 三項演算子
## カスケード記法
## コレクションのオペレータ
### Spread演算子
### 制御構文演算子
▼2.5
# 制御構文
## 分岐
### if文
### if-case文
### switch文
### 式としてのswitch
## ループ
### for文
### while文
### breakとcontinue
▼2.6
# パターン
## マッチング機能しか持たないパターン
### 論理演算子、比較演算子
### 一致判定
## マッチングと分解宣言の2つの機能を持つパターン
### List
### Map
### Record
### Object
#### Tips:for-in文での分解宣言
## パターンを補助する構文
### キャスト
### nullチェック
### nullアサーション
### ワイルドカード
▼2.7
# 例外処理
## 例外の型 ── ErrorとException
## 例外の捕捉
## 例外の再スロー
## finally句
## アサーション
## Flutterの例外処理
▼2.8
# コメント
▼2.9
# null安全
## null許容演算子
## null認識演算子
## nullアサーション演算子
## タイププロモーション
## そのほかの便利なnull関連演算子
▼2.10
# ライブラリと可視性
▼2.11
# 関数
## 引数
### 省略可能引数
### 名前付き引数
## 関数の省略記法
## 第一級関数と匿名関数
▼2.12
# クラス
## ゲッタとセッタ
## いろいろなコンストラクタ
### constantコンストラクタ
### 名前付きコンストラクタ
### factoryコンストラクタ
## クラス継承
### スーパークラスのコンストラクタ
## 暗黙のインタフェース
## 拡張メソッド
## mixin ── クラスに機能を追加する
## Enum
### Enumの宣言
### Enumの利用
## クラス修飾子
### abstract
### base
### interface
### abstractとinterfaceの組み合わせ
### final
### mixin
### sealed
▼2.13
# 非同期処理
## Future型
### エラーハンドリング
## Stream型
### Streamの購読をキャンセル、一時停止する
### Stream型を生成する関数
### Streamの終わり
### エラーハンドリング
### StreamController
### ブロードキャスト
### Streamを変更する
## Zone ── 非同期処理のグループ化
## アイソレート
### Flutterアプリとアイソレート
▼2.14
# まとめ
第3章 フレームワークの中心となるWidgetの実装体験 ── StatelessWidget、StatefulWidget
▼3.1
# DartPadでアプリ開発を体験しよう
▼3.2
# 状態を持たないWidget ── StatelessWidget
## 独自のStatelessWidgetを定義する
▼3.3
# 状態を持つWidget ── StatefulWidget
## Widgetのタップ操作を検知する
## StatefulWidgetを継承する
## Widgetの状態を変化させる
▼3.4
# まとめ
第4章 アプリの日本語化対応、アセット管理、環境変数
▼4.1
# パッケージやツールを導入する
## パッケージの導入方法
## パッケージバージョンの指定方法
## パッケージバージョンの更新方法
#### Tips:セマンティックバージョニングについて
▼4.2
# アプリを日本語に対応させる
## 意図せず英語表示されるケース
### フレームワークが提供する表示文字列
### 日付フォーマット
## アプリを日本にローカライズする
### フレームワークが提供する表示文字列を日本語化する
### 日付フォーマットを日本語化する
### iOSアプリの対応言語を設定する
## メッセージをローカライズする
### コードジェネレータを設定する
### arbファイルを作成する
### ローカライズされたメッセージを表示する
## arbファイルの扱い方
### プレースホルダ
### 単数形と複数形の対応
### 複数の言語への対応
▼4.3
# プロジェクトにアセットを追加する
## アプリに画像を追加する
## 端末の解像度に応じて画像を切り替える
## flutter_gen ── 型安全にアセットを扱うパッケージ
### flutter_genを導入する
### SVG画像の利用
### その他のアセット
▼4.4
# dart-define-from-file ── 環境変数を扱う
## 環境変数をJSON形式で記述する
## 環境変数をコードから参照する
▼4.5
# まとめ
第5章 テーマとルーティング
▼5.1
# テーマ ── アプリ全体のヴィジュアルを管理
## フレームワークによるテーマの自動計算機能
### ダークモード対応
## アプリ独自のテーマ管理
### Theme Extensionを利用したアプリのサンプル
#### Tips:Cupertino(クパチーノ)デザイン
▼5.2
# ナビゲーションとルーティング ── 画面遷移を実現する3つの手法
## NavigatorウィジェットとRouteクラスによる画面遷移 ── Navigator 1.0
### 画面間でのデータの受け渡し
## 名前付きルートによる画面遷移 ── Navigator 1.0(非推奨)
### 名前付きルートの制限事項
## Routerウィジェットによる画面遷移 ── Navigator 2.0
### go_routerによる画面スタックの書き換えを体験する
### GoRouteで入れ子構造を作る
### goとpushの違い
▼5.3
# まとめ
第6章 実践ハンズオン(1) ── 画像編集アプリを開発
▼6.1
# 開発するアプリの概要
## スタート画面
## 画像選択画面
## 画像編集画面
## 開発の土台づくり
## テーマと画面遷移の方針
▼6.2
# プロジェクトを作成する
## 開発の土台づくり
▼6.3
# アプリ起動後のスタート画面を作成する
## レイアウトを作成する
▼6.4
# テーマをアレンジする
▼6.5
# アプリを日本語化する
## パッケージを導入する
## ローカライズの構成ファイルを作成する
## arbファイルを作成する
## ローカライズされたメッセージを適用する
## App Storeでの表示言語を設定する
▼6.6
# 画像選択画面を作成する
## メッセージを追加する
## レイアウトを作成する
## 画像ライブラリから画像を取得する
### パッケージを導入する
### iOSネイティブの設定を行う
### 画像を取得する処理を実装する
### 画像取得処理をWidgetに組み込む
▼6.7
# 画像編集画面を作成する
## メッセージを追加する
## レイアウトを作成する
## 画像編集画面への遷移を実装する
## アイコンを追加する ── flutter_genによるアセット管理
## 画像を編集する処理を実装する
▼6.8
# まとめ
#### Tips:WidgetとStateのライフサイクルについて
第7章 状態管理とRiverpod
▼7.1
# Flutterアプリにおける状態管理
▼7.2
# Riverpodとはどのようなパッケージか
#### Tips:宣言的UIとしてのFlutter
## Riverpodの主要なクラス
## 実装サンプル
▼7.3
# Riverpodの関連パッケージ
## 基本機能を提供するパッケージ
## Providerのコードを生成するパッケージ
## 静的解析を行うパッケージ
## 関連パッケージまとめ
▼7.4
# Riverpodの使い方
## Providerの種類
### 関数ベースのProvider
### クラスベースのProvider
## 非同期処理を行うProvider
### 非同期なProviderとRaw型
## Providerから値を取得する
### Providerの値をフィルタする
## Providerのライフサイクル
## Providerにパラメータを渡す
▼7.5
# まとめ
第8章 実践ハンズオン(2) ── ひらがな変換アプリを開発
▼8.1
# 開発するアプリの概要
## 入力状態
## レスポンス待ち状態
## 変換完了状態
## 開発の土台づくり
## テーマと画面遷移の方針
▼8.2
# プロジェクトを作成する
▼8.3
# アプリで使用するパッケージを導入する
## riverpod_lintを設定する
▼8.4
# 入力状態のウィジェットを実装する
## レイアウトを作成する
## レイアウトを表示する
## 入力値のバリデーションを行う
▼8.5
# 入力文字を取得する
▼8.6
# ひらがな化するWeb APIを呼び出す実装をする
## リクエスト、レスポンスオブジェクトを定義する
## アプリケーションIDを設定する
## Web APIを呼び出す
▼8.7
# アプリの状態を管理する
## 状態を表現するクラスを作成する
▼8.8
# 状態に応じて表示を切り替える
## レスポンス待ち状態のウィジェットを実装する
## 変換完了状態のウィジェットを実装する
## 画面の切り替えを行う
## ひらがな変換処理の呼び出しを修正する
▼8.9
# まとめ
第9章 フレームワークによるパフォーマンスの最適化 ── BuildContext、Key
▼9.1
# BuildContextは何者なのか ── Element
## 祖先の情報にアクセスできるBuildContext
### Elementがツリーを構成していく工程
## StatefulWidgetの状態を保持する役割
#### Tips:宣言的UIとElementの再利用
▼9.2
# Elementの再利用とパフォーマンス ── RenderObject
## RenderObjectは高コストな計算を行う
## RenderObjectは状態を持つ
## Elementの再利用はパフォーマンスに影響する
▼9.3
# Keyは何に使うのか
## Elementが再利用される条件
## Elementが再利用される様子を見てみよう
### Keyを利用したElementの再利用
## Keyの種類
▼9.4
# 局所的にWidgetを更新するしくみ ── InheritedWidget
▼9.5
# まとめ
第10章 高速で保守性の高いアプリを開発するためのコツ
▼10.1
# パフォーマンスと保守性、どちらを優先すべきか
## 高速でないアプリとは
## 高速だが保守性が低い実装
▼10.2
# 高速で保守性の高い実装
## buildメソッドで高コストな計算をしない
## buildメソッドで大きなウィジェットツリーを構築しない
### ウィジェットツリーの階層が浅くなるようウィジェットの選択を見なおす
## const修飾子を付与する
### const修飾子が使えるようウィジェットの選択を見なおす
### 独自のウィジェットクラスにconstantコンストラクタを実装する
## 状態を末端のウィジェットに移す
## Riverpodの状態監視は末端のウィジェットで行う
#### Tips:アプリのパフォーマンスを計測する
▼10.3
# まとめ
第11章 Flutterアプリ開発に必要なネイティブの知識
▼11.1
# ネイティブAPIのバージョンと最低サポートOSのバージョン
## 最低サポートOSのバージョン
### iOSの最低サポートOSバージョンを設定する
#### Tips:XcodeのBuild Settings
### Androidの最低サポートOSバージョンを設定する
## ビルドSDKバージョン
### iOSのビルドSDKバージョンの設定
### AndroidのビルドSDKバージョンの設定
## ターゲットSDKバージョン
▼11.2
# アプリの設定変更
## アプリ名
### iOSのアプリ名を変更する
### Androidのアプリ名を変更する
## アプリアイコン
### iOSのアプリアイコンを変更する
### Androidのアプリアイコンを変更する
### アプリアイコンを手軽に生成するパッケージ
## スプラッシュ画面
### iOSとAndroidで異なるスプラッシュ画面の位置付け
### iOSのスプラッシュ画面
### Androidのスプラッシュ画面
### スプラッシュ画面を手軽に実現するパッケージ
## アプリのID
### iOSのアプリIDを設定する
### AndroidのアプリIDを設定する
▼11.3
# アプリの配布とコード署名
## iOSのコード署名
### 管理の難しい秘密鍵
### アプリに署名する
## Androidのコード署名
## apkファイルとaabファイル
### アプリに署名する
### aabファイルをアップロードする
▼11.4
# まとめ