基礎から学ぶFlutter


基礎から学ぶ Flutter


C&R研究所


著者:石井幸次


PROLOGUE
本書について

CHAPTER 01 スタートガイド
001 Flutterとは
002 Flutterの利点
 高い生産性
 美しく高度なカスタマイズ可能なUI
 ネイティブパフォーマンス
003 開発環境構築
 macOSでの環境構築
 コードフォーマットとLinter
 COLUMN 末尾のカンマ
004 プロジェクトの作成方法
 コマンドでの作成方法
 Android Studioでの作成方法
005 Flutterプロジェクト
 プロジェクト構成
 pubspec.yaml
 main.dart
 まとめ
 COLUMN ホットリロードとホットリスタート
 COLUMN Flutter For Web
006 画面遷移
 画面間のデータの受け渡し
 Named Routes
 Navigator」クラスのその他のメソッド
 まとめ

CHAPTER 02 Dart
007 Dartの歴史
008 Dartの文法
 COLUMN DartPad
 重要なコンセプト
 変数
 COLUMN Null Safety
 Built-in型
 関数
 COLUMN 拡張関数
 例外
 クラス
 コンストラクタ
 Enum
 typedef
 ライブラリと可視性
009 Dartの特徴
 JITとAOT
 シングルスレッド
 イベントループ
 Future
 Stream
 async/await
 ジェネレーター
 Isolate
010 その他の重要な機能
 Conditional member access operator
 カスケード記法
 Spreads記法
 Collection if
 Collection for

CHAPTER 03 ウィジェット
011 基本的なウィジェット
 「Text」「RichText」ウィジェット
 「DefaultTextStyle」ウィジェット
 「Image」「RawImage」ウィジェット
 「Icon」ウィジェット
 「MediaQuery」ウィジェット
012 Single-child layout widgets
 「Container」ウィジェット
 「BoxDecoration」クラス
 「SizedBox」ウィジェット
 「Align」「Center」ウィジェット
 「FractionallySizedBox」ウィジェット
 「Padding」ウィジェット
 「EdgeInsets」クラス
 「ConstrainedBox」ウィジェット
 「BoxConstraints」クラス
 「FittedBox」ウィジェット
 「AspectRatio」ウィジェット
 「LimitedBox」ウィジェット
 「Spacer」ウィジェット
 「LayoutBuilder」ウィジェット
013 Multi-child layout widgets
 「Column」「Row」ウィジェット
 「Stack」ウィジェット
 「Positioned」ウィジェット
 「Expanded」ウィジェット
 「Flexible」ウィジェット
 「Wrap」ウィジェット
 「Table」ウィジェット
 「IndexedStack」ウィジェット
 その他のウィジェット
014 Painting and effects
 「DecoratedBox」ウィジェット
 「Opacity」ウィジェット
 「ClipOval」ウィジェット
 「ClipRect」ウィジェット
 「ClipRRect」ウィジェット
 「CustomPaint」ウィジェット
 「Transform」ウィジェット
 「BackdropFilter」「ImageFilter」ウィジェット
015 Scrolling
 スクロール系のプロパティ
 「ListView」ウィジェット
 「GridView」ウィジェット
 「SingleChildScrollView」ウィジェット
 「PageView」ウィジェット
 「CustomScrollView」「NestedScrollView」ウィジェット
016 Input
 「Form」「FormField」ウィジェット
 「InputDecoration」クラス
017 Interaction model widgets
 「GestureDetector」ウィジェット
 「AbsorbPointer」ウィジェット
 「ReorderableListView」ウィジェット
 「Dismissible」ウィジェット
 「Draggable」「DragTarget」ウィジェット
018 Async
 「FutureBuilder」ウィジェット
 「StreamBuilder」ウィジェット
019 その他
 「Semantics」ウィジェット
 「SafeArea」ウィジェット
 「ValueListenableBuilder」ウィジェット
020 アニメーション系ウィジェット
 アニメーションの種類
 「AnimatedController」を利用しないウィジェット
 「AnimatedController」クラスを利用するウィジェット
 カスタムアニメーション
021 コントローラークラス

CHAPTER 04 Material ComponentsとiOS-Style
022 Material Components
 「MaterialApp」ウィジェット
 「Scaffold」ウィジェット
 「Appbar」
 「Drawer」
 「Tab」「TabBar」「TabBarView」
 Bottom Navigation
 「SliverAppBar」「SliverList」「FlexibleSpaceBar」
 「InkWell」ウィジェット
 「RaisedButton」「FlatButton」「OutlineButton」
 「IconButton」
 「FloatingActionButton」
 「DropdownButton」
 「PopupMenuButton」
 「ButtonBar」
 「ToggleButtons」
 「Checkbox」「Radio」「Switch」ウィジェット
 「Chip」ウィジェット
 「TextField」ウィジェット
 「Slider」「RangeSlider」ウィジェット
 「ListTile」ウィジェット
 「Card」ウィジェット
 「Stepper」ウィジェット
 「Tooltip」ウィジェット
 「ColorFiltered」ウィジェット
 「LinearProgressIndicator」「CircularProgressIndicator」ウィジェット
 「RefreshIndicator」ウィジェット
 「DataTable」ウィジェット
 「ExpansionPanelList」「ExpansionPanel」ウィジェット
 Date & Time Pickers
 「SimpleDialog」ウィジェット
 「AlertDialog」ウィジェット
 「BottomSheet」
 「SnackBar」ウィジェット
023 Material Theming
 基本
 ボタン・アイコン
 ダイアログ
 フォーム
 「SnackBar」ウィジェット
 Dark mode
024 Cupertino(iOS-style widgets)
 「CupertinoApp」ウィジェット
 「CupertinoPageScaffold」ウィジェット
 「CupertinoNavigationBar」ウィジェット
 「CupertinoSliverNavigationBar」ウィジェット
 「CupertinoTabScaffold」「CupertinoTabBar」「CupertinoTabView」ウィジェット
 「CupertinoButton」ウィジェット
 「CupertinoTextField」ウィジェット
 「CupertinoSegmentedControl」ウィジェット
 「CupertinoSwitch」ウィジェット
 「CupertinoSlider」ウィジェット
 「CupertinoActivityIndicator」ウィジェット
 「CupertinoDatePicker」ウィジェット
 「CupertinoTimePicker」ウィジェット
 「CupertinoAlertDialog」ウィジェット
 「CupertinoActionSheet」ウィジェット「CupertinoPicker」ウィジェット

CHAPTER 05 ライブラリ
025 パッケージの種類
 Dartパッケージ
 Pluginパッケージ
026 パッケージの組み込み方法
027 便利なパッケージ
 「http」パッケージ
 COLUMN quicktype
 COLUMN openapi-generator
 「graphql」パッケージ
 「shared_preferences」パッケージ
 「sqflite」パッケージ
 「intl」「intl_translation」パッケージ
028 プラットフォームアクセスとPluginパッケージ
 プラットフォームへのアクセス方法
 Pluginパッケージの作り方
 COLUMN Platform View

CHAPTER 06 Flutterの内部構造
029 ライフサイクル
 StatelessWidget
 StatefulWidget
 RenderObjectWidget
 WidgetsBindingObserver
030 Key
 COLUMN 主なKeyの実装
031 BuildContext
 COLUMN なぜ「showSnackBar」をするとエラーが起きる場合があるのか

CHAPTER 07 アーキテクチャ
032 サンプルアプリの概要
033 「setState()」メソッドだけを使ったサンプル
034 「InheritedWidget」ウィジェットとは
035 「InheritedWidget」ウィジェットを使ったサンプル
 COLUMN v1.12.1からのDeprecated
036「InheritedModel」ウィジェットについて
037 「StreamBuilder」ウィジェットを使ったサンプル
038 BLoCパターンとは
 入力と出力は単純な「Sinks」「Streams」のみ
 依存関係は注入可能でプラットフォームに依存しない
 プラットフォームによる分岐処理を書いては駄目
 UI設計のガイドライン
039 BLoCパターン(非同期)のサンプル
040 BLoCパターン+「InheritedWidget」ウィジェットのサンプル
041 BLoCパターン +「provier」プラグインのサンプル
042 Scoped Modelパターンとは
043 「scoped_model」プラグインのサンプル
 ScopedModel.of vs. ScopedModelDescendant
044 標準機能だけのScoped Modelのサンプル
 ValueListenableBuilder・ValueNotifier
045 「provider」プラグインによるScoped Modelのサンプル
 ChangeNotifierProvider
046 Reduxパターンとは
 Reduxの3原則
 Data Flow
 Reduxでの構造と処理の流れ
 データフロー図
047 Reduxパターンのサンプル
 State
 Action
 Reducer
 Store
 Middleware
 UIStoreConnector vs. StoreBuilder

CHAPTER 08 テスト
048 単体テスト
 基本
 mock_web_server
 mockito
 COLUMN 暗黙的インターフェイス
 COLUMN 「mockito」パッケージのTips集
049 Widgetのテスト
 COLUMN Finder
 COLUMN 「Matcher」クラス
050 インテグレーションテスト
 インストルメンテーション
 テストスイート
 テスト実行
 パフォーマンスプロファイリング

CHAPTER 09 パフォーマンスチューニング
051 フレームレート
052 ウィジェットの再構築
053 パフォーマンス測定
 ウィジェットの再構築数が問題の場合
 UIスレッドで問題がある場合
054 パフォーマンスを意識した実装
 ウィジェットの再構築を意識する
 「saveLayer()」メソッドに気を付ける
 アニメーションでの「Opacity」ウィジェットを避ける
 「AnimatedBuilder」ウィジェットは「builder」関数を意識する

APPENDIX アセット
055 Asset
Assetの指定
Asset variants
テキストAssetの読み込み
プラットフォームからの読み込み
アプリのアイコンの設定
起動画面の設定

索 引

書籍目次

Posted by shi-n