DartPadを使用して
TODOアプリを
作ってみよう

©︎ 2023 nabe1005
  • 渡部 泰生 ( わたなべ たいき )
  • 社内では「なべ」と呼ばれています
  • アプリ開発を担当しています
    • Flutterをよく使ってます
  • 新卒採用も担当しています
©︎ 2023 nabe1005
  • 三宅 武将(みやけ たける)
  • アプリ開発を担当
  • iOS(Swift) の開発もしています
  • 趣味は写真を撮ること
©︎ 2023 nabe1005

💪 今日やること 💪

DartPadという公式のオンラインIDEを使って、
TODOリストを作っていきましょう!

DartPadはこちら! → https://dartpad.dev

©︎ 2023 nabe1005

🎉 今回のゴール 🎉

  • DartPad で Dart と Flutter のプログラムが実行できること
  • Widget とは何かを理解できること
  • StatelessWidget, StatefulWidget がわかること
  • StatefulWidgetでの状態の持ち方・更新の仕方がわかること

終了時にこれらを達成できていれば完璧です!
頑張っていきましょう!

©︎ 2023 nabe1005

🔰 Flutter と DartPad に
触れてみよう!

Flutter と DartPad について、軽くお勉強しましょう。

©︎ 2023 nabe1005
🔰 Flutter と DartPad に触れてみよう!

Flutterとは?

Flutter は Google が提供する、
マルチプラットフォームアプリケーションを
構築するためのフレームワークです。

つまり、Flutterだけで
Android, iOS, Windows, Macなど
さまざまな機器を対象とした
アプリを作成することができます。

開発言語としては Dart という言語を採用しています。

©︎ 2023 nabe1005
🔰 Flutter と DartPad に触れてみよう!

💪 Dart のプログラムを動かしてみよう

DartPad で Dart を動かしてみましょう。

DartPad を開いて、
画面上部の「New Pad」を選択します。

©︎ 2023 nabe1005
🔰 Flutter と DartPad に触れてみよう!
©︎ 2023 nabe1005
🔰 Flutter と DartPad に触れてみよう!

Runボタンで実行してみよう!

©︎ 2023 nabe1005
🔰 Flutter と DartPad に触れてみよう!

©︎ 2023 nabe1005
🔰 Flutter と DartPad に触れてみよう!

💪 Flutter も動かしてみよう 💪

今度は New Pad から Flutter を選択!
Run を押して実行!

©︎ 2023 nabe1005
🔰 Flutter と DartPad に触れてみよう!

©︎ 2023 nabe1005
🔰 Flutter と DartPad に触れてみよう!

ここまで復習

  • 実行するときはRunボタンを押す
  • プログラムを変更しても勝手に実行されない
  • 右側がUI Outputになっていれば、Flutterが書ける状態
©︎ 2023 nabe1005

🧐 Widget とは何なのか

©︎ 2023 nabe1005
🧐 Widget とは何なのか

Widget とは

Widget は、Flutter の UI を構築するための
パーツのことです。

さまざまな Widget を組み合わせていくことで、
UI を作っていきます。

©︎ 2023 nabe1005
🧐 Widget とは何なのか

Samples -> Counter を選択して実行してみよう

©︎ 2023 nabe1005
🧐 Widget とは何なのか

©︎ 2023 nabe1005
🧐 Widget とは何なのか
  • MyApp: アプリ全体の Widget (自作)
  • MeterialApp: マテリアルデザイン用の Widget
  • MyHomePage: カウンターやボタンを表示する Widget (自作)
  • Scaffold: 画面構成を定める Widget
  • AppBar: アプリケーションバー用の Widget
  • Center: 中央寄せにする Widget
  • Text: テキストを表示する Widget
  • FloatingActionButton: アクションボタン用の Widget
  • Icon: アイコンを表示する Widget
©︎ 2023 nabe1005

StatelessWidget

StatefulWidget

©︎ 2023 nabe1005
👀 StatelessWidgetStatefulWidget

違いは、state があるかどうか

©︎ 2023 nabe1005
👀 StatelessWidgetStatefulWidget

🧐 state とは

build という function ( 関数 ) に、
state を渡すことで、UI が構築される

©︎ 2023 nabe1005
👀 StatelessWidgetStatefulWidget

Widget は
アプリの状態を表示するための設計図

状態( state )が与えられると、
Widget の build メソッドが UI を構築します。

この状態( state )を必要とする Widget は StatefulWidget
必要としないものは StatelessWidget

©︎ 2023 nabe1005
👀 StatelessWidgetStatefulWidget

✏️ StatelessWidget

一度構築したらその後は変化しないもの

// StatelessWidgetでは、状態がないのでbuildメソッドもWidgetクラスに直接書く
class Hoge extends StatelessWidget {
 Hoge({super.key});

 @override
 Widget build(BuildContext context) {
   return Container();
 }
}
©︎ 2023 nabe1005
👀 StatelessWidgetStatefulWidget

✏️ StatefulWidget

UIが動的に変化する必要があるもの

©︎ 2023 nabe1005
👀 StatelessWidgetStatefulWidget
// StatefulWidgetでは、状態のクラス(State)を作成して、状態もbuildメソッドもそちらのクラスに記入する
class Fuga extends StatefulWidget {
 Fuga({super.key});

 @override
 State<Fuga> createState() => _FugaState();
}

class _FugaState extends State<Fuga> {
 bool isChecked = false; // これが状態(state) 

 @override
 Widget build(BuildContext context) {
   return Container(
     child: CheckBox(
       value: isChecked,
       onChanged: (value) {
         // 値を更新する時は、setStateを使う
         setState(() {
           isChecked = value;
         });
       },
     ),
   );
 }
}
©︎ 2023 nabe1005

🔥 TODOリストを作ってみよう!

©︎ 2023 nabe1005
🔥 TODOリストを作ってみよう!

UIのプログラム

©︎ 2023 nabe1005
🔥 TODOリストを作ってみよう!

🧐 バグってる

  • チェックボックスを押しても反応しない
  • やることを入力しても追加されない
©︎ 2023 nabe1005
🔥 TODOリストを作ってみよう!

🔍 コピーしてきたプログラムを
確認しよう!

TodoList という StatefulWidget がアプリの画面全体

状態として、List<Map<String, dynamic>> 型の todoList

※変数の型については理解できなくても OK です。
todoList は json の配列になっているとイメージしてください。

©︎ 2023 nabe1005
🔥 TODOリストを作ってみよう!

この todoList はタスク一覧となっています。

中身の値に着目してみると、
contentisFinish という値があります。

content には入力された「タスクの内容」
isFinish には「タスクの完了状態」

好きなタスクの isFinishtrue にしてみよう
Runするとチェックマークがつくはずです

©︎ 2023 nabe1005
🔥 TODOリストを作ってみよう!

✅ タスクを完了させられるようにしよう!

©︎ 2023 nabe1005
🔥 TODOリストを作ってみよう!

😎 TODO を追加できるようにしよう!

©︎ 2023 nabe1005
🔥 TODOリストを作ってみよう!

アンケート

©︎ 2023 nabe1005