第3回まで無料

Dart & Flutter 入門コース

環境構築から、Dart の文法・Widget とレイアウト・画面遷移とフォーム・Riverpod による状態管理・HTTP と保存・テスト・署名とストア提出まで。全50レッスンで「1 つのコードから iOS・Android・Web に出せるメモアプリを、テスト付きでビルドできる」ところまで進みます。コードと実行結果はすべて Flutter 3.47.5 / Dart 3.13.4 で実際に動かしたものです。

カリキュラム

全50レッスンを7つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ ブラウザ内で実行できないため、手元に Flutter SDK 3.47 系を入れて dart run と flutter test で試してください。第1〜5章は実機もエミュレータも要りません。第6章から先で、シミュレータとエミュレータを使います。

Chapter 1 — Dart の文法(第1〜9回)

Flutter のコードを読むために要る Dart だけを、実際に動かしながら押さえます。型と null 安全・コレクション・クラス・sealed class・非同期まで進み、この章を抜ければ第2章以降のコードが「知らない文法」で止まらなくなります。

1

Dart と Flutter の関係(Flet との違い)

Flutter が何をするものかと、そこで使う言語が Dart であること。Python から使う Flet との立ち位置の違いを最初に整理する。

Free
2

環境を作って dart run で動かす

Flutter SDK の入れ方と、入っているかの確かめ方。dart run で 1 ファイルを動かし、flutter doctor の読み方を押さえる。

Free
3

変数と型(var・final・const)

var の型推論、final と const の違い、よく使う組み込み型。const がコンパイル時に決まる値であることを実際に確かめる。

Free
4

null 安全(?・?.・??・!)

null が入る型と入らない型を分ける仕組み。?. と ?? で安全にたどる方法と、! を使ってよい場面の見分け方。

🔒 ベーシック
5

コレクション(List・Map・Set)

3 つのコレクションの使い分けと、map・where などの変換。スプレッドと collection if で画面の組み立てが短くなることを確かめる。

🔒 ベーシック
6

関数と名前付き引数

Flutter のコードで多用される名前付き引数と required の書き方。無名関数・アロー・クロージャまで、引数として関数を渡す形に慣れる。

🔒 ベーシック
7

クラスとコンストラクタ

this.x の省略記法、名前付きコンストラクタ、getter、継承と mixin。copyWith を書いて、あとで状態を置き換える下地を作る。

🔒 ベーシック
8

sealed class と switch 式

「どれかひとつ」を型で表す書き方。switch 式のパターンと、分岐の抜けをコンパイラに見つけさせる方法。レコードも合わせて押さえる。

🔒 ベーシック
9

非同期(Future・async/await・Stream)

時間のかかる処理の書き方。await の前後で何が起きるか、エラーの受け止め方、値が何度も流れてくる Stream までを実行して確かめる。

🔒 ベーシック

Chapter 2 — Flutter を動かす(第10〜16回)

プロジェクトを作って最初の画面を出し、Widget ツリー・StatelessWidget と StatefulWidget・レイアウトの基本を覚えます。最後は「制約は下へ、大きさは上へ」の原則を実測して、はみ出しのエラーを自分で直せるところまで行きます。

10

最初の Flutter アプリ(flutter create)

flutter create が作るファイルの意味と、main.dart を最小まで削って読む方法。作った直後のテストを走らせて、動いていることを確かめる。

🔒 ベーシック
11

Widget ツリーの読み方

画面が Widget の入れ子でできていること。実際のツリーを吐き出して、自分が書いた部品と Flutter が足した部品を見分ける。

🔒 ベーシック
12

StatelessWidget(build は何度でも呼ばれる)

値を受け取って見た目を返すだけの Widget。build が呼ばれる回数を数えて、重い処理を置いてはいけない理由を確かめる。

🔒 ベーシック
13

StatefulWidget と setState

自分で値を覚える Widget。State は作り直されないこと、setState を呼ばないと画面が変わらないことを、実際に押して確かめる。

🔒 ベーシック
14

Column と Row と Expanded

縦横に並べる 2 つの Widget と、余りの分け方。main/cross の軸の向きと、Expanded の flex が実際に何ピクセルになるかを測る。

🔒 ベーシック
15

Container・Padding・Stack

余白と装飾をどの Widget が担うか。Container の中の順番と、Stack で重ねたときの位置を実際に測って確かめる。

🔒 ベーシック
16

制約はどう伝わるか

親から子へ制約が降り、子から親へ大きさが返る仕組み。LayoutBuilder で実際の制約を印刷し、高さが無限になる場面を再現する。

🔒 ベーシック

Chapter 3 — 画面を組む(第17〜24回)

一覧・スクロール・画面遷移・入力フォーム・テーマをそろえて、アプリらしい画面を組み立てます。最後はメモの一覧画面を 1 枚作り、次の章で状態管理へ持ち上げる前の形を用意します。

17

ListView で一覧を出す

ListView の 3 つの作り方と使い分け。builder が「見えている分だけ」しか作らないことを、呼ばれた回数を数えて確かめる。

🔒 ベーシック
18

スクロールと Sliver

スクロールする領域の正体と、CustomScrollView で見出しとリストを 1 本のスクロールにまとめる方法。伸び縮みする AppBar を測る。

🔒 ベーシック
19

Navigator で画面を移る

画面を積み上げて戻る仕組み。push と pop、戻るボタンが自動で出る条件、積まれている枚数の数え方を実際に確かめる。

🔒 ベーシック
20

画面に値を渡す・受け取る

コンストラクタで渡す方法と、pop の戻り値で受け取る方法。await した push が何を返すか、キャンセルしたときに何が来るかを確かめる。

🔒 ベーシック
21

TextField と入力の受け取り方

入力欄の値をどこで持つか。controller・onChanged・FocusNode の役割を分け、実際に文字を打ち込んで値の変化を追う。

🔒 ベーシック
22

Form とバリデーション

複数の入力欄をまとめて検証する仕組み。validator の書き方と、エラーメッセージが出る/消えるタイミングを実際に動かして確かめる。

🔒 ベーシック
23

テーマと Material 3

色を 1 色決めれば全部そろう仕組み。ColorScheme.fromSeed の中身を印刷し、ダークモードの切り替えまでを確かめる。

🔒 ベーシック
24

【実践】メモ一覧の画面を組む

第3章までの部品を 1 画面にまとめる。一覧・追加・チェック・削除を setState だけで作り、次章で状態管理へ持ち上げる前の形を作る。

🔒 ベーシック

Chapter 4 — 状態管理(第25〜31回)

setState がどこで行き詰まるかを実際に確かめてから、InheritedWidget と Riverpod で値を Widget ツリーの外へ出します。再描画の範囲を数えながら絞り、最後はメモアプリを Riverpod に載せ替えます。

25

setState の限界

値を持ち上げると何が起きるか。兄弟の Widget が値を共有できない理由と、バケツリレーが深くなったときの症状を実際に作って確かめる。

🔒 ベーシック
26

InheritedWidget と of(context)

通り道を飛ばして値を配る Flutter 標準の仕組み。Theme.of が何をしているかを、自分で同じものを書いて確かめる。

🔒 ベーシック
27

Riverpod を入れる

ProviderScope と Provider の役割。ref.watch と ref.read の違いを押さえ、Widget を立てずに ProviderContainer だけでテストする方法まで。

🔒 ベーシック
28

Notifier で状態を書き換える

読むだけの Provider から、書き換えられる Notifier へ。state への代入が通知になること、同じ値を入れると何も起きないことを確かめる。

🔒 ベーシック
29

AsyncNotifier と AsyncValue

読み込み中・成功・失敗を 1 つの型で持つ仕組み。when で 3 つに出し分け、Riverpod 3 が失敗を黙って再試行することを実測して確かめる。

🔒 ベーシック
30

再描画の範囲を絞る

watch した Widget だけが描き直される仕組みを使い切る。select で欄を 1 つだけ見張り、Consumer で描き直す枠を小さくする。

🔒 ベーシック
31

【実践】メモアプリを Riverpod に載せ替える

第24回の setState 版を、状態と画面に切り分ける。Notifier をテストで直接動かし、画面を描かずにふるまいを確かめられる形にする。

🔒 ベーシック

Chapter 5 — 外とつなぐ(第32〜38回)

手元にサーバーを立てて HTTP を往復させ、JSON を型に写し取り、失敗の種類を型で表します。設定とファイルへの保存まで進み、最後は閉じて開き直しても残るメモアプリに仕上げます。

32

HTTP で取ってくる

http パッケージの使い方と、ステータスコードの扱い。手元にサーバーを立てて、GET と POST を実際に往復させる。

🔒 ベーシック
33

JSON を型に変換する

jsonDecode が返す dynamic を、自分のクラスへ写し取る手順。欠けた鍵・違う型・null をどこで受け止めるかを決める。

🔒 ベーシック
34

通信の失敗を型で表す

つながらない・遅い・サーバーが怒っている・返事が壊れている、を分けて扱う。sealed class で失敗の種類を数え上げ、画面に出す文言まで決める。

🔒 ベーシック
35

小さな値を端末に残す

設定や最後に開いたタブのような小さな値の保存。SharedPreferences の使い方と、保存できる型・できない型の見分け方。

🔒 ベーシック
36

ファイルを読み書きする

アプリが書いてよい場所と、dart:io の File の使い方。書き込みの途中で落ちてもデータが壊れない書き方まで。

🔒 ベーシック
37

画像を出す

ネットワーク画像・アセット・バイト列の出し分け。読み込み中と失敗のときに何を出すかを決め、無駄に大きい画像を抱えない方法まで。

🔒 ベーシック
38

【実践】メモを保存して復元する

第31回の Notifier にファイル保存をつなぐ。置き場所を Provider にして差し替えられるようにし、閉じて開き直しても残ることをテストで確かめる。

🔒 ベーシック

Chapter 6 — 端末の機能とテスト(第39〜44回)

プラットフォームごとの分岐と権限の流れを押さえ、ユニット・Widget・統合の 3 種類のテストを書き分けます。落ちたテストの読み方まで扱うので、赤くなった出力で手が止まらなくなります。

Chapter 7 — 出す(第45〜50回)

debug と release の違いから、Android の署名・iOS のビルド・アイコン・ストア提出の準備までを実際のコマンドで通します。最後に Flet との違いを並べ直し、次にどこへ進むかの地図を渡します。

全50レッスンを終えたら、同じ画面の仕組みを Python から使う Flet 入門コース、ネイティブ側から見直す Kotlin & Android 入門コース や Swift 入門コース、アプリがつなぐ API を設計する API 設計入門コース へ。メンバーシップで全コースが解放されます。