Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GDSC Solution Challenge Japan 2023 Flutter WS

GDSC TMU
October 30, 2023

GDSC Solution Challenge Japan 2023 Flutter WS

GDSC TMU

October 30, 2023
Tweet

More Decks by GDSC TMU

Other Decks in Programming

Transcript

  1. Agenda 1. Solution Challenge Japan について 2. GDSC TMU について

    3. Solutions from GDSC TMU 4. Flutter をのぞいてみよう 2
  2. - グローバルの SC に先立ち開催 - テーマ : 「大学生活を豊かにするアプリケーション」 - 2023/10/31

    応募締切 - 2023/12/3 発表会 - https://goo.gle/scjp23 4 Solution Challenge Japan について
  3. 9

  4. 11

  5. 15

  6. 17

  7. 19

  8. 1. VSCode のコマンドパレット (F1 or ctrl+shift+P or cmd+shift+P) 2. Flutter

    new と検索 3. Flutter: New Project を選択 これ以降,スライドに書かれた操作を完了したら 挙手ボタンを押してください! プロジェクトを作成 32
  9. p.4 の Adding a button にある lib/main.dart のコメントの指示に従う debug console

    に何か表示されるようになったはず ボタンを追加してみる 36
  10. ほぼコードラボの和訳です。。 • すべての構成要素はwidget(アプリそのものもwidget) • MyApp クラス ◦ StatelessWidget を拡張(継承と同義?) ◦

    アプリ全体の設定(アプリ名,テーマ,home widget(home: MyHomePage())) • MyAppState クラス ◦ アプリ全体の state を定義 ◦ 動作に必要なデータを保持(今はwordpairしかないけど) ◦ ChangeNotifier を拡張 ▪ ChangeNotifier: state とデータの変更を各 widgets に通知 • ChangeNotifierProvider: state 作成 ✒コードの解説 38
  11. ほぼコードラボの和訳です。。 • build() ◦ すべての widgets が持っている ◦ widget の状態が変化した際に自動的にコールされる

    ◦ 絶対に widget(s) を return しなければならない(この場合scaffold) • watch メソッド:アプリの現在の state を監視 • column:列.子要素を上から下に並べる • 2番目のText:WordPairをLowerCaseで出力している • 最後のカンマは不要(あるとフォーマットがきれいになる) ✒コードの解説② 39
  12. Refactor という魔法が登場 1. p.5のとおり変更→refactorを使用するところを最小限に 2. Text に Refactor : Extract

    Widget を使用 i. Text の文字の上で右クリック ii. 出てきたメニューからRefactorを選択 3. BigCard と名付ける→自動的に BigCard クラスが追加 自動変更を使ってもアプリが問題なく動くことを確かめてみてください! ワードを目立たせてみる① 42
  13. Refactor という魔法が登場 1. BigCard クラスの中の Text に Refactor: Wrap with

    Padding をかける 2. padding の中の数字を適当に調整(デフォルトは8,おすすめは20) 3. Padding に Refactor : Wrap with Widget をかける.名前は Card ワードを目立たせてみる② 43
  14. アプリにはテーマカラーを設定できるらしい… • BigCard の build() メソッドを指示通りに変更 ◦ アプリの現在のテーマを取得 ◦ カードの色をテーマのcolorSchemeと同じになるように設定

    • MyApp の ColorScheme.fromSeed() の引数を変更 色の変わり方がきれいすぎるのでやってみてください… カードの色・テーマを変えてみる 44
  15. きれいになるはず BigCard は Column の中にあるので… 1. Column の中の要素を中央ぞろえ body.Column(  の下にmainAxisAlignment:

    MainAxisAlignment.center, 2. Column そのものを中央ぞろえ Column に Wrap with Center の Refactor をかける オプション:カードとボタンの間に SizedBox(height: 10), を入れると? 中央ぞろえ 46
  16. もうだいぶ分かってきたかもしれませんが Likeボタンを追加する手順 1. すでにあるボタンを Refactor で Wrap with Row 2.

    Row( の下に mainAxisSize: MainAxisSize.min, を追加 👆確保する横軸サイズを最小限に抑える 3. Likeボタンを作成 ←手本無しチャレンジ お気に入り機能をつくってみる② 48
  17. SafeArea を Expanded に置き換えてみるとExpanded が理解しやすいです 1. scaffold 以外の MyHomePage が全部

    GeneratorPage に Extract された 2. 新しいMyHomePageのrowの中: a. SafeArea(スマホのステータスバー等で隠されない) NavigationNail onDestinationSelected: ボタン操作に応じて切り替えられるようになります b. Expanded:限界までスペースを使う設定                GeneratorPageもこの中で呼び出す ✒置き換えたコードの解説 50
  18. 画面切り替えで必要になります widgets が増えてきた ↓ MyAppState に他の widget の状態 (state) を保持してほしくない

    (グローバル変数をできるだけ作りたくないのと同じ) ↓ widget 本体が状態を保持してくれればいい! ↓ MyHomePage を StatefulWidget に変換! (Refactor>Convert to StatefulWidget) 【重要】Stateful Widget 登場 51