動くものを作ってみたいなと思いFlutterを1年学んだ振り返り
Flutter(Dart言語)を始めて約1年ほど学んだ情報をまとめます。
個人的に模索しながら、学んだ振り返りとなります。※ベストな方法の記事ではありません。
冗長ですが、時系列に記載しています。
各段階での学習内容や、気付きが何かのご参考になれば幸いです。
一部過去記事「情報収集と開発のためのブラウザ環境」と重複します。
※都度更新予定
Flutter(Dart言語)を学んだ振り返り
はじめに
-
動機
- なんとなく動くもの(アプリ)を作って楽しみたい
-
状況
- プログラミング言語は初心者向けの本(python, JAVA, C)を読み、業務で2,3年程度
- Android Studioも触ったことがない
-
大きな目標(学びだす前)
-
数ヶ月間Flutterに関するインプットを行い、単純なアプリなら何も見ずに、 複雑なアプリでも都度調べながら作れる自信をつける。
- 【振り返り】→過去の自分のコードからコピペが多い、Android Studioの補助機能が便利、使いやすかったり・安定したアプリづくりにはまだまだ勉強が必要
-
まとめ
期間 | 工程 | 内容 |
---|---|---|
2週間 | 初期調査 | Dart Padを動かす。公式ドキュメントを知る。初心者向け個人ドキュメントを知る。 |
4週間 | Flutterとは何かを無料教育動画で手を動かしながら学習 | Udacity:Build Native Mobile Apps with Flutterを実施。 |
1週間 | Dart Padで遊ぶ | 1ファイルの小さな動くものをDart Padで作成。(数百行程度) |
1週間 | 開発環境作成 | Flutter環境導入。 |
2週間 | FlutterとDartの基礎知識学習 | 公式サイトの練習問題を実施。 |
2週間 | Dart Padで遊ぶ | 1ファイルの中くらいの動くものをDart Padで作成。(数千行程度) |
4週間 | アプリを作ることを包括的に手を動かしながら学習 | Udemy:Complete Flutter App Development Bootcamp with Dartを実施。 |
2週間 | Android Studioで遊ぶ | 複数ファイルに分割した中くらいの動くものをAndroid Studioで作成。(数千行程度) |
4週間 | Firebaseを利用したSNSアプリの作り方を学習 | Udemy:Build a Social Network with Flutter and Firebase |
2週間 | Android Studioで遊ぶ | 複数ファイルに分割し、Firebaseを利用した中くらいの動くものをAndroid Studioで作成。(数千行程度) |
8週間 | これまでの振り返りと基礎知識学習を蓄積 | zennにまとめる。 |
※期間はざっくり(平日1時間程度、週末4時間程度)
スキル進捗
- 変化を感じたときに記載
能力 |
---|
Helloを出す初歩アプリをリアルタイム入力で作成可能 |
Flutterをウィジェットのツリー構造と理解し、ウィジェットを追加するコード記載を修得 |
ボタンや文字出力等の組み合わせで、自分が楽しめるものをシンプルに(1000行以下)作成可能 |
Android Studioを利用し、適宜リファクタリングしながら、簡単なものを作成可能(簡単なボドゲを4hほどで作れた) |
そのアプリに必要な情報はAndroid Studioとgit hubを利用しメモを残し(READMEファイル、コミットメッセージ、TODOコメント)、そのほかの知識情報はZennに残すことを習慣化 |
今後
- 基礎知識学習
- 大きな動くもの作成
- 小さくても、アプリを公開
以下、細かい内容
※リンク先の自分のコードは問題だらけです
DartPadを知る
-
DartPad > Counter
- ブラウザ上で実際に動かせることに感動
公式ドキュメントを知る
-
Flutter - Beautiful native apps in record time
- (当時)どこから手を付けてよいかわからなかった
- (Install - Flutterから普通に進めればよい)
- (当時)どこから手を付けてよいかわからなかった
初心者向け個人ドキュメントを知る
- 一番最初に見るのに良さそうな参考サイト
- Flutter はじめの一歩 - Flutter 🇯🇵 - Medium
-
Flutterの効率良い学び方 - Flutter 🇯🇵 - Medium
- 以下に記載するUdacityのコースがおススメされていたので、続けて実施
Udacity:Build Native Mobile Apps with Flutter
-
Build Native Mobile Apps with Flutter | Udacity
- 無料
- DartPadで無理して実施(※Android Studioがよくわからなかったため)
アプリを作り出す過程を学ぶ
- 作りたいものをレイアウトとしてイメージする(Goal)
- どんなファイル、ウィジェット、関数が必要か書き出す(Steps)
→ここまでは、何となくで進められる - 要件を決める(Specs)
→具体的なイメージが出来ていないと書けない - ウィジェット配置(Widgets)
※アプリはウィジェットのツリー構造で出来る:Flutter=ウィジェット- 必要なウィジェットが既存で存在すれば利用
- 無ければオリジナルウィジェットを作成
- 機能を実現させるための、クラス作成(Functions)
- 必要な機能が既存のパッケージに存在すれば利用
- 無ければ追記やオリジナルクラスや関数を作成
- 上記を学んだが、下に行くほど正解がハッキリするため、スキル不足だと手が動かなくなる
- オリジナルウィジェットの作成や、新しい機能を実現する関数のコードがパッと浮かばないと、かなり試行錯誤しながらの進め方となりそう
以下、上記の詳細や例
Udacity動画の例:(Goal-Steps-Specs)
- Add User Input!
-
udacity-course/course/06_input/task_06_input at master · flutter/udacity-course
- チェックボックスとすれば、簡単で分かりやすい
- スクリーンショット等、作りたいもののゴールを明確にしておく
-
udacity-course/course/06_input/task_06_input at master · flutter/udacity-course
Goals
- Add user input so that a user can convert an amount from one unit to another.
Steps
- 1. Fill out the TODOs in converter_route.dart using the specs below.
- 2. Use the helper function provided to aid in the conversions. You'll likely have to add more. Remember to set the state!
- 3. Update the Theme in main.dart, and the colors in category.dart.
Specs
- The 'input' group is composed of a TextField and a Dropdown for the 'From' unit. This group has a Padding of 16.0.
- Users should only be able to enter numbers.
- The input TextField should be styled with its label in the border (see screenshot). Hint: Use the OutlineInputBorder widget.
- An error style with error text should show up when invalid values are entered.
- The 'output' group is composed of an output Text with the conversion result, and a dropdown for the 'To' unit. It likewise has an overall Padding of 16.0.
- The output text should also be wrapped inside a border.
- Dropdowns have a vertical 8.0 Padding.
- Add a 'Compare Arrows' icon between the dropdowns. This is the Material Icon named 'compare arrows'. The arrows are sized 40.0.
- The entire user input section is wrapped in 16.0 Padding.
- A Category's highlight and splash colors should be retrieved from its ColorSwatch.
- Set the ThemeData's textTheme to have a body color of black, and a display color of Colors.grey[600].
- The ThemeData's primaryColor should be Colors.grey[500].
Customizations
- Style the input/output boxes and dropdowns. Consider colors, border radius, padding, text themes, etc.
小さな動くものを作成
-
Dart Padですぐ動かせるようなもの
-
-
要件を適当に決めてさくっと
- 要件チェック
- 必須
- 2人分初期値20のカウントを用意する
- プラスもマイナスも可能
- リセットボタン
- 欲しい
- +5や-5のボタン
- ゼロになると何か反応
- 人数変更
- サイコロ
- コイントス
- レイアウト
- 利用に適し、見やすい
- かっこいい画像や、背景でおしゃれに(オリジナル画像等)
- 必須
- 要件チェック
-
-
Flutter環境導入(Android Studio)
- ここで、ようやくFlutter環境をAndroid Studioを利用し、導入
- 公式ドキュメント参照
公式サイトの練習問題
- Flutter
- Dart
中くらいの動くもの作成①
※この時期でもAndroid Studioは使い方がよくわからず、DartPadから抜け出せずにいた
- Dart Padですぐ動かせるようなもの
-
画面のイメージを確認後に作成(別途、Google Slide等で画面を適当に書く)
-
「タイトル画面」
- 「始める」ボタンで次に進む
-
「プレイヤー設定」:プレイヤー人数と名前設定(デフォルト3人)
- 人数のプラスとマイナスボタン
- 「ゲーム設定へ」ボタンで次に進む
-
「ゲーム設定」:デフォルトwolf1人、カテゴリーはすべて、時間は3分
- プラスマイナスボタン3種類:wolfの人数構成、お題カテゴリー、時間
- 「設定OK!お題表示へ」ボタンで次に進む
-
「お題」:スマホを対象者のみが持ち、画面をタップして確認する
- 「表示」:プレイヤー1さんが見てください。と記載あり。
- 「キャンセル or OK」:お題を表示しますかの再度確認
- 「覚えた!」:お題「xxx」が表示され、確認後にボタンを押して次のプレイヤーに渡す
- 「表示」:プレイヤー2さんが見てください。と記載あり。
- ・・・
- 「ゲーム開始!」ボタンでトークスタート
-
「トーク」
- 時間の1分増減ボタン
- 「ストップ」:ゲーム終了ボタン
- 「話題1,2,3」:ヒントボタン
-
「投票」
- プレイヤーのラジオボタンでwolfと思う人を選択
-
「結果発表」
-
投票結果で市民または、狼の勝ちかを表示(例:狼(少数派)の勝ち!)
-
だれがどのお題で、何役職だったのか表示
-
-
「戻る」
- スタート画面に戻る
-
Udemy:Complete Flutter App Development Bootcamp with Dart
-
The Complete 2020 Flutter Development Bootcamp with Dart | Udemy
- 上記で利用するコードは以下gitで確認可能
- アプリを作ること全体を包括している(Android Studioの使い方や、アプリアイコンの作り方)
-
ここで、Android Studioの使い方を学べた
- 基本的な設定
- Android Studioの便利機能を利用した効率的なリファクタリング
- githubとの連携
- Android Studioとgit hubを利用しメモ残す方法を学べた
- (READMEファイル、コミットメッセージ、TODOコメント)
-
ここで、Android Studioの使い方を学べた
-
自分の過去のコードが少ない無いため、これらコードを思い出しては参照していた
- 参考箇所
- MiCard Completed Project
- Dicee Completed Project
-
Xylophone Completed Project
- 音声出力
-
Quizzler Solution & Completed Project
- 同じような情報をListで取りまとめ:クイズの問題と模範解答
-
Destini Solution & Completed Project
- 同じような情報をListで取りまとめ:ストーリー文章と、選択2の文章
-
BMI Completed Project
- enum利用
- Expandedを利用したきれいなUI
- スライダー
- プラスマイナスボタン
-
Clima Completed Project
- constまとめファイル
- 位置情報取得
- API実行するようのhttp get関数:Response を取得する
- API実行:天気API
- Bitcoin Completed Project
-
Flash Chat Completed Project
- routes指定で画面遷移
- Navigatorでスクリーンに飛ぶ時のstatic変数準備
- Firebaseを利用した、ログイン、データ読み込み、更新
-
Todoey Completed Project
- ChangeNotifierProvider利用
- showModalBottomSheet:下から出てくるタスク追加画面
- CircleAvatar:アイコンを丸く表示
- 配列情報管理:Providorで下位クラスでも使えるようにする
- 参考箇所
中くらいの動くもの作成②
- Android Studioを利用し、適宜リファクタリングしながら、簡単なものを作成
- (簡単なボドゲを4hほどで作れた)
- ※非公開の個人利用としてのみ作成
Udemy:Build a Social Network with Flutter and Firebase
-
Build a Social Network App with Flutter and Firebase | Udemy
- 画像を共有するSNSアプリを作成
- Firebaseの使い方を学べた
-
この時期から、各章毎の区切り毎にAndroid Studioとgit hubを利用しメモ残す
- (READMEファイル、コミットメッセージ、TODOコメント)
中くらいの動くもの作成③
- 作っていたワードウルフを修正
- リファクタリング(ファイル分け)
- Firebase(Firestore)をワード利用(ワードを追加・削除、お題に利用)として追加
zennにまとめる
-
Zennに残しておきたいコードや知識をまとめる+Dartの基礎勉強
- Flutter
- Dart
- 【Dart】今日の日付をyyyy-mm-dd形式取得
- 【Dart】enumを利用したswitch文(コピペ用)
- 【Dart】関数を引数として渡す基本的な使い方から見るforEach文
- 【Dart】簡単なユーザクラスを利用してNamed,Redirecting,Factoryコンストラクタ理解
- 【Dart】コンストラクタを利用したconstインスタンスの作成失敗・成功例
- 【Dart】GetterとSetterの基礎
- 【Dart】Streamを簡単に学ぶ
- 【Dart】自作クラス同士を「+」で足し算
- 【Dart】call関数の簡単な例
- 【Dart】オブジェクトをコピーするcopyWithの基本
- 【Dart】abstract,mixin,extends,implements,with等の使い方基礎
- 【Dart】Extension(拡張関数)の簡単な例
- 【Dart】Objectクラスの基本
- 【Dart】Exception(例外)とError(間違い)の使い方
- 【Dart】安全で効率的なコードを書くためのGenerics(総称型)基礎
- 【Dart】List,Set,Mapの作り方
- 【Dart】List,Set,Mapの便利な関数
- 【Dart】Futureクラスとasync/awaitの基本的な使い方
- 【Flutter】Isolateの基礎知識
- その他
Discussion