プログラミング経験一切不要!
ぼく自身の
長い挫折の黒歴史から生まれた
プログラミング挫折撲滅プロジェクト
「みんプロ式」。
今最も注目のアプリ開発ツール
「Flutter(フラッター)」を使って
経験ゼロでもたった3ヶ月で
iOS・Androidアプリが
”いっぺんに”作れるようになる
ノウハウを
約300本・25時間を超える
動画テキストに凝縮した
完全初心者・挫折した人
専門プログラム。
あなたをプログラミング初心者から
脱却させます。
(30日間全額返金保証付き)
みんプロ公式メルマガにご登録でFlutter初級編講座の「体験版」無料クーポン及び「製品版」15%割引クーポンがご利用頂けます!
みんプロでは、ぼくのこれまでのプログラマー・金融マン・心理カウンセラー経験を元にしたお役立ち情報や、ご登録者限定の割引クーポンなどのお得情報をお届けする公式メールマガジンを発行しています。下のリンクからご登録頂くと、この講座の体験版の無料クーポン及び製品版の15%割引クーポン含めた6大特典が無料でゲットできますので、よろしければご登録下さい。
- 【特典1】みんプロ式・Flutter初級編講座「製品版」15%割引クーポン(この講座)
- 【特典2】みんプロ式・Flutter初級編講座「体験版」の無料クーポン(この製品版講座の約1/6を抜粋。体験版の詳細はこちらから)
- 【特典3】みんプロ式・Android StudioとGit・Githubを使ったバージョン管理入門講座10%割引クーポン
- 【特典4】みんプロ式・Kotlin逆引き大辞典10%割引クーポン
- 【特典5】ぼくの苦い挫折ヒストリーとそこから導き出された「プログラミング挫折撲滅への道」無料メール講座
- 【特典6】「心がラクになる新しい成功法則」無料PDF小冊子
(注)このコースはプログラミングサポーター(講師)への質問が行えないバージョンですのでご注意ください。コメント機能を通じて質問を行いたい方は「質問対応あり版」をご検討ください。
こんな方におすすめ
- スマホアプリ(iOS・Android)を作ってみたいけど、プログラミング経験ゼロの完全初心者・あるいは一度挫折してしまった方
- しっかりしたカリキュラムで、スマホアプリ開発に最低限必要なスキルを3ヶ月で習得したい方
- 今最も注目のアプリ開発ツール「Flutter(フラッター)」の基礎を日本語で学びたい方
- なるべく独学に近い形で自分の好きな時間帯に学習したい方
- ホームスクール・通信制学校・フリースクール等の教材にも
こんな方にはおすすめできません(必ずご一読願います)
◆ プログラミングサポーター(講師)のキャラと言動が生理的に合わない方
講義は関西弁で展開されます。聞く方によってはややクセが感じられるかと思いますので、無料で公開しているレクチャー動画(以下のカリキュラムのコーナーで「プレビュー」と書かれたレクチャー)をご覧になった上で、受講のご判断をして頂きますようお願い致します。
◆ 詳しい解説はいいからとにかく手数を増やしたい方
「みんプロ式」では、受講生の方に表面的ではないしっかりとしたスキル・知識を身につけて頂きたいとの想いから、解説パートを充実させています。従って「詳しい解説はいいからとにかく手数を増やしたい」という方のニーズには合致しない可能性が高いので、カリキュラム内容をご覧になった上で、受講のご判断をして頂きますようお願い致します。
◆ 自分で手を動かしてコードを書くのが嫌な方
プログラミングは動画テキストを眺めているだけでは上達しません。実際に手を動かしてコードを書いて「からだでおぼえる」ことをやらないと、どんな講座でも絶対に出来るようになりません。ですので、自分で手を動かすことを良しとしない方には、この講座はおすすめできません。逆に言うと、このカリキュラムに沿って実際に手を動かして頂ければ、必ず約3ヶ月でFlutterを使ったスマホアプリ開発(iOS・Android)に最低限必要なスキルを身につけることができます。
(注1)AndroidアプリをGoogle Playからリリースするためには、開発者登録料・25米ドル(1回のみ)が必要になります。
(注2)iOSアプリをApp Storeからリリースするためには、Macパソコンと開発者登録料・99米ドル(年間)が必要になります(WindowsパソコンではiOSアプリをリリースすることはできません)。
約300本・25時間を超える動画テキストに凝縮した
完全初心者・挫折した人専門プログラム
カリキュラム
-
プレビュー007:オープニング(初心者でない方はこのセクションは飛ばして頂いて構いません) (1:15)
-
プレビュー008:スマホとは(歴史・保有台数・市場規模) (5:04)
-
プレビュー009:スマホ界の2大巨塔・AndroidとiOS[iphone]との違いとは (3:17)
-
スタート010:アプリとは(ハードウェアとソフトウェア) (1:06)
-
スタート011:プログラミングとは (2:12)
-
スタート012:プログラミング処理の基本<文・関数(メソッド)・クラス> (6:59)
-
プレビュー013:プログラミングの3ステップ(ブロック作りと同じ) (2:39)
-
スタート014:プログラムがアプリになるまでの仕組み(コンパイルとビルド) (4:27)
-
スタート第2章の確認クイズ
-
プレビュー015: オープニング(Flutterアプリを作るために必要な道具とは+環境構築Zoomライブサポート会のご案内) (5:03)
-
スタート016: 【Windows】WindowsでFlutterアプリを作るための道具の説明とGitのインストールをしよう(該当者のみ) (4:39)
-
スタート016-2: 【Windows】Flutterアプリの開発ツール(SDK)の設定をしよう (3:52)
-
スタート016-3: 【Windows】Flutterのコマンドラインツールを使えるようにするためのパス通しをしよう (3:48)
-
スタート017:【Windows】Android Studioのダウンロードとインストールをしよう (6:40)
-
スタート017-2: 【Windows】FlutterがAndroid Studioを正しく認識できるための設定をしよう (6:09)
-
スタート018:【Windows】Androidアプリをエミュレーターで動かすための設定をしよう(Android Studio) (6:35)
-
スタート019:【Windows】Androidアプリを実機で動かすための設定をしよう(Android Studio) (3:49)
-
スタート020:【Mac】Flutterアプリの開発ツール(SDK)の設定をしよう (9:11)
-
スタート020-2: 【Mac:Appleシリコンのみ】Rosettaのインストールをしよう (3:05)
-
スタート020-3: 【Mac】Flutterのコマンドラインツールを使えるようにするためのパス通しをしよう (6:06)
-
プレビュー020-4: 【Mac】ファンクションキーをデフォルトで使えるように設定しよう (2:31)
-
スタート020-5: 【Mac:該当者のみ】Homebrewのインストールをしよう (3:54)
-
スタート020-6: 【Mac:該当者のみ】CocoaPodsとGitのインストールをしよう (2:35)
-
スタート021:【Mac】Android Studioのダウンロードとインストールをしよう (7:18)
-
スタート022:【Mac】Androidアプリをエミュレーターで動かすための設定をしよう(Android Studio) (7:16)
-
スタート023:【Mac】Androidアプリを実機で動かすための設定をしよう(Android Studio) (3:01)
-
スタート024:【Mac】Xcodeのダウンロードとインストールをしよう (2:51)
-
スタート025:【Mac】iOSアプリをシミュレーターで動かすための設定をしよう(Xcode) (4:31)
-
スタート026:【Mac】iOSアプリを実機で動かすための設定をしよう(Xcode) (12:31)
-
スタート027-1: 【Windows・Mac共通】Androidエミュレーターでの日本語入力と音量調節する方法 (1:47)
-
プレビュー027-2: 【Mac】iOSシミュレーターでの日本語入力と音量調節する方法 (1:23)
-
スタート027-3: 【Windows・Mac共通】AndroidのSDKコマンドラインツールをインストールしよう (1:39)
-
スタート027-4:【Windows・Mac共通】AndroidのSDKプラットフォームを使うためのライセンスに同意しよう (3:42)
-
スタート027-5:【Windows・Mac共通】Android Studioの初期設定をしよう(Flutter/Dartプラグインのインストール等) (11:05)
-
スタート027-6: 【Windows・Mac共通】「flutter doctor」して設定ができているか確認しよう (2:43)
-
プレビュー028:オープニング(今回作るアプリの紹介[はじめてのアプリ]) (1:56)
-
スタート029:Android Studioで新しいFlutterプロジェクトを作ってみよう (15:30)
-
スタート030:【初心者向け解説】プロジェクトをWindowsエクスプローラーあるいはMacのFinderで見る方法 (2:34)
-
プレビュー030-2:Flutter2.5以降は「flutter_lints」パッケージを無効化しておいてください(理由も説明しています) (7:08)
-
スタート031:既に作ったプロジェクトを開いてみよう(作りかけのプロジェクトも含む) (2:39)
-
プレビュー032:【初心者向け解説】プログラミングの天才に学ぶAndroid Studioに行く前にすべきこと(スマホアプリを作るための3ステップ) (3:41)
-
スタート033:<資料>設計図(はじめてのアプリ)
-
プレビュー034:今回作るアプリの設計図を紙に書こう(はじめてのアプリ) (3:00)
-
スタート034-2: 【解説】課題アプリのサンプルプロジェクトのダウンロード方法 (7:00)
-
スタート035:Flutterプロジェクトのフォルダ構造を知ろう(最低限抑えておくべき3兄弟) (13:13)
-
スタート036:<資料>今回のアプリで使うリソース
-
スタート037:アプリで使う画像をプロジェクトに取り込もう(小道具のプロジェクトへの取り込み方3ステップ) (9:21)
-
プレビュー038:Flutterはどういう順番でコード書いたらええねん6ステップ (8:15)
-
スタート039:アプリ全体に共通する部分(アプリのルート部分)を実装しよう (8:21)
-
スタート040:【初心者向け解説】Dartプログラミングはたったの2ステップしかない! (4:59)
-
スタート041:【初心者向け解説】クラスのインスタンス化(初期化)とは (8:07)
-
スタート042:【初心者向け解説】Dartにおけるメソッド(関数)の作り方 (12:06)
-
スタート043:【解説】Widget(ウィジェット)とは (13:35)
-
スタート044: 「StatefulWidget」を使ってホーム画面の外枠を実装をしよう(import文とは) (9:18)
-
プレビュー045:フォルダの階層構造がちゃんと見えるように「Compact Middle Packages」のチェックを外しておこう (2:52)
-
スタート046:【初心者向け解説】ファイル・クラス・関数(メソッド)等の名前付けの規則 (4:00)
-
スタート047:【初心者向け解説】プロジェクト内のファイル・フォルダ名の変更の仕方 (1:16)
-
プレビュー047-2:【初心者向け解説】ソースコード内の値を検索する方法と値の名前を一括で変更する方法 (2:12)
-
スタート048:「Scaffold」を使ってホーム画面をマテリアルデザイン仕様にしてアプリバーを設定しよう (13:58)
-
スタート048-2: Androidエミュレーターをスタンドアロンアプリとして起動させる方法 (2:53)
-
スタート048-3: 【解説】MaterialAppのtitle属性(main.dart)とAppBarのtitle属性(home_screen.dart)は何が違うのか (8:21)
-
プレビュー048-4: 【解説】意図せざる「Hot Reload」が起こってしまうのを止める方法 (4:22)
-
スタート049:【解説】Material Design(マテリアルデザイン)とは(MaterialAppの謎解き) (13:27)
-
スタート050:【解説】Widgetの並べ方超基本3パターン (2:53)
-
スタート051:「Column」を使ってWidgetを縦方向に並べよう (4:05)
-
スタート052:「Text」を使って文字を表示させよう (5:32)
-
スタート053:「Center」を使ってWidgetを中央寄せしよう (4:04)
-
スタート054:「TextField」を使って文字入力欄を設置しよう (5:16)
-
スタート055:「Image.asset」を使ってプロジェクトに取り込んだ画像を表示させよう (2:25)
-
プレビュー055-2: 【解説】Android Studioで手入力せずにパスを入力できる方法(「Copy path/Reference..」の使用) (1:44)
-
スタート055-3: 【初心者向け解説】パス(path)とは何か (2:54)
-
スタート056: 「ElevatedButton」を使ってボタンを表示させよう(RaisedButton廃止についての説明あり) (8:18)
-
スタート057:「Container」を使って画面全体に余白(padding)を作ろう (5:05)
-
スタート057-2: 【解説】「PlaceHolder」とは (3:58)
-
スタート058: 【解説】「Flutter Outline」の基本的な使い方 (3:11)
-
スタート059:「SizedBox」を使ってボタンを横幅いっぱいに拡げよう (4:10)
-
スタート060:「Expanded」を使って画像の縦幅を残り枠いっぱいに拡げよう (3:30)
-
スタート061:ボタンを押したら文字を表示させる処理を実装しよう(変数の作り方) (7:25)
-
スタート062:入力欄(TextField)に入れた文字を取得して表示させよう (3:39)
-
スタート062-2: 文字がプログラム上で本当に変わっているかどうかを確かめてみよう (1:39)
-
スタート063:ボタンを押したら画像を表示させる処理を実装しよう (1:41)
-
スタート064:【解説】Dartにおけるスコープ(変数・関数にアクセスできる[参照できる・使える]範囲) (7:50)
-
スタート064-2: 【解説】クラスやメンバ(プロパティ・メソッド)の名前の前につく「_(アンダースコア)」の意味は何か (7:33)
-
スタート064-3: 【初心者向け解説】「変数」とは(インスタンス・オブジェクト・変数・定数の違いは何か) (5:17)
-
スタート064-4: 【初心者向け解説】Android Studioにおけるグローバル変数とローカル変数の見分け方 (2:27)
-
プレビュー064-5: 【初心者向け解説】「$」とは何か(文字列の間に変数を入れる方法) (5:30)
-
スタート065:「setState」メソッドを使って設定した文字・画像を画面に表示させよう(アプリの状態変化を画面に反映させる) (4:59)
-
スタート066:【初心者向け解説】プログラミングにおける「=」とは(代入) (4:39)
-
スタート067: 【初心者向け解説】セミコロン(;)とカンマ(,)とコロン(:)の違い (7:16)
-
スタート068:アプリを動かす前にプロジェクトを一旦きれいにしよう(flutter clean) (4:01)
-
プレビュー068-2: 【解説】「flutter clean」は内部で何をやってみるのか(Flutterプロジェクトのサイズ削減方法) (4:55)
-
スタート069:ソースコードのフォーマットを整えよう(Reformat File) (4:20)
-
スタート070:【Windows・Mac共通】作ったアプリをAndroidエミュレーターで動かしてみよう (5:48)
-
プレビュー070-2: 【エラー対応】「INSTALL_FAILED_INSUFFICIENT_STORAGE」というエラーが出てAndroidエミュレーターでアプリが動かせない場合の対処法 (2:49)
-
スタート070-3: 【エラー対応】「ParcelableException:・・・ Requested internal only, but not enough space」というエラーが出てAndroidエミュレーターでアプリが動かせない場合の対処法(エミュレーターのメモリを増やす方法) (3:34)
-
スタート071:【Windows・Mac共通】作ったアプリをAndroid実機で動かしてみよう (2:23)
-
プレビュー071-2: 【Windows・Mac共通(補足)】Android実機でワイアレスデバッグする方法(スマホをPCにケーブルで繋がずにデバッグする方法) (5:57)
-
スタート072:【Macのみ】作ったアプリをiOSシミュレーターで動かしてみよう (1:54)
-
スタート073:【Macのみ】作ったアプリをiOS実機で動かしてみよう(素晴らしきマルチプラットフォームの世界) (6:20)
-
プレビュー073-2: 【Macのみ(補足)】なぜiOS実機で動かそうとすると毎回Xcodeが開いてしまうのか (4:23)
-
プレビュー073-3: 【Macのみ(補足)】iOS実機でワイアレスデバッグする方法(スマホをPCにケーブルで繋がずにデバッグする方法) (2:45)
-
スタート073-4: 【Macのみ】iOS14以降はデバッグモードでインストールしたアプリは端末から直接起動することはできません (3:39)
-
スタート074: 【初心者向け解説】再生[Run]モードとデバッグ[Debug]モードの違い+ブレークポイントでアプリを途中で止めて変数の値を確認する方法 (4:02)
-
スタート074-1.5: 【該当者のみ】ブレークポイントでアプリを止めると同じ名前の編集不能のファイルが開く場合の対処法 (5:31)
-
スタート074-2: 【初心者向け解説】プログラムを1行ずつ止めながら実行する方法(Step Over / Step Into) (8:51)
-
スタート075:【初心者向け解説】Flutterアプリを動かす3つのモード(Debugモード / Releaseモード / Profileモード) (4:40)
-
スタート076:【+α】インターネット上の画像をアプリで表示させてみよう(Image.network) (2:24)
-
スタート077:【+α】デバッグバナーを非表示にしよう (1:32)
-
スタート078:【+α】アプリ全体のテーマをダークモードに変更しよう (2:14)
-
スタート079:【+α】「CupertinoApp」を使ってアプリの見た目をiOS仕様に変えよう (8:07)
-
スタート080:<資料>今回作ったアプリのプロジェクト(はじめてのアプリ)
-
スタート第4章の確認クイズ
-
プレビュー081:オープニング(今回作るアプリの紹介[ツッコミマシーン]) (5:33)
-
スタート082:<資料>今回のアプリの設計図(ツッコミマシーン)
-
プレビュー083:今回作るアプリの設計図を紙に書こう(ツッコミマシーン) (2:45)
-
スタート084:Android Studioで今回作るアプリのプロジェクトを作ろう (5:19)
-
スタート085:<資料>今回のアプリで使うリソース
-
スタート086:アプリで使う効果音ファイルをプロジェクトに取り込もう (5:42)
-
スタート086-2: 【解説】アプリで使うリソースをプロジェクトに取り込む際のpubspec.yamlファイルでの記述上の注意点 (3:18)
-
スタート087:アプリ全体に共通する部分(アプリのルート部分)を実装しよう(main.dart) (5:52)
-
スタート088:【解説】runApp関数とは (3:33)
-
スタート089:【初心者向け解説】クラスの継承(extends)とメソッドのオーバーライド(override)とは (11:13)
-
スタート090:【初心者向け解説】「ご先祖様」に「子孫」を代入するのはOK(プログラミングにおける「=」とは[完全版]) (2:42)
-
プレビュー091:「StatefulWidget」を使ってホーム画面の外枠を実装をしよう(home_screen.dart) (3:45)
-
スタート092:「Scaffold」を使ってホーム画面をマテリアルデザイン仕様にしてアプリバー(AppBar)を設定しよう (5:57)
-
スタート093:「Column」と「Row」を使ってボタンを3行2列の碁盤の目に並べよう (9:20)
-
スタート094:「Expanded」と「flex」を使って碁盤の目を画面いっぱいに均等に並べよう (5:39)
-
スタート095:「CrossAxisAlignment」を使ってボタンの大きさを枠いっぱいに拡げよう (5:56)
-
スタート096:「Container.padding」を使って画面全体と各枠内のボタンに余白(padding)を作ろう (5:11)
-
スタート097:【初心者向け解説】「List(配列)」とジェネリクス(総称型)とは (11:09)
-
スタート098:「List」を使って6つのボタンに表示させる文字をセットしよう (8:14)
-
スタート098-2:【初心者向け解説】関数・メソッドの引数の名前が何でもいいのはなぜか?(引数を入れる(渡す)とはどういうことなのか?) (4:21)
-
スタート099: 【解説】「パッケージ(package)」とは (4:23)
-
スタート100: 【解説】Flutterアプリで音(効果音・BGM)を出す方法(just_audioパッケージの使い方(パターン①:一番シンプルな使い方)) (9:46)
-
スタート101: 「just_audio」パッケージをプロジェクトに追加しよう(パッケージを使うための2ステップ) (12:53)
-
スタート101-2: 【Android】64K参照制限回避のための「multiDex」有効化設定をしよう(just_audioのバージョン0.9.20以降) (9:45)
-
スタート101-3: 【iOS&Appleシリコン(M1・M2)のMacのみ】「LoadError - dlopen・・・」エラーを回避するための設定をしよう (5:53)
-
スタート102: 【解説】pubspec.yamlファイルとは (6:00)
-
スタート103: 【解説】pubspec.lockファイルとパッケージのアップグレードとダウングレード方法 (4:17)
-
スタート104: 【解説】パッケージのバージョンを指定する際に出てくる「^」とは何者なのか(バージョンコード付与の原則(Sementic Versioning)と「caret syntax」) (9:06)
-
スタート104-2: 【解説】Flutter/Dartにおけるパッケージ(package)・プラグイン(plugin)・ライブラリ(library)の違いとは (9:33)
-
スタート105: 【解説】なぜAudioPlayerのインスタンスは使い終わったら破棄しないといけないのか(メモリの話) (5:06)
-
スタート105-2: 【解説】StatefulWidgetはどうやって状態管理をしているのか (8:18)
-
スタート106: AudioPlayerクラス(just_audioパッケージ)の初期化と破棄の実装をしよう (6:49)
-
スタート107: 【解説】なぜAudioPlayerの宣言文の先頭に「late」をつける必要があるのか(Null Safetyとは) (13:45)
-
スタート107-2: 【解説】initState及びdisposeメソッド内で処理を書く際の注意点 (9:21)
-
スタート107-3: 【解説】「assert」とは (5:02)
-
スタート108: 効果音ファイルのパス(Path)をセットしよう (10:03)
-
スタート109: 【初心者向け解説】ビルト・イン型クラスとは(Dartにおける2種類のクラス) (11:10)
-
スタート110: 【解説】非同期処理(async-await)とは (8:30)
-
スタート111: 【解説】「Future」とは (8:27)
-
スタート112: 【解説】Dartでの非同期処理の使い方3原則 (10:42)
-
スタート113:ボタンを押したら効果音を鳴らす処理を実装しよう (4:59)
-
スタート113-2: 【解説】時間のかかる非同期処理であるsetAssetの前に「await」をつけなくても音が鳴ったのはなぜか(playメソッドの謎解き) (5:24)
-
スタート114: 【解説】複数の音を同時に鳴らす方法(just_audioパッケージの使い方:パターン②) (3:07)
-
スタート114-2: 複数の音を同時に鳴らせるようにパターン①のプロジェクトを変更しよう (8:03)
-
スタート114-3: 【+α】「DateTime#difference」を使って音が鳴るまでのタイムラグを計測してみよう (6:39)
-
スタート115: 【解説】ボタンを押してから音が鳴るまでのタイムラグをなくす方法(just_audioパッケージの使い方:パターン③) (3:22)
-
スタート115-2: ボタンを押してから音が鳴るまでのタイムラグをなくせるようにパターン①のプロジェクトを変更しよう (3:34)
-
スタート115-3: 【解説】initStateで非同期処理をするとなぜエラーになるのか (3:38)
-
スタート115-4: initStateで非同期処理ができるようにしてアプリを動かしてみよう (3:33)
-
スタート115-5: 【解説】なぜ2回目のボタン押下時には音が鳴らなかったのか (4:40)
-
スタート115-6: ボタンを複数回押しても音が鳴るようにしよう(AudioPlayer#seekメソッド) (3:35)
-
プレビュー116:【初心者向け解説】エラーはどこでわかるのか(プログラミングにおける3種類のエラー) (6:28)
-
スタート117: 【初心者向け解説】「空っぽ(null)」と「空白("")」の違いとは (2:31)
-
スタート118: 【解説】StatefulWidgetはなぜStateオブジェクトと別クラスで分離されているのか(Widgetの本当の正体とは) (12:28)
-
スタート119: 【解説】Flutterとネイティブアプリ開発(Android/iOS)の状態管理方法比較 (6:35)
-
スタート119-2: 【解説】「Flutter Gems」を使ったパッケージの見つけ方 (4:19)
-
スタート119-3: 【+α:解説】pub devに公開されているパッケージの挙動確認方法(exampleモジュールにあるサンプルアプリの実行方法) (7:10)
-
スタート120:【+α】ElevatedButtonをカスタマイズしてみよう(ElevatedButton.styleFromメソッドを使って) (12:21)
-
プレビュー120-2: 【解説】Flutter3.3以降はElevatedButton.styleFromの「primary」「onPrimary」属性が非推奨になりました (3:57)
-
スタート121:【+α:解説】今回の課題アプリでNull許容を適用したらどうなるか(安全呼び出し(?)と「!」演算子の実例) (3:59)
-
スタート121-2: 【+α:解説】「!」演算子で強制アクセスして空っぽだった場合に何が起こるのか(Null check operator called on a null value) (3:44)
-
スタート122:<資料>今回作ったアプリのプロジェクト(ツッコミマシーン)
-
スタート第5章の確認クイズ
-
プレビュー123:オープニング(今回作るアプリの紹介[計算脳トレ]) (5:43)
-
スタート124:<資料>今回の作るアプリの設計図(計算脳トレ)
-
プレビュー125:今回作るアプリの設計図を紙に書こう(計算脳トレ) (4:48)
-
スタート126:Android Studioで今回作るアプリのプロジェクトを作ろう (4:52)
-
スタート127:<資料>今回のアプリで使うリソース
-
スタート128:アプリで使うリソース(画像・音)をプロジェクトに取り込もう (3:38)
-
スタート129:アプリ全体に共通する部分(アプリのルート部分)を実装しよう(main.dart) (4:38)
-
スタート130:[ホーム画面]外枠を実装をしよう(home_screen.dart) (3:45)
-
スタート131:[ホーム画面]「SafeArea」を使ってアプリバー(AppBar)無しのレイアウトに変えよう (3:15)
-
スタート132:[ホーム画面]「Column」を使ってWidgetを縦方向に並べよう (6:09)
-
スタート133:[ホーム画面]「Expanded」と「Container」を使ってボタンを画面最下部中央に設置しよう (5:35)
-
スタート134:[ホーム画面]「ElevatedButton.icon」を使ってボタンにアイコンをつけて見た目をカスタマイズしよう (5:44)
-
スタート135:【初心者向け解説】マテリアルアイコンとは (4:08)
-
スタート136:【解説】Flutterアプリにおける画面・文字の大きさの単位とは(物理ピクセルと論理ピクセル) (13:13)
-
スタート137:【+α】「MediaQuery.of」メソッドを使って画面のサイズ(論理ピクセル)を取得しよう (2:30)
-
スタート137-2: 【+α:解説】「MediaQuery」とは (4:22)
-
スタート137-3: 【+α:解説】Flutter3.10より導入された「MediaQuery.sizeOf」等について(MediaQueryのInheritedModel化) (9:32)
-
スタート137-4: 【+α:解説】動かしているアプリのWidgetの状況を確認する方法(「Flutter Inspector(Dev Tools)」の基本的な使い方) (7:22)
-
スタート137-5: 【+α:解説】画面サイズの異なる端末の見た目を1つの端末で確認する方法(「device_preview」パッケージの使い方) (10:08)
-
プレビュー138:【解説】「DropdownButton」の使い方3ステップ (2:07)
-
スタート139:[ホーム画面]「SizedBox」を使ってWidget間に空白を設定しよう (6:02)
-
スタート140:[ホーム画面]「DropdownMenuItem」を使って「DropdownButton」に表示させる選択肢をセットしよう(items属性) (9:43)
-
スタート141:【+α】「Cascade Notation(..)」を使ってコードをシンプルにしよう (3:17)
-
スタート142:[ホーム画面]「DropdownButton」で選択されたアイテムをセットしよう(value属性) (6:56)
-
スタート143:【解説】なぜ「value」の後ろに「!」をつける必要があるのか(安全呼び出し(?)と「!」演算子とは) (8:05)
-
スタート144:[ホーム画面]「DropdownButton」でアイテムが選択された時の処理を実装しよう(onChanged属性) (4:52)
-
スタート145:【解説】onPressed/onChanged属性の中身はどうなっているのか (8:03)
-
プレビュー145-2: 【解説】onPressed属性の「() =>」を忘れると何が起こるのか(setState() or markNeedsBuild() called during build) (6:53)
-
スタート145-3: 【解説】onChanged属性に設定する関数の引数は誰がいつ渡しているのか(コールバック関数とは) (4:29)
-
プレビュー145-4:【解説】「ValueChanged<T?>?(DropdownButton#onChanged属性)」にはなぜ「?」が2つあるのか? (3:21)
-
スタート146:【解説】Flutterにおける画面遷移の方法(NavigatorとMaterialPageRoute) (8:27)
-
スタート147:[ホーム画面]スタートボタンをクリックしてテスト画面を開く処理を実装しよう (7:18)
-
スタート147-2: 【解説】Stateクラス(StafulWidgetの面倒を見る育ての親)ではBuildContextがどこでも使えるのはなぜか (6:56)
-
スタート148:[ホーム画面・テスト画面]名前付きパラメータ(Named Parameter)を使って選択した問題数をホーム画面からテスト画面に渡そう (8:18)
-
スタート149: 【解説】「required」の意味とは(Flutter2.0以降は「@required」が「required」に変更されました) (3:59)
-
スタート149-2: 【解説】名前付き引数(パラメータ)とは(Named Parameters) (9:28)
-
スタート150:【初心者向け解説】Flutterにおける2つの定数(「const」と「final」) (6:22)
-
プレビュー151:【初心者向け解説】「this」とは (6:57)
-
スタート152:「const」を使って描画パフォーマンスを向上させよう(Flutter Performanceの使い方) (11:35)
-
スタート153:【初心者向け解説】どこからでもインスタンスを経由せずに直接使えるメンバを作る2つの方法(「top-level」と「static」) (9:53)
-
プレビュー153-2: 【初心者向け解説】「static」の解説②(「静的」と「動的」/「インスタンス変数」と「クラス変数」の違いとは) (8:21)
-
スタート153-3: 【解説】トップレベル(top-level)メンバ使用上の注意点(意図せざるしてアプリが落ちるトラップが起こる可能性あり) (7:21)
-
スタート154:[テスト画面]画面全体のレイアウトの枠組みを作ろう(SafeArea/Container/Column) (6:37)
-
スタート155:[テスト画面]「Table」と「Center」を使ってスコア表示部分を実装しよう (13:27)
-
プレビュー156:[テスト画面]問題表示部分を実装しよう(Expandedとflex/Container) (12:17)
-
スタート157:[テスト画面]こたえ合わせボタン部分を実装しよう(ElevatedButton/SizedBox/Container) (3:35)
-
プレビュー157-2: 【解説】「Hot Reload」と「Hot Restart(ゲジゲジor再生ボタン)」の違いとは (7:31)
-
プレビュー157-3: 【解説】「Hot Restart」時にbuildメソッドが2回回っても気にする必要なし (4:32)
-
スタート158:[テスト画面]もどるボタン部分を実装しよう(ElevatedButton/SizedBox/Container) (3:04)
-
スタート159:[テスト画面]電卓ボタン部分を実装しよう(Table/Container) (8:29)
-
スタート160:[テスト画面]「Stack」を使って○・☓画像とテスト終了テキスト部分のWidgetを積み重ねよう (7:39)
-
スタート161:【初心者向け解説】条件分岐の「if文」と比較演算子(プログラミングは3つの流れ) (8:01)
-
スタート162:[テスト画面]テスト開始前の初期設定をしよう(①:ホーム画面で選択した問題数の引き継ぎ) (6:01)
-
スタート163:[テスト画面]テスト開始前の初期設定をしよう(②:効果音の準備) (9:40)
-
スタート164:[テスト画面]出題処理を実装しよう(①:出題時の初期設定) (6:16)
-
プレビュー164-2: 【初心者向け解説】if(bool型の値)はif(bool型の値 == true)と同じ意味 (1:19)
-
スタート164-3: 【初心者向け解説】if(!bool型の値)はif(bool型の値 == false)と同じ意味(Dartにおける2つの「!」) (4:19)
-
スタート165:[テスト画面]出題処理を実装しよう(②:乱数(Random)を使って出題) (6:45)
-
スタート165-2: 【初心者向け解説】setStateメソッドの「中」で処理を書く場合と「外」で書くのでは何が違うのか(setStateメソッド使用上の留意点) (5:32)
-
スタート166:[テスト画面]電卓ボタンを押す処理を実装しよう (11:20)
-
スタート167:[テスト画面]こたえ合わせ処理を実装しよう(①:初期設定) (4:52)
-
プレビュー168:【初心者向け解説】三項条件演算子(conditional expressions)とは(?/:) (3:27)
-
スタート169:[テスト画面]こたえ合わせ処理を実装しよう(②:正解判定) (7:19)
-
スタート169-2: [テスト画面]こたえ合わせ処理を実装しよう(②-2:正解判定時に効果音追加) (4:10)
-
スタート170:[テスト画面]こたえ合わせ処理を実装しよう(③:正答率の計算) (3:36)
-
スタート171:[テスト画面]こたえ合わせ処理を実装しよう(④:終了判定) (2:28)
-
スタート172:[テスト画面]こたえ合わせ処理を実装しよう(⑤:「Timer」を使って1秒後に次の問題を出題) (2:53)
-
スタート173:<資料>次のレクチャー(タイマー処理の解説)で使うプロジェクト
-
スタート174:【解説】タイマー処理(Timer)とは (10:44)
-
スタート174-2: 【解説】「Duration」クラスとは (4:23)
-
スタート175:[テスト画面]もどるボタンを押したらホーム画面に戻る処理を実装しよう(Navigator.popメソッド) (6:41)
-
スタート176:【+α:解説】今回の課題アプリでNull許容を適用したらどうなるか(安全呼び出し(?)と「!」演算子の実例) (1:45)
-
スタート177:<資料>今回作ったアプリのプロジェクト(計算脳トレ)
-
スタート第6章の確認クイズ
-
プレビュー178:オープニング(今回作るアプリの紹介[私だけの単語帳]) (8:27)
-
スタート179:<資料>今回の作るアプリの設計図(私だけの単語帳)
-
プレビュー180:今回作るアプリの設計図を紙に書こう(私だけの単語帳) (8:07)
-
スタート181:Android Studioで今回作るアプリのプロジェクトを作ろう (5:12)
-
スタート182:<資料>今回の作るアプリのリソース
-
スタート183:アプリで使うリソース(画像)をプロジェクトに取り込もう (4:16)
-
スタート184:アプリ全体に共通する部分(アプリのルート部分)を実装しよう (3:17)
-
スタート185:[ホーム画面]外枠の実装をしよう(アプリバー無しのマテリアルデザイン仕様) (2:26)
-
スタート186:[ホーム画面]画面全体のレイアウトの枠組みを作ろう (5:03)
-
スタート186-3: 【初心者向け解説】「ビット」と「バイト」と16進数との関係とは (5:56)
-
スタート187:カスタムフォントの設定をしよう(カスタムフォントの使い方4ステップ) (8:37)
-
スタート188:「Divider」を使って横線を引こう (6:01)
-
スタート189:「VoidCallback」を使ってボタンをカスタムウィジェットで作ろう (15:25)
-
スタート190:【解説】なぜButtonWithIconのコンストラクタ引数に「required」キーワードをつける必要があるのか (1:29)
-
スタート191:<資料>次のレクチャー(VoidCallbackの解説)で使うプロジェクト
-
スタート192:【解説】「VoidCallback」とは何か (6:12)
-
スタート193:【解説】ラジオボタン(RadioListTile)の使い方4ステップ (6:31)
-
プレビュー194:[ホーム画面]ラジオボタンの表示部分を実装しよう(title属性) (5:42)
-
スタート194-2: 【+α:解説】RadioListTileのvalue属性はNull許容でないのに「null」が入れられるのはなぜか(nullとonChanged属性の正体とは?) (7:22)
-
スタート195:[ホーム画面]ラジオボタンにセットする値を設定しよう(value/groupValue属性) (3:01)
-
スタート196:[ホーム画面]ラジオボタンが選択されたときの処理を実装しよう(onChanged属性) (7:01)
-
スタート196-2: 【解説】RadioListTile.onChanged属性の引数に型を指定した場合の対処法(Null-safety対応) (3:27)
-
スタート197:[ホーム画面]単語一覧画面に遷移する処理を実装しよう (4:40)
-
スタート198:[ホーム画面]テスト画面に遷移する処理を実装しよう (5:14)
-
スタート199:【解説】「BuildContext」とは (15:01)
-
スタート199-2: 【解説】「MaterialPageRoute」の謎解き(なぜ遷移先の画面を「child」ではなく「builder」で設定するのか) (10:18)
-
スタート200:「AppBar」を使えば前の画面に戻る処理を実装する必要がない! (5:15)
-
スタート201:[一覧画面]「FloatingActionButton」を使って編集画面に遷移する処理を実装しよう (10:44)
-
スタート202:[編集画面]問題入力部分を実装しよう (6:32)
-
スタート203:[編集画面]こたえ入力部分を実装しよう (1:46)
-
スタート203-2: [編集画面]「TextEditingController」を使い終わったら破棄する処理を実装しよう (3:41)
-
プレビュー204:[編集画面]「SingleChildScrollView」を使ってコンテンツが画面からはみ出さないようにしよう (3:09)
-
スタート205:[編集画面]「WillPopScope」を使って一覧画面に戻る処理を実装しよう (11:11)
-
スタート205-2: 【解説】WillPopScopeとは (6:04)
-
スタート205-3: 【解説】Future.valueとは (3:10)
-
スタート205-4: 【解説】なぜ「WillPopScope」の後継として「PopScope」が登場したのか(「Android Predictive Back」対応) (8:30)
-
プレビュー205-5: 【Flutter3.16以降】「PopScope」とは(WillPopScopeとの違い) (9:41)
-
スタート205-6: 【Flutter3.16以降】編集画面のWillPopScopeをPopScopeに移行させよう (7:25)
-
スタート206:【初心者向け解説】データベース(Database:DB)とは (5:53)
-
スタート207: 【解説】Flutter/Dartで使えるデータベース操作パッケージ「Drift(旧:Moor)」とは (7:18)
-
プレビュー207-2: 【解説】なぜ「Moor」はパッケージ名をわざわざ「Drift」に変えたのか (6:30)
-
スタート208: 【解説】データベース操作パッケージ「Drift(旧:Moor)」の使い方10ステップ (18:00)
-
スタート209:【解説】pubspec.yamlファイルにおける「dependencies」と「dev_dependencies」の違いとは (5:37)
-
スタート210: Drift(旧:Moor)パッケージをプロジェクトに追加しよう(Driftの使い方10ステップ①) (3:04)
-
スタート210-2: 【解説】Driftを使うために必要なパッケージ群の説明(なぜ4つも必要なのか) (6:03)
-
スタート210-3: x86のAndroid端末用のビルドを作成しないようにbuild.gradleファイルを修正しよう (3:20)
-
スタート210-4: 【Macのみ:Drift関連】iOSでビルドしたら「C compiler cannot create executables」というエラーが出る場合の対処法 (5:48)
-
スタート211: コード生成用ファイルとテーブルクラスの設定をしよう(Driftの使い方10ステップ②③) (7:28)
-
スタート212:【解説】SQLiteで使えるデータの型とテーブルクラスのコードの解説 (7:54)
-
スタート213:【初心者向け解説】「Set」とは (3:25)
-
スタート214:【初心者向け解説】「get」とは (5:12)
-
スタート215: データベースクラスの設定をしよう(Driftの使い方10ステップ④) (2:47)
-
プレビュー216: dartコマンドを使ってDrift用のコードを生成しよう(Driftの使い方10ステップ⑤) (2:45)
-
スタート216-2: (該当者のみ)Flutterを3.24にアップグレードするとコード生成に失敗する場合の対処法([SEVERE]Failed to precompile build script・・) (4:13)
-
スタート216-3: 【解説】「part」とは (3:07)
-
スタート217: 【解説】コード生成コマンドで出来たファイル(database.g.dart)の中身を見てみよう (3:55)
-
スタート218: データベースとの接続を開始するメソッド(_openConnectionメソッド)を作成しよう(Driftの使い方10ステップ⑥) (5:02)
-
スタート219: 【解説】Dartにおける7つのコンストラクタ(「:」の謎解き) (10:33)
-
プレビュー220: 【解説】「const」キーワードのややこしさ(コンストラクタを「作る」場面(クラスの設計図)と「使う」場面(インスタンスの生成)で意味合いが異なる) (6:21)
-
スタート221: データベースのスキーマバージョンを設定しよう(Driftの使い方10ステップ⑦) (1:23)
-
スタート222: 【解説】「annotation:アノテーション(@)」とは (4:43)
-
プレビュー223: 【解説】Drift2.18より導入された「Manager」とは何か (4:44)
-
スタート224: データベースの4つの操作メソッド(クエリ)を作成しよう(Driftの使い方10ステップ⑧) (9:11)
-
スタート225: データベースクラスのインスタンスを設定しよう(Driftの使い方10ステップ⑨) (3:40)
-
スタート226: [編集画面]新しい単語をデータベースに登録する処理を実装しよう(Driftの使い方10ステップ⓾) (8:57)
-
スタート226-2: 【解説】Driftを入れたらFlutterのColumnウィジェットが使えなくなってしまった場合の対処法(複数のパッケージに存在する同じ名前のクラスを使いたい場合の対処法) (5:12)
-
スタート227:【解説】端末にインストールされているSQLiteデータベースの中身を見る方法(DB Browser for SQLiteの使い方) (10:55)
-
スタート228:[編集画面]トーストメッセージ(FlutterToast)を使って登録完了メッセージを表示させよう(これまで使用していたToastパッケージとの違い) (7:47)
-
スタート229: 【解説】例外処理とは(try~catch文) (7:01)
-
スタート229-2: [編集画面]例外処理を使って単語を重複して登録しようとした際にエラーメッセージを表示させよう(Driftで重複データをチェックする方法) (4:54)
-
スタート230:[一覧画面]データベースに登録した単語データを取得する処理を実装しよう (5:45)
-
スタート230-2: 【+α:解説】Navigator.pushメソッドは遷移先の画面から戻ってくるのを待てる!(Navigator.pushの謎解き) (6:18)
-
スタート230-3: 【+α:解説】Navigator.popメソッドは遷移元の画面へ値を渡せる!(Navigator.popの謎解き) (5:25)
-
スタート231:【解説】ListViewの使い方5ステップ (4:45)
-
スタート232:[一覧画面]「ListView」を使って単語の一覧リスト部分を実装しよう (4:46)
-
スタート232-2: 【解説】itemBuilder属性に設定する関数の引数(BuildContextとint)は誰がいつ渡しているのか (3:34)
-
スタート233:[一覧画面]「Card」と「ListTile」を使って単語の一覧リスト部分を実装しよう (9:49)
-
スタート234:[一覧画面]一覧に表示された単語を長押ししたら削除する処理を実装しよう (5:18)
-
スタート235:「enum(列挙型)」を使って編集ステータスの設定をし、編集画面のコンストラクタを修正しよう (6:07)
-
スタート235-2: 【初心者向け解説】なぜ定数ではなく列挙型(enum)を使うのか (2:27)
-
スタート236:[一覧画面]一覧に表示された単語をタップしたときに編集画面に遷移する処理を実装しよう (2:58)
-
スタート237:[編集画面]一覧画面から渡された値を引き継ごう (8:49)
-
スタート238:[編集画面]一覧画面で選択した単語を修正する処理を実装しよう (8:09)
-
スタート第7章の確認クイズ
-
スタート239: データベースにフィールド(暗記済みフラグ)を追加しよう (6:04)
-
スタート239-2: database.g.dartファイルを再作成してスキーマバージョンを繰り上げよう (3:23)
-
スタート240: 【解説】Driftデータベースのフィールドを空っぽOK(Nullable)にする方法 (2:36)
-
スタート241:既に端末にインストールされている旧バージョンのデータベースとの統合処理を実装しよう (9:59)
-
スタート242:[編集画面]データベースのフィールド追加に伴う単語の登録・修正処理を変更しよう (2:14)
-
プレビュー243:【+α】「copyWith」メソッドを使って変更したい項目だけを簡単に修正する方法 (3:15)
-
スタート244:テストの状態を管理するためのステータスを設定しよう(TestStatus) (3:15)
-
スタート245:[テスト画面]画面全体のレイアウトの枠組みを作ろう (6:39)
-
スタート246:[テスト画面]問題数を表示するパートを実装しよう (4:50)
-
スタート247:[テスト画面]「Stack」でWidgetを重ねて問題カード表示パートを実装しよう (5:40)
-
スタート248:[テスト画面]「Stack」でWidgetを重ねてこたえカード表示パートを実装しよう (3:35)
-
スタート249:【解説】CheckBoxListTileの使い方3ステップ (8:48)
-
スタート250:[テスト画面]「CheckBoxListTile」を使って単語を暗記済みにする場合のチェックボックスを実装しよう (6:00)
-
プレビュー251:[テスト画面]テストで使う単語群をデータベースから取得しよう①(暗記済みの単語を除外して取得するクエリメソッドの作成) (6:32)
-
スタート252:[テスト画面]テストで使う単語群をデータベースから取得しよう②(テスト画面からクエリメソッド呼び出し) (6:06)
-
スタート253:[テスト画面]取得した単語リストをシャッフルしよう (5:07)
-
スタート253-2: 【解説】「late」使用上の注意点(最初に使うまでに値を入れないと(初期化しないと)いけない) (9:22)
-
スタート254:[テスト画面]「switch」文を使ってテストの状態を切り替える処理を実装しよう(FloatingActionButton) (6:07)
-
スタート255:[テスト画面]テスト開始前の初期状態の設定をしよう (5:57)
-
スタート256:[テスト画面]問題カードを出す処理を実装しよう (5:45)
-
スタート256-2: [テスト画面]出すべき問題が1問もない場合に発生するエラーへの対処法(Unhandled Exception: RangeError (index)) (4:08)
-
スタート256-3: 【解説】Listの要素無し判定の際に「isNotEmpty」ではなく「!=[]」ではなぜダメなのか(「==」の本当の意味とは) (7:21)
-
スタート257:[テスト画面]こたえカードを出す処理を実装しよう (3:14)
-
スタート258:[テスト画面]暗記済フラグをデータベースに登録しよう (5:01)
-
スタート259:[テスト画面]テスト終了時にメッセージを表示させよう (6:46)
-
スタート260:[一覧画面]暗記済の単語は一覧上でチェックマークを表示させよう(ListTile.trailing/Icon) (3:46)
-
スタート261:[一覧画面]暗記済の単語を下にソートする処理を実装しよう①(クエリメソッドの作成) (5:21)
-
スタート262:[一覧画面]暗記済の単語を下にソートする処理を実装しよう②(一覧画面からクエリメソッド呼び出しとリストの更新) (2:59)
-
スタート263:<資料>次のレクチャー(AlertDialogの解説)で使うプロジェクト
-
スタート264:【解説】確認ダイアログ(AlertDialog)の使い方4ステップ (8:24)
-
スタート265:[一覧画面]単語削除時に確認ダイアログ(AlertDialog)を出す処理を実装しよう (10:44)
-
スタート266:[編集画面]単語の登録・修正時に確認ダイアログ(AlertDialog)を表示する処理を実装しよう (11:10)
-
スタート267:[テスト画面]テスト終了時の確認ダイアログを実装しよう(AlertDialog) (9:17)
-
スタート268: 【Flutter3.16以降】テスト画面のWillPopScopeをPopScopeに移行させよう (3:36)
-
スタート第8章の確認クイズ
-
スタート269: 【+α:解説】繰り返し処理とは(forループとforEach関数) (9:15)
-
スタート270: 【+α:繰り返し処理①】for句を使ってみよう (7:37)
-
スタート271: 【+α:繰り返し処理②】for-in句を使ってみよう (2:21)
-
スタート272: 【+α:繰り返し処理③】forEach関数を使ってみよう (4:30)
-
スタート273:【+α】「Radio(ラジオボタン)」を「Switch(切り替えトグル)」に変えてみよう (6:25)
-
スタート274:【+α】ランチャーアイコンを作ってみよう(flutter_launcher_iconsパッケージ) (10:11)
-
スタート275: 【エラー対応】「flutter_launcher_icons」パッケージでランチャーアイコンを作ると「FormatException: Invalid number」 という例外が発生してしまう場合の対処法 (1:41)
-
スタート276:【+α:補足1】AndroidのランチャーアイコンをAdaptive Iconにする方法 (5:50)
-
スタート277:【+α:補足2】AndroidのランチャーアイコンをAdaptiveからLegacyに戻す方法 (1:22)
-
スタート278:【+α】Android端末に表示されるアプリのタイトルと画面の向きを設定しよう (3:00)
-
スタート279:【+α:Macのみ】iOS端末に表示されるアプリのタイトルと画面の向き設定しよう(Xcode) (2:35)
-
スタート280:【+α】Android用のスプラッシュスクリーン(ランチャースクリーン)を作ってみよう (12:42)
-
スタート281:【+α:Macのみ】iOS用のスプラッシュスクリーン(ランチャースクリーン)を作ってみよう (4:08)
-
スタート280-2: 【+α:解説】Android12(APIレベル31)以降のランチャースクリーンの設定方法 (8:31)
-
スタート282: 【+α】SingleChileScrollViewとListViewを組み合わせる場合の注意点 (7:48)
-
スタート283: 【+α】SingleChildScrollViewとExpandedは一緒に使ってはいけない(ExpandedとElexibleの違いとは) (6:38)
-
スタート284:【+α:解説】今回の課題アプリでNull許容を適用したらどうなるか(安全呼び出し(?)と「!」演算子の実例) (3:05)
-
スタート285:<資料>今回作ったアプリのプロジェクト(私だけの単語帳)
-
スタート第8章+αの確認クイズ
-
スタートF101: Androidアプリの開発者登録をしよう(Google Playデベロッパーアカウント登録) (6:34)
-
スタートF102: 支払いプロフィールを設定しよう(Google Play Console) (6:08)
-
プレビューF103: サービス手数料を15%に引き下げるための設定をしよう(アカウントグループの登録) (4:17)
-
スタートF104: ターゲットAPIレベル・アプリID・アプリのバージョン設定をしよう(Android Studio) (7:40)
-
プレビューF104-2: 【解説】Flutter2.8以降におけるAndroidのビルドファイル(build.gradle)の各種SDKversion数値の確認方法 (5:03)
-
スタートF105: 【該当者のみ】ハイフン(-)の入ったドメイン名を使う場合の注意点(「AAPT: error: attribute 'package' in tag is not a valid Android package name: ・・・'」の対処法) (4:44)
-
スタートF106: 【解説】AndroidアプリのAPIレベルとは (7:29)
-
スタートF107: 【解説】なぜbuild.gradleファイルは2つ存在するのか (3:23)
-
スタートF108: アップロード鍵を作ってGoogle Play Consoleにアップロードするファイル(App Bundle)を作ろう(Android Studio) (8:02)
-
プレビューF108-2: 【+α】アップロード鍵を紛失してしまった場合の対処法(パスワード忘れ含む) (12:46)
-
スタートF109: 【解説】Google Playアプリ署名(App Signing)とは (3:47)
-
スタートF110: Google Play Consoleに新規アプリを追加して「ストア掲載情報」を入力しよう (3:23)
-
スタートF111: アプリのアクセス権と広告に関する設定をしよう(初期設定) (3:43)
-
スタートF112: コンテンツのレーティングを取得しよう(Google Play Console) (1:41)
-
スタートF113: ターゲットユーザーを設定しよう(初期設定) (3:26)
-
スタートF114: 【解説】13歳未満対象のアプリをリリースする際の注意点(①:新しくなったGoogle Playファミリーポリシーへの対応) (5:01)
-
プレビューF114-2: 【解説】13歳未満対象のアプリをリリースする際の注意点(②:対象年齢設定上の注意点と外部リンクの禁止) (5:46)
-
スタートF114-3: 「ニュースアプリ」であるかどうかの設定をしよう (2:09)
-
スタートF114-4: 新型コロナ(COVID-19)関連アプリであるかどうかの設定をしよう (1:53)
-
スタートF114-5: 「データセーフティ(個人情報を収集するかどうか)」の設定をしよう (5:48)
-
スタートF114-6: 「広告ID」の設定をしよう (3:37)
-
スタートF114-7: 「金融取引機能」を提供するアプリかどうかの設定をしよう (3:24)
-
スタートF114-8: 「行政アプリ」かどうかの設定をしよう (3:20)
-
スタートF115: アプリのカテゴリを選択し、連絡先情報を登録しよう(初期設定) (1:41)
-
スタートF116: ストアの掲載情報を設定しよう(初期設定) (6:11)
-
スタートF117: 内部テストを行うためのテスターを設定しよう(アプリのリリース) (2:11)
-
スタートF118: 新しいリリースを内部テスト版でリリースしよう(アプリのリリース) (2:10)
-
スタートF119: 内部テスト版アプリをテストし「リリース前」レポートで問題を確認しよう(アプリのリリース) (2:37)
-
プレビューF120: リリース前レポートで「java.lang.StackOverflowError」というクラッシュエラーが出た場合の対処法 (3:43)
-
スタートF121: テストが完了した内部テスト版を製品版としてリリースしよう(アプリのリリース) (2:07)
-
スタートF121-2: 【希望者のみ】EUを配信対象から外す設定をしよう(Google Play Console) (5:14)
-
スタートF122: リリースしたアプリのバージョンアップをしよう (3:47)
-
スタートF123: 【重要】2020/11/2までにAndroidアプリの「targetSdkVersion」を「29」に上げる必要あり! (3:50)
-
スタートF124: リリース版のアプリをGoogle Playを通さずに開発者のスマホ端末にインストールする方法 (2:49)
-
スタートF125: 【2023/9以前に作成されたアカウント向け】Google Play Consoleデベロッパーアカウント確認完了期限の設定 (5:36)
-
スタートF126: 【該当者のみ】法人で登録する際のDUNSナンバーの取得方法 (2:30)
-
スタートF127: 【2023/9以前に作成されたアカウント向け】Google Play Consoleデベロッパーアカウントの確認方法(組織の場合) (6:28)
-
スタートF201: iOSアプリの開発者登録をしよう(Apple Developer Programへの登録) (7:06)
-
スタートF201-2: 【該当者のみ】法人で登録する際のDUNSナンバーの取得方法 (2:30)
-
スタートF202: 支払いプロフィールを設定しよう(App Store Connect) (5:42)
-
スタートF202-2:【未済の方のみ】銀行口座保有人の住所登録が2021/10/22までに必要になりました(「有料App」契約をしている場合) (2:06)
-
プレビューF203: サービス手数料を15%に引き下げるための設定をしよう(App Store Small Business Programの申請) (3:25)
-
スタートF204: バンドルIDを登録しよう(App IDs) (4:03)
-
スタートF205: App Store Connectで新規アプリを追加しよう (3:45)
-
スタートF206: アップロードするプロジェクトの設定を確認しよう(Xcode) (5:15)
-
スタートF207: App Store Connectにアプリのファイルをアップロードしよう(XCode) (5:43)
-
スタートF208: 「App情報」を入力しよう(App Store Connect) (2:19)
-
スタートF209: 「価格および配信状況」の入力をしよう(App Store Connect) (1:34)
-
スタートF209-2: 欧州連合デジタルサービス法のトレーダー要件の設定をしよう (6:58)
-
スタートF209-3: 【トレーダーでない場合】EUを配信対象から外す設定をしよう(App Store Connect) (3:12)
-
スタートF209-4: App Store Connectに載せるスクリーンショット作成時の注意点 (4:44)
-
スタートF209-5: 「年齢制限指定」の設定をしよう (5:29)
-
スタートF209-6: 【解説】子供向けiOSアプリ作成上の注意点 (5:36)
-
スタートF210: 「プラットフォームバージョン情報」を入力しよう(App Store Connect) (6:26)
-
スタートF211: TestFlightでベータ版テストをしよう(App Store Connect) (6:23)
-
スタートF212: テストが完了したベータ版を製品版として審査に提出しよう(AppReview) (3:04)
-
スタートF213: リリースしたアプリのバージョンをアップしよう (2:35)
-
スタート「Null Safety(Null安全)」とは (8:06)
-
スタート安全呼び出し(Safe Call)と「!」演算子 (6:56)
-
スタート空っぽ(null)と空文字(””)の違い (2:02)
-
スタート「!」演算子で強制アクセスして空っぽだった場合に何が起こるのか(Null check operator called on null value) (3:44)
-
スタート「late」使用上の注意点(最初に使うまでに値を入れないと(初期化しないと)いけない) (9:22)
-
スタート【+α】ジェネリクスを使う場合のNull Safety上の注意点 (8:10)
-
プレビュー既存のプロジェクトをNull Safety対応に移行させる方法(Migrating to null safety) (6:13)
これ一本でiOS・Androidアプリが”いっぺんに”作れる
今最も注目のアプリ開発ツール「Flutter(フラッター)」
「Flutter(フラッター)」とは、
Googleが2018年末に正式版を発表した出来たてホヤホヤの「マルチプラットフォーム」アプリ開発ツール
です。
スマホと言えば「iOS(iPhone)」と「Android」が世界シェアのほぼ全てを牛耳る2大巨頭体制。
ところが、そのシェアは国によってバラバラ。
世界全体で見たらAndroidですが、日本では真逆なんです。
しかも、お互いそれなりのシェアを持ってますから、どちらかだけ対応するというわけにはいきません。
しかし、実は同じスマホアプリでもiOSアプリとAndroidアプリとは全くの別物。
iOSアプリは
・XCodeという道具と
・iOS SDKという開発キットを使って
・Swiftというプログラミング言語で作るのに対し、
Androidアプリは
・Android Studioという道具と
・Android SDkという開発キットを使って
・Kotlin(あるいはJava)というプログラミング言語で作る。
つまり、iOSアプリとAndroidアプリとでは作る工程が全く違うんです!
それは、iOSとAndroidではプラットフォーム(≒ OS:オペレーティングシステム)が違うからなんですね。
だから、同じ見た目のスマホアプリでも、またゼロから作る必要がある。
使う方はいいけれど、作る方は時間もコストもかかって超大変!
そんな困った状況を解消してくれるスグレモノの開発ツールが「Flutter(フラッター)」なんです。
「Flutter」を使えば、これ一本でiOSアプリもAndroidアプリも全く同じ工程”いっぺんに”作れちゃうんです。
しかも、「Flutter」はこれ一本で、
・スマホアプリのみならず、
・デスクトップアプリや
・Webアプリなど
色んなプラットフォーム(≒ OS)に対応するアプリが”いっぺんに”作れちゃうんです。
これが「マルチプラットフォーム」の意味であり、「Flutter」の凄いところなんです。
だから、「Flutter」は正式版が登場して1年も経っていないにも関わらず、今最も注目を集めるアプリ開発ツールになったんですね。
【参考】GoogleのFlutterはmacOSやWindowsも含む真のマルチプラットフォーム対応へ(TechCrunch日本語版 2019/5/9)
https://jp.techcrunch.com/2019/05/09/2019-05-07-googles-flutter-framework-spreads-its-wings-and-goes-multi-platform/
さらにGoogleは、Flutterを利用して、macOS、Windows、Linuxをターゲットにした開発がもうすぐ可能になることも明らかにした。すでにGoogle自身も、Flutterを利用してGoogle Home Hub(Nest Hubに改名)のユーザー体験を設計し始めているという。それ以外に、さまざまな組み込みデバイス用に活用することも視野に入れている。
「Flutter(フラッター)」は、まさにこれからスマホアプリ開発、引いてはプログラミングを始めようという方にうってつけのアプリ開発ツール。
これから大いなる将来性が見込まれるこの「Flutter」のスキルを、あなたもいち早く習得してみませんか。
経験ゼロでも挫折せずにスマホアプリ(iOS・Android)が作れるようになる方法
(「みんプロ式」4つの秘訣)
「みんプロ式」は「経験が全くない方あるいは挫折してしまった経験のある方専門のプログラミング講座」です。
それはわかったんだけど、
じゃあ、
◆ 「みんプロ式」は他のスマホアプリ開発講座と何が違うんや?!
◆ なんで経験ゼロの人でも3ヶ月でスマホアプリ(iOS・Android)が作れるようになると言い切れるんや?!
と、ちょっと疑問に思いますよね。
実はこれ、ぼく自身が苦い挫折を経験してきたからなんです。その挫折経験を踏まえて
「みんプロ式」では、初心者の方が陥りやすい挫折パターンを徹底的に回避する仕組みを盛り込んでいるから
なんですね。
秘訣①:ちょっとしたスキマ時間でも動画で学習できるスモールステップ型カリキュラム
(1日たったの3レクチャーで約3ヶ月で修了できるカリキュラム)
プログラミングを全くやったことのない人が、いきなりスマホアプリを作るというのは、山登りをしたことのない人がいきなり富士山に登るようなものです。
全くの初心者が、いきなり傾斜の急な斜面を最短距離で登るのは、はっきり言って無謀です。
でも、急斜面の最短距離じゃなくて、なだらかな道をゆっくり登れば、山登りをやったことがない人でも登ることができますよね。
プログラミングの学習も同じ。
なだらかな道を「スモールステップ」で登っていけば、誰でもスマホアプリが作れるようになるんです。
プログラミングというのは、スポーツとかピアノと一緒なので、なんだかんだ上達するための道というのは、
ピアノの場合はいくら楽譜読めても仕方がないから弾きまくらないと上達しない
というのと一緒で、
プログラミングだって、文法がわかっても、実際にコード書けないと全然意味がないわけだから、とにかくコード書きまくるしかない
というのが多分こたえなんです。
ですから、
挫折を生まないためには、少しずつでもいいから毎日続けられる仕組みがまず必要なんです。
「みんプロ式」のカリキュラム(動画テキスト)は、実に300ものスモールステップに分解されていますが、そのワケがこれなんです。
1ステップあたり何とたったの5分。
これが何10分もあると学習時間を作るのが難しくなりますけど、5分だったらちょっとしたスキマ時間でも学習が進められますよね。
毎日少しずつでもいいから継続できる「スモールステップ型」カリキュラムこそが、「みんプロ式」が挫折を生まない仕掛け。
1日たったの3レクチャーで、約3ヶ月後には全くの初心者の方でもスマホアプリ開発の基礎が身につくカリキュラムとなっているのです。
カリキュラム
-
プレビュー007:オープニング(初心者でない方はこのセクションは飛ばして頂いて構いません) (1:15)
-
プレビュー008:スマホとは(歴史・保有台数・市場規模) (5:04)
-
プレビュー009:スマホ界の2大巨塔・AndroidとiOS[iphone]との違いとは (3:17)
-
スタート010:アプリとは(ハードウェアとソフトウェア) (1:06)
-
スタート011:プログラミングとは (2:12)
-
スタート012:プログラミング処理の基本<文・関数(メソッド)・クラス> (6:59)
-
プレビュー013:プログラミングの3ステップ(ブロック作りと同じ) (2:39)
-
スタート014:プログラムがアプリになるまでの仕組み(コンパイルとビルド) (4:27)
-
スタート第2章の確認クイズ
-
プレビュー015: オープニング(Flutterアプリを作るために必要な道具とは+環境構築Zoomライブサポート会のご案内) (5:03)
-
スタート016: 【Windows】WindowsでFlutterアプリを作るための道具の説明とGitのインストールをしよう(該当者のみ) (4:39)
-
スタート016-2: 【Windows】Flutterアプリの開発ツール(SDK)の設定をしよう (3:52)
-
スタート016-3: 【Windows】Flutterのコマンドラインツールを使えるようにするためのパス通しをしよう (3:48)
-
スタート017:【Windows】Android Studioのダウンロードとインストールをしよう (6:40)
-
スタート017-2: 【Windows】FlutterがAndroid Studioを正しく認識できるための設定をしよう (6:09)
-
スタート018:【Windows】Androidアプリをエミュレーターで動かすための設定をしよう(Android Studio) (6:35)
-
スタート019:【Windows】Androidアプリを実機で動かすための設定をしよう(Android Studio) (3:49)
-
スタート020:【Mac】Flutterアプリの開発ツール(SDK)の設定をしよう (9:11)
-
スタート020-2: 【Mac:Appleシリコンのみ】Rosettaのインストールをしよう (3:05)
-
スタート020-3: 【Mac】Flutterのコマンドラインツールを使えるようにするためのパス通しをしよう (6:06)
-
プレビュー020-4: 【Mac】ファンクションキーをデフォルトで使えるように設定しよう (2:31)
-
スタート020-5: 【Mac:該当者のみ】Homebrewのインストールをしよう (3:54)
-
スタート020-6: 【Mac:該当者のみ】CocoaPodsとGitのインストールをしよう (2:35)
-
スタート021:【Mac】Android Studioのダウンロードとインストールをしよう (7:18)
-
スタート022:【Mac】Androidアプリをエミュレーターで動かすための設定をしよう(Android Studio) (7:16)
-
スタート023:【Mac】Androidアプリを実機で動かすための設定をしよう(Android Studio) (3:01)
-
スタート024:【Mac】Xcodeのダウンロードとインストールをしよう (2:51)
-
スタート025:【Mac】iOSアプリをシミュレーターで動かすための設定をしよう(Xcode) (4:31)
-
スタート026:【Mac】iOSアプリを実機で動かすための設定をしよう(Xcode) (12:31)
-
スタート027-1: 【Windows・Mac共通】Androidエミュレーターでの日本語入力と音量調節する方法 (1:47)
-
プレビュー027-2: 【Mac】iOSシミュレーターでの日本語入力と音量調節する方法 (1:23)
-
スタート027-3: 【Windows・Mac共通】AndroidのSDKコマンドラインツールをインストールしよう (1:39)
-
スタート027-4:【Windows・Mac共通】AndroidのSDKプラットフォームを使うためのライセンスに同意しよう (3:42)
-
スタート027-5:【Windows・Mac共通】Android Studioの初期設定をしよう(Flutter/Dartプラグインのインストール等) (11:05)
-
スタート027-6: 【Windows・Mac共通】「flutter doctor」して設定ができているか確認しよう (2:43)
-
プレビュー028:オープニング(今回作るアプリの紹介[はじめてのアプリ]) (1:56)
-
スタート029:Android Studioで新しいFlutterプロジェクトを作ってみよう (15:30)
-
スタート030:【初心者向け解説】プロジェクトをWindowsエクスプローラーあるいはMacのFinderで見る方法 (2:34)
-
プレビュー030-2:Flutter2.5以降は「flutter_lints」パッケージを無効化しておいてください(理由も説明しています) (7:08)
-
スタート031:既に作ったプロジェクトを開いてみよう(作りかけのプロジェクトも含む) (2:39)
-
プレビュー032:【初心者向け解説】プログラミングの天才に学ぶAndroid Studioに行く前にすべきこと(スマホアプリを作るための3ステップ) (3:41)
-
スタート033:<資料>設計図(はじめてのアプリ)
-
プレビュー034:今回作るアプリの設計図を紙に書こう(はじめてのアプリ) (3:00)
-
スタート034-2: 【解説】課題アプリのサンプルプロジェクトのダウンロード方法 (7:00)
-
スタート035:Flutterプロジェクトのフォルダ構造を知ろう(最低限抑えておくべき3兄弟) (13:13)
-
スタート036:<資料>今回のアプリで使うリソース
-
スタート037:アプリで使う画像をプロジェクトに取り込もう(小道具のプロジェクトへの取り込み方3ステップ) (9:21)
-
プレビュー038:Flutterはどういう順番でコード書いたらええねん6ステップ (8:15)
-
スタート039:アプリ全体に共通する部分(アプリのルート部分)を実装しよう (8:21)
-
スタート040:【初心者向け解説】Dartプログラミングはたったの2ステップしかない! (4:59)
-
スタート041:【初心者向け解説】クラスのインスタンス化(初期化)とは (8:07)
-
スタート042:【初心者向け解説】Dartにおけるメソッド(関数)の作り方 (12:06)
-
スタート043:【解説】Widget(ウィジェット)とは (13:35)
-
スタート044: 「StatefulWidget」を使ってホーム画面の外枠を実装をしよう(import文とは) (9:18)
-
プレビュー045:フォルダの階層構造がちゃんと見えるように「Compact Middle Packages」のチェックを外しておこう (2:52)
-
スタート046:【初心者向け解説】ファイル・クラス・関数(メソッド)等の名前付けの規則 (4:00)
-
スタート047:【初心者向け解説】プロジェクト内のファイル・フォルダ名の変更の仕方 (1:16)
-
プレビュー047-2:【初心者向け解説】ソースコード内の値を検索する方法と値の名前を一括で変更する方法 (2:12)
-
スタート048:「Scaffold」を使ってホーム画面をマテリアルデザイン仕様にしてアプリバーを設定しよう (13:58)
-
スタート048-2: Androidエミュレーターをスタンドアロンアプリとして起動させる方法 (2:53)
-
スタート048-3: 【解説】MaterialAppのtitle属性(main.dart)とAppBarのtitle属性(home_screen.dart)は何が違うのか (8:21)
-
プレビュー048-4: 【解説】意図せざる「Hot Reload」が起こってしまうのを止める方法 (4:22)
-
スタート049:【解説】Material Design(マテリアルデザイン)とは(MaterialAppの謎解き) (13:27)
-
スタート050:【解説】Widgetの並べ方超基本3パターン (2:53)
-
スタート051:「Column」を使ってWidgetを縦方向に並べよう (4:05)
-
スタート052:「Text」を使って文字を表示させよう (5:32)
-
スタート053:「Center」を使ってWidgetを中央寄せしよう (4:04)
-
スタート054:「TextField」を使って文字入力欄を設置しよう (5:16)
-
スタート055:「Image.asset」を使ってプロジェクトに取り込んだ画像を表示させよう (2:25)
-
プレビュー055-2: 【解説】Android Studioで手入力せずにパスを入力できる方法(「Copy path/Reference..」の使用) (1:44)
-
スタート055-3: 【初心者向け解説】パス(path)とは何か (2:54)
-
スタート056: 「ElevatedButton」を使ってボタンを表示させよう(RaisedButton廃止についての説明あり) (8:18)
-
スタート057:「Container」を使って画面全体に余白(padding)を作ろう (5:05)
-
スタート057-2: 【解説】「PlaceHolder」とは (3:58)
-
スタート058: 【解説】「Flutter Outline」の基本的な使い方 (3:11)
-
スタート059:「SizedBox」を使ってボタンを横幅いっぱいに拡げよう (4:10)
-
スタート060:「Expanded」を使って画像の縦幅を残り枠いっぱいに拡げよう (3:30)
-
スタート061:ボタンを押したら文字を表示させる処理を実装しよう(変数の作り方) (7:25)
-
スタート062:入力欄(TextField)に入れた文字を取得して表示させよう (3:39)
-
スタート062-2: 文字がプログラム上で本当に変わっているかどうかを確かめてみよう (1:39)
-
スタート063:ボタンを押したら画像を表示させる処理を実装しよう (1:41)
-
スタート064:【解説】Dartにおけるスコープ(変数・関数にアクセスできる[参照できる・使える]範囲) (7:50)
-
スタート064-2: 【解説】クラスやメンバ(プロパティ・メソッド)の名前の前につく「_(アンダースコア)」の意味は何か (7:33)
-
スタート064-3: 【初心者向け解説】「変数」とは(インスタンス・オブジェクト・変数・定数の違いは何か) (5:17)
-
スタート064-4: 【初心者向け解説】Android Studioにおけるグローバル変数とローカル変数の見分け方 (2:27)
-
プレビュー064-5: 【初心者向け解説】「$」とは何か(文字列の間に変数を入れる方法) (5:30)
-
スタート065:「setState」メソッドを使って設定した文字・画像を画面に表示させよう(アプリの状態変化を画面に反映させる) (4:59)
-
スタート066:【初心者向け解説】プログラミングにおける「=」とは(代入) (4:39)
-
スタート067: 【初心者向け解説】セミコロン(;)とカンマ(,)とコロン(:)の違い (7:16)
-
スタート068:アプリを動かす前にプロジェクトを一旦きれいにしよう(flutter clean) (4:01)
-
プレビュー068-2: 【解説】「flutter clean」は内部で何をやってみるのか(Flutterプロジェクトのサイズ削減方法) (4:55)
-
スタート069:ソースコードのフォーマットを整えよう(Reformat File) (4:20)
-
スタート070:【Windows・Mac共通】作ったアプリをAndroidエミュレーターで動かしてみよう (5:48)
-
プレビュー070-2: 【エラー対応】「INSTALL_FAILED_INSUFFICIENT_STORAGE」というエラーが出てAndroidエミュレーターでアプリが動かせない場合の対処法 (2:49)
-
スタート070-3: 【エラー対応】「ParcelableException:・・・ Requested internal only, but not enough space」というエラーが出てAndroidエミュレーターでアプリが動かせない場合の対処法(エミュレーターのメモリを増やす方法) (3:34)
-
スタート071:【Windows・Mac共通】作ったアプリをAndroid実機で動かしてみよう (2:23)
-
プレビュー071-2: 【Windows・Mac共通(補足)】Android実機でワイアレスデバッグする方法(スマホをPCにケーブルで繋がずにデバッグする方法) (5:57)
-
スタート072:【Macのみ】作ったアプリをiOSシミュレーターで動かしてみよう (1:54)
-
スタート073:【Macのみ】作ったアプリをiOS実機で動かしてみよう(素晴らしきマルチプラットフォームの世界) (6:20)
-
プレビュー073-2: 【Macのみ(補足)】なぜiOS実機で動かそうとすると毎回Xcodeが開いてしまうのか (4:23)
-
プレビュー073-3: 【Macのみ(補足)】iOS実機でワイアレスデバッグする方法(スマホをPCにケーブルで繋がずにデバッグする方法) (2:45)
-
スタート073-4: 【Macのみ】iOS14以降はデバッグモードでインストールしたアプリは端末から直接起動することはできません (3:39)
-
スタート074: 【初心者向け解説】再生[Run]モードとデバッグ[Debug]モードの違い+ブレークポイントでアプリを途中で止めて変数の値を確認する方法 (4:02)
-
スタート074-1.5: 【該当者のみ】ブレークポイントでアプリを止めると同じ名前の編集不能のファイルが開く場合の対処法 (5:31)
-
スタート074-2: 【初心者向け解説】プログラムを1行ずつ止めながら実行する方法(Step Over / Step Into) (8:51)
-
スタート075:【初心者向け解説】Flutterアプリを動かす3つのモード(Debugモード / Releaseモード / Profileモード) (4:40)
-
スタート076:【+α】インターネット上の画像をアプリで表示させてみよう(Image.network) (2:24)
-
スタート077:【+α】デバッグバナーを非表示にしよう (1:32)
-
スタート078:【+α】アプリ全体のテーマをダークモードに変更しよう (2:14)
-
スタート079:【+α】「CupertinoApp」を使ってアプリの見た目をiOS仕様に変えよう (8:07)
-
スタート080:<資料>今回作ったアプリのプロジェクト(はじめてのアプリ)
-
スタート第4章の確認クイズ
-
プレビュー081:オープニング(今回作るアプリの紹介[ツッコミマシーン]) (5:33)
-
スタート082:<資料>今回のアプリの設計図(ツッコミマシーン)
-
プレビュー083:今回作るアプリの設計図を紙に書こう(ツッコミマシーン) (2:45)
-
スタート084:Android Studioで今回作るアプリのプロジェクトを作ろう (5:19)
-
スタート085:<資料>今回のアプリで使うリソース
-
スタート086:アプリで使う効果音ファイルをプロジェクトに取り込もう (5:42)
-
スタート086-2: 【解説】アプリで使うリソースをプロジェクトに取り込む際のpubspec.yamlファイルでの記述上の注意点 (3:18)
-
スタート087:アプリ全体に共通する部分(アプリのルート部分)を実装しよう(main.dart) (5:52)
-
スタート088:【解説】runApp関数とは (3:33)
-
スタート089:【初心者向け解説】クラスの継承(extends)とメソッドのオーバーライド(override)とは (11:13)
-
スタート090:【初心者向け解説】「ご先祖様」に「子孫」を代入するのはOK(プログラミングにおける「=」とは[完全版]) (2:42)
-
プレビュー091:「StatefulWidget」を使ってホーム画面の外枠を実装をしよう(home_screen.dart) (3:45)
-
スタート092:「Scaffold」を使ってホーム画面をマテリアルデザイン仕様にしてアプリバー(AppBar)を設定しよう (5:57)
-
スタート093:「Column」と「Row」を使ってボタンを3行2列の碁盤の目に並べよう (9:20)
-
スタート094:「Expanded」と「flex」を使って碁盤の目を画面いっぱいに均等に並べよう (5:39)
-
スタート095:「CrossAxisAlignment」を使ってボタンの大きさを枠いっぱいに拡げよう (5:56)
-
スタート096:「Container.padding」を使って画面全体と各枠内のボタンに余白(padding)を作ろう (5:11)
-
スタート097:【初心者向け解説】「List(配列)」とジェネリクス(総称型)とは (11:09)
-
スタート098:「List」を使って6つのボタンに表示させる文字をセットしよう (8:14)
-
スタート098-2:【初心者向け解説】関数・メソッドの引数の名前が何でもいいのはなぜか?(引数を入れる(渡す)とはどういうことなのか?) (4:21)
-
スタート099: 【解説】「パッケージ(package)」とは (4:23)
-
スタート100: 【解説】Flutterアプリで音(効果音・BGM)を出す方法(just_audioパッケージの使い方(パターン①:一番シンプルな使い方)) (9:46)
-
スタート101: 「just_audio」パッケージをプロジェクトに追加しよう(パッケージを使うための2ステップ) (12:53)
-
スタート101-2: 【Android】64K参照制限回避のための「multiDex」有効化設定をしよう(just_audioのバージョン0.9.20以降) (9:45)
-
スタート101-3: 【iOS&Appleシリコン(M1・M2)のMacのみ】「LoadError - dlopen・・・」エラーを回避するための設定をしよう (5:53)
-
スタート102: 【解説】pubspec.yamlファイルとは (6:00)
-
スタート103: 【解説】pubspec.lockファイルとパッケージのアップグレードとダウングレード方法 (4:17)
-
スタート104: 【解説】パッケージのバージョンを指定する際に出てくる「^」とは何者なのか(バージョンコード付与の原則(Sementic Versioning)と「caret syntax」) (9:06)
-
スタート104-2: 【解説】Flutter/Dartにおけるパッケージ(package)・プラグイン(plugin)・ライブラリ(library)の違いとは (9:33)
-
スタート105: 【解説】なぜAudioPlayerのインスタンスは使い終わったら破棄しないといけないのか(メモリの話) (5:06)
-
スタート105-2: 【解説】StatefulWidgetはどうやって状態管理をしているのか (8:18)
-
スタート106: AudioPlayerクラス(just_audioパッケージ)の初期化と破棄の実装をしよう (6:49)
-
スタート107: 【解説】なぜAudioPlayerの宣言文の先頭に「late」をつける必要があるのか(Null Safetyとは) (13:45)
-
スタート107-2: 【解説】initState及びdisposeメソッド内で処理を書く際の注意点 (9:21)
-
スタート107-3: 【解説】「assert」とは (5:02)
-
スタート108: 効果音ファイルのパス(Path)をセットしよう (10:03)
-
スタート109: 【初心者向け解説】ビルト・イン型クラスとは(Dartにおける2種類のクラス) (11:10)
-
スタート110: 【解説】非同期処理(async-await)とは (8:30)
-
スタート111: 【解説】「Future」とは (8:27)
-
スタート112: 【解説】Dartでの非同期処理の使い方3原則 (10:42)
-
スタート113:ボタンを押したら効果音を鳴らす処理を実装しよう (4:59)
-
スタート113-2: 【解説】時間のかかる非同期処理であるsetAssetの前に「await」をつけなくても音が鳴ったのはなぜか(playメソッドの謎解き) (5:24)
-
スタート114: 【解説】複数の音を同時に鳴らす方法(just_audioパッケージの使い方:パターン②) (3:07)
-
スタート114-2: 複数の音を同時に鳴らせるようにパターン①のプロジェクトを変更しよう (8:03)
-
スタート114-3: 【+α】「DateTime#difference」を使って音が鳴るまでのタイムラグを計測してみよう (6:39)
-
スタート115: 【解説】ボタンを押してから音が鳴るまでのタイムラグをなくす方法(just_audioパッケージの使い方:パターン③) (3:22)
-
スタート115-2: ボタンを押してから音が鳴るまでのタイムラグをなくせるようにパターン①のプロジェクトを変更しよう (3:34)
-
スタート115-3: 【解説】initStateで非同期処理をするとなぜエラーになるのか (3:38)
-
スタート115-4: initStateで非同期処理ができるようにしてアプリを動かしてみよう (3:33)
-
スタート115-5: 【解説】なぜ2回目のボタン押下時には音が鳴らなかったのか (4:40)
-
スタート115-6: ボタンを複数回押しても音が鳴るようにしよう(AudioPlayer#seekメソッド) (3:35)
-
プレビュー116:【初心者向け解説】エラーはどこでわかるのか(プログラミングにおける3種類のエラー) (6:28)
-
スタート117: 【初心者向け解説】「空っぽ(null)」と「空白("")」の違いとは (2:31)
-
スタート118: 【解説】StatefulWidgetはなぜStateオブジェクトと別クラスで分離されているのか(Widgetの本当の正体とは) (12:28)
-
スタート119: 【解説】Flutterとネイティブアプリ開発(Android/iOS)の状態管理方法比較 (6:35)
-
スタート119-2: 【解説】「Flutter Gems」を使ったパッケージの見つけ方 (4:19)
-
スタート119-3: 【+α:解説】pub devに公開されているパッケージの挙動確認方法(exampleモジュールにあるサンプルアプリの実行方法) (7:10)
-
スタート120:【+α】ElevatedButtonをカスタマイズしてみよう(ElevatedButton.styleFromメソッドを使って) (12:21)
-
プレビュー120-2: 【解説】Flutter3.3以降はElevatedButton.styleFromの「primary」「onPrimary」属性が非推奨になりました (3:57)
-
スタート121:【+α:解説】今回の課題アプリでNull許容を適用したらどうなるか(安全呼び出し(?)と「!」演算子の実例) (3:59)
-
スタート121-2: 【+α:解説】「!」演算子で強制アクセスして空っぽだった場合に何が起こるのか(Null check operator called on a null value) (3:44)
-
スタート122:<資料>今回作ったアプリのプロジェクト(ツッコミマシーン)
-
スタート第5章の確認クイズ
-
プレビュー123:オープニング(今回作るアプリの紹介[計算脳トレ]) (5:43)
-
スタート124:<資料>今回の作るアプリの設計図(計算脳トレ)
-
プレビュー125:今回作るアプリの設計図を紙に書こう(計算脳トレ) (4:48)
-
スタート126:Android Studioで今回作るアプリのプロジェクトを作ろう (4:52)
-
スタート127:<資料>今回のアプリで使うリソース
-
スタート128:アプリで使うリソース(画像・音)をプロジェクトに取り込もう (3:38)
-
スタート129:アプリ全体に共通する部分(アプリのルート部分)を実装しよう(main.dart) (4:38)
-
スタート130:[ホーム画面]外枠を実装をしよう(home_screen.dart) (3:45)
-
スタート131:[ホーム画面]「SafeArea」を使ってアプリバー(AppBar)無しのレイアウトに変えよう (3:15)
-
スタート132:[ホーム画面]「Column」を使ってWidgetを縦方向に並べよう (6:09)
-
スタート133:[ホーム画面]「Expanded」と「Container」を使ってボタンを画面最下部中央に設置しよう (5:35)
-
スタート134:[ホーム画面]「ElevatedButton.icon」を使ってボタンにアイコンをつけて見た目をカスタマイズしよう (5:44)
-
スタート135:【初心者向け解説】マテリアルアイコンとは (4:08)
-
スタート136:【解説】Flutterアプリにおける画面・文字の大きさの単位とは(物理ピクセルと論理ピクセル) (13:13)
-
スタート137:【+α】「MediaQuery.of」メソッドを使って画面のサイズ(論理ピクセル)を取得しよう (2:30)
-
スタート137-2: 【+α:解説】「MediaQuery」とは (4:22)
-
スタート137-3: 【+α:解説】Flutter3.10より導入された「MediaQuery.sizeOf」等について(MediaQueryのInheritedModel化) (9:32)
-
スタート137-4: 【+α:解説】動かしているアプリのWidgetの状況を確認する方法(「Flutter Inspector(Dev Tools)」の基本的な使い方) (7:22)
-
スタート137-5: 【+α:解説】画面サイズの異なる端末の見た目を1つの端末で確認する方法(「device_preview」パッケージの使い方) (10:08)
-
プレビュー138:【解説】「DropdownButton」の使い方3ステップ (2:07)
-
スタート139:[ホーム画面]「SizedBox」を使ってWidget間に空白を設定しよう (6:02)
-
スタート140:[ホーム画面]「DropdownMenuItem」を使って「DropdownButton」に表示させる選択肢をセットしよう(items属性) (9:43)
-
スタート141:【+α】「Cascade Notation(..)」を使ってコードをシンプルにしよう (3:17)
-
スタート142:[ホーム画面]「DropdownButton」で選択されたアイテムをセットしよう(value属性) (6:56)
-
スタート143:【解説】なぜ「value」の後ろに「!」をつける必要があるのか(安全呼び出し(?)と「!」演算子とは) (8:05)
-
スタート144:[ホーム画面]「DropdownButton」でアイテムが選択された時の処理を実装しよう(onChanged属性) (4:52)
-
スタート145:【解説】onPressed/onChanged属性の中身はどうなっているのか (8:03)
-
プレビュー145-2: 【解説】onPressed属性の「() =>」を忘れると何が起こるのか(setState() or markNeedsBuild() called during build) (6:53)
-
スタート145-3: 【解説】onChanged属性に設定する関数の引数は誰がいつ渡しているのか(コールバック関数とは) (4:29)
-
プレビュー145-4:【解説】「ValueChanged<T?>?(DropdownButton#onChanged属性)」にはなぜ「?」が2つあるのか? (3:21)
-
スタート146:【解説】Flutterにおける画面遷移の方法(NavigatorとMaterialPageRoute) (8:27)
-
スタート147:[ホーム画面]スタートボタンをクリックしてテスト画面を開く処理を実装しよう (7:18)
-
スタート147-2: 【解説】Stateクラス(StafulWidgetの面倒を見る育ての親)ではBuildContextがどこでも使えるのはなぜか (6:56)
-
スタート148:[ホーム画面・テスト画面]名前付きパラメータ(Named Parameter)を使って選択した問題数をホーム画面からテスト画面に渡そう (8:18)
-
スタート149: 【解説】「required」の意味とは(Flutter2.0以降は「@required」が「required」に変更されました) (3:59)
-
スタート149-2: 【解説】名前付き引数(パラメータ)とは(Named Parameters) (9:28)
-
スタート150:【初心者向け解説】Flutterにおける2つの定数(「const」と「final」) (6:22)
-
プレビュー151:【初心者向け解説】「this」とは (6:57)
-
スタート152:「const」を使って描画パフォーマンスを向上させよう(Flutter Performanceの使い方) (11:35)
-
スタート153:【初心者向け解説】どこからでもインスタンスを経由せずに直接使えるメンバを作る2つの方法(「top-level」と「static」) (9:53)
-
プレビュー153-2: 【初心者向け解説】「static」の解説②(「静的」と「動的」/「インスタンス変数」と「クラス変数」の違いとは) (8:21)
-
スタート153-3: 【解説】トップレベル(top-level)メンバ使用上の注意点(意図せざるしてアプリが落ちるトラップが起こる可能性あり) (7:21)
-
スタート154:[テスト画面]画面全体のレイアウトの枠組みを作ろう(SafeArea/Container/Column) (6:37)
-
スタート155:[テスト画面]「Table」と「Center」を使ってスコア表示部分を実装しよう (13:27)
-
プレビュー156:[テスト画面]問題表示部分を実装しよう(Expandedとflex/Container) (12:17)
-
スタート157:[テスト画面]こたえ合わせボタン部分を実装しよう(ElevatedButton/SizedBox/Container) (3:35)
-
プレビュー157-2: 【解説】「Hot Reload」と「Hot Restart(ゲジゲジor再生ボタン)」の違いとは (7:31)
-
プレビュー157-3: 【解説】「Hot Restart」時にbuildメソッドが2回回っても気にする必要なし (4:32)
-
スタート158:[テスト画面]もどるボタン部分を実装しよう(ElevatedButton/SizedBox/Container) (3:04)
-
スタート159:[テスト画面]電卓ボタン部分を実装しよう(Table/Container) (8:29)
-
スタート160:[テスト画面]「Stack」を使って○・☓画像とテスト終了テキスト部分のWidgetを積み重ねよう (7:39)
-
スタート161:【初心者向け解説】条件分岐の「if文」と比較演算子(プログラミングは3つの流れ) (8:01)
-
スタート162:[テスト画面]テスト開始前の初期設定をしよう(①:ホーム画面で選択した問題数の引き継ぎ) (6:01)
-
スタート163:[テスト画面]テスト開始前の初期設定をしよう(②:効果音の準備) (9:40)
-
スタート164:[テスト画面]出題処理を実装しよう(①:出題時の初期設定) (6:16)
-
プレビュー164-2: 【初心者向け解説】if(bool型の値)はif(bool型の値 == true)と同じ意味 (1:19)
-
スタート164-3: 【初心者向け解説】if(!bool型の値)はif(bool型の値 == false)と同じ意味(Dartにおける2つの「!」) (4:19)
-
スタート165:[テスト画面]出題処理を実装しよう(②:乱数(Random)を使って出題) (6:45)
-
スタート165-2: 【初心者向け解説】setStateメソッドの「中」で処理を書く場合と「外」で書くのでは何が違うのか(setStateメソッド使用上の留意点) (5:32)
-
スタート166:[テスト画面]電卓ボタンを押す処理を実装しよう (11:20)
-
スタート167:[テスト画面]こたえ合わせ処理を実装しよう(①:初期設定) (4:52)
-
プレビュー168:【初心者向け解説】三項条件演算子(conditional expressions)とは(?/:) (3:27)
-
スタート169:[テスト画面]こたえ合わせ処理を実装しよう(②:正解判定) (7:19)
-
スタート169-2: [テスト画面]こたえ合わせ処理を実装しよう(②-2:正解判定時に効果音追加) (4:10)
-
スタート170:[テスト画面]こたえ合わせ処理を実装しよう(③:正答率の計算) (3:36)
-
スタート171:[テスト画面]こたえ合わせ処理を実装しよう(④:終了判定) (2:28)
-
スタート172:[テスト画面]こたえ合わせ処理を実装しよう(⑤:「Timer」を使って1秒後に次の問題を出題) (2:53)
-
スタート173:<資料>次のレクチャー(タイマー処理の解説)で使うプロジェクト
-
スタート174:【解説】タイマー処理(Timer)とは (10:44)
-
スタート174-2: 【解説】「Duration」クラスとは (4:23)
-
スタート175:[テスト画面]もどるボタンを押したらホーム画面に戻る処理を実装しよう(Navigator.popメソッド) (6:41)
-
スタート176:【+α:解説】今回の課題アプリでNull許容を適用したらどうなるか(安全呼び出し(?)と「!」演算子の実例) (1:45)
-
スタート177:<資料>今回作ったアプリのプロジェクト(計算脳トレ)
-
スタート第6章の確認クイズ
-
プレビュー178:オープニング(今回作るアプリの紹介[私だけの単語帳]) (8:27)
-
スタート179:<資料>今回の作るアプリの設計図(私だけの単語帳)
-
プレビュー180:今回作るアプリの設計図を紙に書こう(私だけの単語帳) (8:07)
-
スタート181:Android Studioで今回作るアプリのプロジェクトを作ろう (5:12)
-
スタート182:<資料>今回の作るアプリのリソース
-
スタート183:アプリで使うリソース(画像)をプロジェクトに取り込もう (4:16)
-
スタート184:アプリ全体に共通する部分(アプリのルート部分)を実装しよう (3:17)
-
スタート185:[ホーム画面]外枠の実装をしよう(アプリバー無しのマテリアルデザイン仕様) (2:26)
-
スタート186:[ホーム画面]画面全体のレイアウトの枠組みを作ろう (5:03)
-
スタート186-3: 【初心者向け解説】「ビット」と「バイト」と16進数との関係とは (5:56)
-
スタート187:カスタムフォントの設定をしよう(カスタムフォントの使い方4ステップ) (8:37)
-
スタート188:「Divider」を使って横線を引こう (6:01)
-
スタート189:「VoidCallback」を使ってボタンをカスタムウィジェットで作ろう (15:25)
-
スタート190:【解説】なぜButtonWithIconのコンストラクタ引数に「required」キーワードをつける必要があるのか (1:29)
-
スタート191:<資料>次のレクチャー(VoidCallbackの解説)で使うプロジェクト
-
スタート192:【解説】「VoidCallback」とは何か (6:12)
-
スタート193:【解説】ラジオボタン(RadioListTile)の使い方4ステップ (6:31)
-
プレビュー194:[ホーム画面]ラジオボタンの表示部分を実装しよう(title属性) (5:42)
-
スタート194-2: 【+α:解説】RadioListTileのvalue属性はNull許容でないのに「null」が入れられるのはなぜか(nullとonChanged属性の正体とは?) (7:22)
-
スタート195:[ホーム画面]ラジオボタンにセットする値を設定しよう(value/groupValue属性) (3:01)
-
スタート196:[ホーム画面]ラジオボタンが選択されたときの処理を実装しよう(onChanged属性) (7:01)
-
スタート196-2: 【解説】RadioListTile.onChanged属性の引数に型を指定した場合の対処法(Null-safety対応) (3:27)
-
スタート197:[ホーム画面]単語一覧画面に遷移する処理を実装しよう (4:40)
-
スタート198:[ホーム画面]テスト画面に遷移する処理を実装しよう (5:14)
-
スタート199:【解説】「BuildContext」とは (15:01)
-
スタート199-2: 【解説】「MaterialPageRoute」の謎解き(なぜ遷移先の画面を「child」ではなく「builder」で設定するのか) (10:18)
-
スタート200:「AppBar」を使えば前の画面に戻る処理を実装する必要がない! (5:15)
-
スタート201:[一覧画面]「FloatingActionButton」を使って編集画面に遷移する処理を実装しよう (10:44)
-
スタート202:[編集画面]問題入力部分を実装しよう (6:32)
-
スタート203:[編集画面]こたえ入力部分を実装しよう (1:46)
-
スタート203-2: [編集画面]「TextEditingController」を使い終わったら破棄する処理を実装しよう (3:41)
-
プレビュー204:[編集画面]「SingleChildScrollView」を使ってコンテンツが画面からはみ出さないようにしよう (3:09)
-
スタート205:[編集画面]「WillPopScope」を使って一覧画面に戻る処理を実装しよう (11:11)
-
スタート205-2: 【解説】WillPopScopeとは (6:04)
-
スタート205-3: 【解説】Future.valueとは (3:10)
-
スタート205-4: 【解説】なぜ「WillPopScope」の後継として「PopScope」が登場したのか(「Android Predictive Back」対応) (8:30)
-
プレビュー205-5: 【Flutter3.16以降】「PopScope」とは(WillPopScopeとの違い) (9:41)
-
スタート205-6: 【Flutter3.16以降】編集画面のWillPopScopeをPopScopeに移行させよう (7:25)
-
スタート206:【初心者向け解説】データベース(Database:DB)とは (5:53)
-
スタート207: 【解説】Flutter/Dartで使えるデータベース操作パッケージ「Drift(旧:Moor)」とは (7:18)
-
プレビュー207-2: 【解説】なぜ「Moor」はパッケージ名をわざわざ「Drift」に変えたのか (6:30)
-
スタート208: 【解説】データベース操作パッケージ「Drift(旧:Moor)」の使い方10ステップ (18:00)
-
スタート209:【解説】pubspec.yamlファイルにおける「dependencies」と「dev_dependencies」の違いとは (5:37)
-
スタート210: Drift(旧:Moor)パッケージをプロジェクトに追加しよう(Driftの使い方10ステップ①) (3:04)
-
スタート210-2: 【解説】Driftを使うために必要なパッケージ群の説明(なぜ4つも必要なのか) (6:03)
-
スタート210-3: x86のAndroid端末用のビルドを作成しないようにbuild.gradleファイルを修正しよう (3:20)
-
スタート210-4: 【Macのみ:Drift関連】iOSでビルドしたら「C compiler cannot create executables」というエラーが出る場合の対処法 (5:48)
-
スタート211: コード生成用ファイルとテーブルクラスの設定をしよう(Driftの使い方10ステップ②③) (7:28)
-
スタート212:【解説】SQLiteで使えるデータの型とテーブルクラスのコードの解説 (7:54)
-
スタート213:【初心者向け解説】「Set」とは (3:25)
-
スタート214:【初心者向け解説】「get」とは (5:12)
-
スタート215: データベースクラスの設定をしよう(Driftの使い方10ステップ④) (2:47)
-
プレビュー216: dartコマンドを使ってDrift用のコードを生成しよう(Driftの使い方10ステップ⑤) (2:45)
-
スタート216-2: (該当者のみ)Flutterを3.24にアップグレードするとコード生成に失敗する場合の対処法([SEVERE]Failed to precompile build script・・) (4:13)
-
スタート216-3: 【解説】「part」とは (3:07)
-
スタート217: 【解説】コード生成コマンドで出来たファイル(database.g.dart)の中身を見てみよう (3:55)
-
スタート218: データベースとの接続を開始するメソッド(_openConnectionメソッド)を作成しよう(Driftの使い方10ステップ⑥) (5:02)
-
スタート219: 【解説】Dartにおける7つのコンストラクタ(「:」の謎解き) (10:33)
-
プレビュー220: 【解説】「const」キーワードのややこしさ(コンストラクタを「作る」場面(クラスの設計図)と「使う」場面(インスタンスの生成)で意味合いが異なる) (6:21)
-
スタート221: データベースのスキーマバージョンを設定しよう(Driftの使い方10ステップ⑦) (1:23)
-
スタート222: 【解説】「annotation:アノテーション(@)」とは (4:43)
-
プレビュー223: 【解説】Drift2.18より導入された「Manager」とは何か (4:44)
-
スタート224: データベースの4つの操作メソッド(クエリ)を作成しよう(Driftの使い方10ステップ⑧) (9:11)
-
スタート225: データベースクラスのインスタンスを設定しよう(Driftの使い方10ステップ⑨) (3:40)
-
スタート226: [編集画面]新しい単語をデータベースに登録する処理を実装しよう(Driftの使い方10ステップ⓾) (8:57)
-
スタート226-2: 【解説】Driftを入れたらFlutterのColumnウィジェットが使えなくなってしまった場合の対処法(複数のパッケージに存在する同じ名前のクラスを使いたい場合の対処法) (5:12)
-
スタート227:【解説】端末にインストールされているSQLiteデータベースの中身を見る方法(DB Browser for SQLiteの使い方) (10:55)
-
スタート228:[編集画面]トーストメッセージ(FlutterToast)を使って登録完了メッセージを表示させよう(これまで使用していたToastパッケージとの違い) (7:47)
-
スタート229: 【解説】例外処理とは(try~catch文) (7:01)
-
スタート229-2: [編集画面]例外処理を使って単語を重複して登録しようとした際にエラーメッセージを表示させよう(Driftで重複データをチェックする方法) (4:54)
-
スタート230:[一覧画面]データベースに登録した単語データを取得する処理を実装しよう (5:45)
-
スタート230-2: 【+α:解説】Navigator.pushメソッドは遷移先の画面から戻ってくるのを待てる!(Navigator.pushの謎解き) (6:18)
-
スタート230-3: 【+α:解説】Navigator.popメソッドは遷移元の画面へ値を渡せる!(Navigator.popの謎解き) (5:25)
-
スタート231:【解説】ListViewの使い方5ステップ (4:45)
-
スタート232:[一覧画面]「ListView」を使って単語の一覧リスト部分を実装しよう (4:46)
-
スタート232-2: 【解説】itemBuilder属性に設定する関数の引数(BuildContextとint)は誰がいつ渡しているのか (3:34)
-
スタート233:[一覧画面]「Card」と「ListTile」を使って単語の一覧リスト部分を実装しよう (9:49)
-
スタート234:[一覧画面]一覧に表示された単語を長押ししたら削除する処理を実装しよう (5:18)
-
スタート235:「enum(列挙型)」を使って編集ステータスの設定をし、編集画面のコンストラクタを修正しよう (6:07)
-
スタート235-2: 【初心者向け解説】なぜ定数ではなく列挙型(enum)を使うのか (2:27)
-
スタート236:[一覧画面]一覧に表示された単語をタップしたときに編集画面に遷移する処理を実装しよう (2:58)
-
スタート237:[編集画面]一覧画面から渡された値を引き継ごう (8:49)
-
スタート238:[編集画面]一覧画面で選択した単語を修正する処理を実装しよう (8:09)
-
スタート第7章の確認クイズ
-
スタート239: データベースにフィールド(暗記済みフラグ)を追加しよう (6:04)
-
スタート239-2: database.g.dartファイルを再作成してスキーマバージョンを繰り上げよう (3:23)
-
スタート240: 【解説】Driftデータベースのフィールドを空っぽOK(Nullable)にする方法 (2:36)
-
スタート241:既に端末にインストールされている旧バージョンのデータベースとの統合処理を実装しよう (9:59)
-
スタート242:[編集画面]データベースのフィールド追加に伴う単語の登録・修正処理を変更しよう (2:14)
-
プレビュー243:【+α】「copyWith」メソッドを使って変更したい項目だけを簡単に修正する方法 (3:15)
-
スタート244:テストの状態を管理するためのステータスを設定しよう(TestStatus) (3:15)
-
スタート245:[テスト画面]画面全体のレイアウトの枠組みを作ろう (6:39)
-
スタート246:[テスト画面]問題数を表示するパートを実装しよう (4:50)
-
スタート247:[テスト画面]「Stack」でWidgetを重ねて問題カード表示パートを実装しよう (5:40)
-
スタート248:[テスト画面]「Stack」でWidgetを重ねてこたえカード表示パートを実装しよう (3:35)
-
スタート249:【解説】CheckBoxListTileの使い方3ステップ (8:48)
-
スタート250:[テスト画面]「CheckBoxListTile」を使って単語を暗記済みにする場合のチェックボックスを実装しよう (6:00)
-
プレビュー251:[テスト画面]テストで使う単語群をデータベースから取得しよう①(暗記済みの単語を除外して取得するクエリメソッドの作成) (6:32)
-
スタート252:[テスト画面]テストで使う単語群をデータベースから取得しよう②(テスト画面からクエリメソッド呼び出し) (6:06)
-
スタート253:[テスト画面]取得した単語リストをシャッフルしよう (5:07)
-
スタート253-2: 【解説】「late」使用上の注意点(最初に使うまでに値を入れないと(初期化しないと)いけない) (9:22)
-
スタート254:[テスト画面]「switch」文を使ってテストの状態を切り替える処理を実装しよう(FloatingActionButton) (6:07)
-
スタート255:[テスト画面]テスト開始前の初期状態の設定をしよう (5:57)
-
スタート256:[テスト画面]問題カードを出す処理を実装しよう (5:45)
-
スタート256-2: [テスト画面]出すべき問題が1問もない場合に発生するエラーへの対処法(Unhandled Exception: RangeError (index)) (4:08)
-
スタート256-3: 【解説】Listの要素無し判定の際に「isNotEmpty」ではなく「!=[]」ではなぜダメなのか(「==」の本当の意味とは) (7:21)
-
スタート257:[テスト画面]こたえカードを出す処理を実装しよう (3:14)
-
スタート258:[テスト画面]暗記済フラグをデータベースに登録しよう (5:01)
-
スタート259:[テスト画面]テスト終了時にメッセージを表示させよう (6:46)
-
スタート260:[一覧画面]暗記済の単語は一覧上でチェックマークを表示させよう(ListTile.trailing/Icon) (3:46)
-
スタート261:[一覧画面]暗記済の単語を下にソートする処理を実装しよう①(クエリメソッドの作成) (5:21)
-
スタート262:[一覧画面]暗記済の単語を下にソートする処理を実装しよう②(一覧画面からクエリメソッド呼び出しとリストの更新) (2:59)
-
スタート263:<資料>次のレクチャー(AlertDialogの解説)で使うプロジェクト
-
スタート264:【解説】確認ダイアログ(AlertDialog)の使い方4ステップ (8:24)
-
スタート265:[一覧画面]単語削除時に確認ダイアログ(AlertDialog)を出す処理を実装しよう (10:44)
-
スタート266:[編集画面]単語の登録・修正時に確認ダイアログ(AlertDialog)を表示する処理を実装しよう (11:10)
-
スタート267:[テスト画面]テスト終了時の確認ダイアログを実装しよう(AlertDialog) (9:17)
-
スタート268: 【Flutter3.16以降】テスト画面のWillPopScopeをPopScopeに移行させよう (3:36)
-
スタート第8章の確認クイズ
-
スタート269: 【+α:解説】繰り返し処理とは(forループとforEach関数) (9:15)
-
スタート270: 【+α:繰り返し処理①】for句を使ってみよう (7:37)
-
スタート271: 【+α:繰り返し処理②】for-in句を使ってみよう (2:21)
-
スタート272: 【+α:繰り返し処理③】forEach関数を使ってみよう (4:30)
-
スタート273:【+α】「Radio(ラジオボタン)」を「Switch(切り替えトグル)」に変えてみよう (6:25)
-
スタート274:【+α】ランチャーアイコンを作ってみよう(flutter_launcher_iconsパッケージ) (10:11)
-
スタート275: 【エラー対応】「flutter_launcher_icons」パッケージでランチャーアイコンを作ると「FormatException: Invalid number」 という例外が発生してしまう場合の対処法 (1:41)
-
スタート276:【+α:補足1】AndroidのランチャーアイコンをAdaptive Iconにする方法 (5:50)
-
スタート277:【+α:補足2】AndroidのランチャーアイコンをAdaptiveからLegacyに戻す方法 (1:22)
-
スタート278:【+α】Android端末に表示されるアプリのタイトルと画面の向きを設定しよう (3:00)
-
スタート279:【+α:Macのみ】iOS端末に表示されるアプリのタイトルと画面の向き設定しよう(Xcode) (2:35)
-
スタート280:【+α】Android用のスプラッシュスクリーン(ランチャースクリーン)を作ってみよう (12:42)
-
スタート281:【+α:Macのみ】iOS用のスプラッシュスクリーン(ランチャースクリーン)を作ってみよう (4:08)
-
スタート280-2: 【+α:解説】Android12(APIレベル31)以降のランチャースクリーンの設定方法 (8:31)
-
スタート282: 【+α】SingleChileScrollViewとListViewを組み合わせる場合の注意点 (7:48)
-
スタート283: 【+α】SingleChildScrollViewとExpandedは一緒に使ってはいけない(ExpandedとElexibleの違いとは) (6:38)
-
スタート284:【+α:解説】今回の課題アプリでNull許容を適用したらどうなるか(安全呼び出し(?)と「!」演算子の実例) (3:05)
-
スタート285:<資料>今回作ったアプリのプロジェクト(私だけの単語帳)
-
スタート第8章+αの確認クイズ
-
スタートF101: Androidアプリの開発者登録をしよう(Google Playデベロッパーアカウント登録) (6:34)
-
スタートF102: 支払いプロフィールを設定しよう(Google Play Console) (6:08)
-
プレビューF103: サービス手数料を15%に引き下げるための設定をしよう(アカウントグループの登録) (4:17)
-
スタートF104: ターゲットAPIレベル・アプリID・アプリのバージョン設定をしよう(Android Studio) (7:40)
-
プレビューF104-2: 【解説】Flutter2.8以降におけるAndroidのビルドファイル(build.gradle)の各種SDKversion数値の確認方法 (5:03)
-
スタートF105: 【該当者のみ】ハイフン(-)の入ったドメイン名を使う場合の注意点(「AAPT: error: attribute 'package' in tag is not a valid Android package name: ・・・'」の対処法) (4:44)
-
スタートF106: 【解説】AndroidアプリのAPIレベルとは (7:29)
-
スタートF107: 【解説】なぜbuild.gradleファイルは2つ存在するのか (3:23)
-
スタートF108: アップロード鍵を作ってGoogle Play Consoleにアップロードするファイル(App Bundle)を作ろう(Android Studio) (8:02)
-
プレビューF108-2: 【+α】アップロード鍵を紛失してしまった場合の対処法(パスワード忘れ含む) (12:46)
-
スタートF109: 【解説】Google Playアプリ署名(App Signing)とは (3:47)
-
スタートF110: Google Play Consoleに新規アプリを追加して「ストア掲載情報」を入力しよう (3:23)
-
スタートF111: アプリのアクセス権と広告に関する設定をしよう(初期設定) (3:43)
-
スタートF112: コンテンツのレーティングを取得しよう(Google Play Console) (1:41)
-
スタートF113: ターゲットユーザーを設定しよう(初期設定) (3:26)
-
スタートF114: 【解説】13歳未満対象のアプリをリリースする際の注意点(①:新しくなったGoogle Playファミリーポリシーへの対応) (5:01)
-
プレビューF114-2: 【解説】13歳未満対象のアプリをリリースする際の注意点(②:対象年齢設定上の注意点と外部リンクの禁止) (5:46)
-
スタートF114-3: 「ニュースアプリ」であるかどうかの設定をしよう (2:09)
-
スタートF114-4: 新型コロナ(COVID-19)関連アプリであるかどうかの設定をしよう (1:53)
-
スタートF114-5: 「データセーフティ(個人情報を収集するかどうか)」の設定をしよう (5:48)
-
スタートF114-6: 「広告ID」の設定をしよう (3:37)
-
スタートF114-7: 「金融取引機能」を提供するアプリかどうかの設定をしよう (3:24)
-
スタートF114-8: 「行政アプリ」かどうかの設定をしよう (3:20)
-
スタートF115: アプリのカテゴリを選択し、連絡先情報を登録しよう(初期設定) (1:41)
-
スタートF116: ストアの掲載情報を設定しよう(初期設定) (6:11)
-
スタートF117: 内部テストを行うためのテスターを設定しよう(アプリのリリース) (2:11)
-
スタートF118: 新しいリリースを内部テスト版でリリースしよう(アプリのリリース) (2:10)
-
スタートF119: 内部テスト版アプリをテストし「リリース前」レポートで問題を確認しよう(アプリのリリース) (2:37)
-
プレビューF120: リリース前レポートで「java.lang.StackOverflowError」というクラッシュエラーが出た場合の対処法 (3:43)
-
スタートF121: テストが完了した内部テスト版を製品版としてリリースしよう(アプリのリリース) (2:07)
-
スタートF121-2: 【希望者のみ】EUを配信対象から外す設定をしよう(Google Play Console) (5:14)
-
スタートF122: リリースしたアプリのバージョンアップをしよう (3:47)
-
スタートF123: 【重要】2020/11/2までにAndroidアプリの「targetSdkVersion」を「29」に上げる必要あり! (3:50)
-
スタートF124: リリース版のアプリをGoogle Playを通さずに開発者のスマホ端末にインストールする方法 (2:49)
-
スタートF125: 【2023/9以前に作成されたアカウント向け】Google Play Consoleデベロッパーアカウント確認完了期限の設定 (5:36)
-
スタートF126: 【該当者のみ】法人で登録する際のDUNSナンバーの取得方法 (2:30)
-
スタートF127: 【2023/9以前に作成されたアカウント向け】Google Play Consoleデベロッパーアカウントの確認方法(組織の場合) (6:28)
-
スタートF201: iOSアプリの開発者登録をしよう(Apple Developer Programへの登録) (7:06)
-
スタートF201-2: 【該当者のみ】法人で登録する際のDUNSナンバーの取得方法 (2:30)
-
スタートF202: 支払いプロフィールを設定しよう(App Store Connect) (5:42)
-
スタートF202-2:【未済の方のみ】銀行口座保有人の住所登録が2021/10/22までに必要になりました(「有料App」契約をしている場合) (2:06)
-
プレビューF203: サービス手数料を15%に引き下げるための設定をしよう(App Store Small Business Programの申請) (3:25)
-
スタートF204: バンドルIDを登録しよう(App IDs) (4:03)
-
スタートF205: App Store Connectで新規アプリを追加しよう (3:45)
-
スタートF206: アップロードするプロジェクトの設定を確認しよう(Xcode) (5:15)
-
スタートF207: App Store Connectにアプリのファイルをアップロードしよう(XCode) (5:43)
-
スタートF208: 「App情報」を入力しよう(App Store Connect) (2:19)
-
スタートF209: 「価格および配信状況」の入力をしよう(App Store Connect) (1:34)
-
スタートF209-2: 欧州連合デジタルサービス法のトレーダー要件の設定をしよう (6:58)
-
スタートF209-3: 【トレーダーでない場合】EUを配信対象から外す設定をしよう(App Store Connect) (3:12)
-
スタートF209-4: App Store Connectに載せるスクリーンショット作成時の注意点 (4:44)
-
スタートF209-5: 「年齢制限指定」の設定をしよう (5:29)
-
スタートF209-6: 【解説】子供向けiOSアプリ作成上の注意点 (5:36)
-
スタートF210: 「プラットフォームバージョン情報」を入力しよう(App Store Connect) (6:26)
-
スタートF211: TestFlightでベータ版テストをしよう(App Store Connect) (6:23)
-
スタートF212: テストが完了したベータ版を製品版として審査に提出しよう(AppReview) (3:04)
-
スタートF213: リリースしたアプリのバージョンをアップしよう (2:35)
-
スタート「Null Safety(Null安全)」とは (8:06)
-
スタート安全呼び出し(Safe Call)と「!」演算子 (6:56)
-
スタート空っぽ(null)と空文字(””)の違い (2:02)
-
スタート「!」演算子で強制アクセスして空っぽだった場合に何が起こるのか(Null check operator called on null value) (3:44)
-
スタート「late」使用上の注意点(最初に使うまでに値を入れないと(初期化しないと)いけない) (9:22)
-
スタート【+α】ジェネリクスを使う場合のNull Safety上の注意点 (8:10)
-
プレビュー既存のプロジェクトをNull Safety対応に移行させる方法(Migrating to null safety) (6:13)
秘訣②:プログラミング経験ゼロでも一切門前払いしない完全初心者向けカリキュラム
とは言え、いくら「スモールステップ」と言っても、中身が難しかったり、つまらなかったりすると、いくら短くても挫折してしまいますよね。
ぼくは、スマホアプリプログラミングの勉強を1からやってきて、色んな挫折を繰り返してきたわけですが、その中で思ったのは、
世間のスマホアプリ開発を教えるカリキュラムというのは、たいがい「ハーバードへの留学」ですわ
ということだったんです。
ハーバードに行って「勉強」は教えてくれるけど、授業は「英語」ですと。それと同じですね。
スマホ(iOS/Android)の機能に関しては1から教えるけれども、それを書くためのプログラミング言語は、事前にちゃんと身につけてきてちょうだいね
という感じになっているのが、プログラミングを全くやったことのない人にとって、非常に大きな壁になっている。
実際、ぼくもJavaを知らずにAndroidアプリ開発の門を叩いてしまってエライ目にあったので、この巨大な壁の高さを身にしみて実感させられたんです。
だから、「みんプロ式」は、
「『ハーバード』に留学してもらうけど、英語いらんで」というコンセプト。
つまり、「英語も一緒に学べるハーバード大学」みたいな感じで、
「スマホアプリ開発講座やけど、言語はおろかプログラミング経験も一切いらんで」
というカリキュラムなんです。
スマホやプログラミングの基礎知識など、他の講座では省略しがちな、本当に初歩的な段階からスタートしますから、プログラミング経験ゼロの方でも一切門前払いしない、まさに
「スマホアプリを作ってみたいけどプログラミングを全くやったことがない人のための講座」
なんですね。
秘訣③:実践的なスキルを「からだでおぼえられる」ハンズオンスタイル
あと、文法を項目立ててちまちま教えられても、なかなかモチベーションが続かない「学習指導要領的」カリキュラムの問題。
これってつまらないんですよね。
だから、ぼくなんかは「文法を順序立ててちまちまやっても仕方ない」から、最終的には
自分の作りたいアプリのイメージをまず持ってきて、それに必要なものをかいつまんで覚えていくという方が絶対ええやろ!
と。
こういう方が、学習のモチベーションって上がるんやろうなということに気付いたんです。
そして、結果的にそれがうまくいきまして、あれだけ挫折を繰り返してたのに、アプリ作るところまで行くことができたんですね。
ですから、「みんプロ式」のカリキュラムを組んでいくにあたっては、
最終的な成果物がちゃんとイメージできるようにする
ということに一番気を配ったんです。
そうしないと、初心者の方はモチベーションが続かないというのが、ぼくの挫折経験からわかっていましたので。
つまり、
プログラミング言語の文法やスマホの機能の学習指導要領の教科書的にイチから学んで、それからアプリを作ってみる
のではなくて、
「実際のアプリを作る」ということをカリキュラムの主軸に持ってきて、
このアプリを作りたかったら、こういう機能が必要
このアプリを作りたかったら、こういう文法を覚える必要がある
という
「逆算方式」のカリキュラムにしたんです。
だから「みんプロ式」ではプログラミングサポーター(講師)と一緒にアプリを作りながら進めていきます。
簡単なアプリから徐々に難しいアプリへと、具体的なアプリを段階を踏みながら作っていきますので、実践的なスキルを無理なく「からだでおぼえる」ことができる。
これも、挫折せずに続けてもらうための工夫なんですね。
秘訣④:初心者がつまづきやすい「カベ」を無理なく乗り越えてもらうためのスライド解説方式
カリキュラムの問題以外でも、初心者の方がつまづいてしまう地雷はありとあらゆるところに潜んでいます。
「空気どころかカベやで?!」という感じの専門用語とか、
本の通りやってるはずやのに、そのとおりに動かへんとか
「ハイフン(-)」が「アンダースコア(_)」になっているなどの超ケアレスミスで引っかかって抜け出せなかったりとか
後から考えるとすごいしょうもないけれども、実際に遭遇すると地獄に落ちたような感じになっちゃう。
そんな、業界に長いこといる人から見たら「えっ!?なんでそんなところで詰まってんの?」というような「カベ」が初心者の段階では無数に散りばめられているんですね。
だから、そういう「カベ」を1つずつ丁寧に乗り越えさせてあげる必要があるんです。
ぼくは幸か不幸か、これまでさんざん挫折の泥沼をもがいてきました。
その経験を活かして、初心者の方がつまづきやすい「カベ」の乗り越え方を、直感的でわかりやすいスライドを使って丁寧に解説するスタイルをとったんです。
また、ツールを使う手順や実際のコードの書き方などの「プロセス」もわかるように工夫しました。
こういう「プロセス」は、初心者の方が非常につまづきやすいところなのですが、本(文字)のテキストではなかなか伝えることができない部分なんです。
それを「みんプロ式」では、動画テキストであることの特徴をフル活用して、この「プロセス」をしっかりカバー。
まさに隣でぼくと一緒にアプリを作っている感覚で進められるので、テキストと同じペースで「続けられる」というワケなんですね。
(注)このコースはプログラミングサポーター(講師)への質問が行えないバージョンですのでご注意ください。コメント機能を通じて質問を行いたい方は「質問対応あり版」をご検討ください。
この講座を修了するとこんなことができるようになります!
4つのアプリを一緒に作ることで
Flutterを使ったスマホアプリ開発(iOS・Android)に最低限必要なスキルを
最短3ヶ月で一気通貫で習得できます!
- 今最も注目のアプリ開発ツール「Flutter」を使ったスマホアプリ開発(iOS・Android)ができるようになります。
- 「Flutter」アプリを作るためのプログラミング言語「Dart」の基礎も身につけることができます。
- 非同期処理や効果音を出すスマホアプリ(iOS・Android)を作れるようになります。
- 複数画面やタイマー処理を行うスマホアプリ(iOS・Android)を作れるようになります。
- データベースを使ったスマホアプリ(iOS・Android)を作れるようになります。
- App Store・Google Playからあなたのオリジナルアプリを世界に向けて発信することができるようになります。
(注1)AndroidアプリをGoogle Playからリリースするためには、開発者登録料・25米ドル(1回のみ)が必要になります。
(注2)iOSアプリをApp Storeからリリースするためには、Macパソコンと開発者登録料・99米ドル(年間)が必要になります(WindowsパソコンではiOSアプリをリリースすることはできません)。
なぜ「みんプロ式」は25時間超の講座でアプリを4つしか作らないのか?
この講座は、Flutter/Dartの技術全体を「体全体」に例えると、指一本の「爪のアカ」くらいの分量でしかありません。
この講座の目指しているところは、その「爪のアカ」をお茶にして飲んで頂くことによって、自分でそこから先を自律的に学んでいけるための基盤を作っていただくことが目的なんです。
他のスマホアプリ開発講座では、この講座よりもっと短い時間でもっとたくさんのアプリを詰め合わせた「浅く広く」的な感じでやられている場合が多いです。
しかし、その方式は経験者の方には望ましいかもしれませんが、
自分の挫折経験からそれだと完全初心者の方はいきなりすっ飛ばされた感じになってしまって振り切られちゃうんです。
だからぼくは完全初心者の方でも振り切られずに「ちゃんと自分で鳥かごから羽ばたいてもらえる」ような講座設計にしたかったんです。
例えばFlutterやDartの公式サイトとかを見て「うげーっ」となるんじゃなくて、それを見て「あっ、こうやったら出来んの?じゃあやってみよう」という感じで、実際に手を動かすことが出来るくらいのベースをつくるお手伝いをしたいということが目的なんですね。
そのためには、何も意味がわからないままコードを書くだけでは難しいので、なるべく概念をちゃんと理解して頂くために、アプリの数を抑える代わりに解説パートを厚くしているというわけなのです。
ですので、冒頭でも書いている通り、
詳しい解説はいいからとにかく手数を増やしたいという方にはこの講座は向いていません。
一方で、意味もわからずにただコードを書くだけじゃなくて、概念もちゃんと理解して今後自律稼働していくための基盤を作りたいという方にはお役に立てる講座だと考えています。
カリキュラム
-
プレビュー007:オープニング(初心者でない方はこのセクションは飛ばして頂いて構いません) (1:15)
-
プレビュー008:スマホとは(歴史・保有台数・市場規模) (5:04)
-
プレビュー009:スマホ界の2大巨塔・AndroidとiOS[iphone]との違いとは (3:17)
-
スタート010:アプリとは(ハードウェアとソフトウェア) (1:06)
-
スタート011:プログラミングとは (2:12)
-
スタート012:プログラミング処理の基本<文・関数(メソッド)・クラス> (6:59)
-
プレビュー013:プログラミングの3ステップ(ブロック作りと同じ) (2:39)
-
スタート014:プログラムがアプリになるまでの仕組み(コンパイルとビルド) (4:27)
-
スタート第2章の確認クイズ
-
プレビュー015: オープニング(Flutterアプリを作るために必要な道具とは+環境構築Zoomライブサポート会のご案内) (5:03)
-
スタート016: 【Windows】WindowsでFlutterアプリを作るための道具の説明とGitのインストールをしよう(該当者のみ) (4:39)
-
スタート016-2: 【Windows】Flutterアプリの開発ツール(SDK)の設定をしよう (3:52)
-
スタート016-3: 【Windows】Flutterのコマンドラインツールを使えるようにするためのパス通しをしよう (3:48)
-
スタート017:【Windows】Android Studioのダウンロードとインストールをしよう (6:40)
-
スタート017-2: 【Windows】FlutterがAndroid Studioを正しく認識できるための設定をしよう (6:09)
-
スタート018:【Windows】Androidアプリをエミュレーターで動かすための設定をしよう(Android Studio) (6:35)
-
スタート019:【Windows】Androidアプリを実機で動かすための設定をしよう(Android Studio) (3:49)
-
スタート020:【Mac】Flutterアプリの開発ツール(SDK)の設定をしよう (9:11)
-
スタート020-2: 【Mac:Appleシリコンのみ】Rosettaのインストールをしよう (3:05)
-
スタート020-3: 【Mac】Flutterのコマンドラインツールを使えるようにするためのパス通しをしよう (6:06)
-
プレビュー020-4: 【Mac】ファンクションキーをデフォルトで使えるように設定しよう (2:31)
-
スタート020-5: 【Mac:該当者のみ】Homebrewのインストールをしよう (3:54)
-
スタート020-6: 【Mac:該当者のみ】CocoaPodsとGitのインストールをしよう (2:35)
-
スタート021:【Mac】Android Studioのダウンロードとインストールをしよう (7:18)
-
スタート022:【Mac】Androidアプリをエミュレーターで動かすための設定をしよう(Android Studio) (7:16)
-
スタート023:【Mac】Androidアプリを実機で動かすための設定をしよう(Android Studio) (3:01)
-
スタート024:【Mac】Xcodeのダウンロードとインストールをしよう (2:51)
-
スタート025:【Mac】iOSアプリをシミュレーターで動かすための設定をしよう(Xcode) (4:31)
-
スタート026:【Mac】iOSアプリを実機で動かすための設定をしよう(Xcode) (12:31)
-
スタート027-1: 【Windows・Mac共通】Androidエミュレーターでの日本語入力と音量調節する方法 (1:47)
-
プレビュー027-2: 【Mac】iOSシミュレーターでの日本語入力と音量調節する方法 (1:23)
-
スタート027-3: 【Windows・Mac共通】AndroidのSDKコマンドラインツールをインストールしよう (1:39)
-
スタート027-4:【Windows・Mac共通】AndroidのSDKプラットフォームを使うためのライセンスに同意しよう (3:42)
-
スタート027-5:【Windows・Mac共通】Android Studioの初期設定をしよう(Flutter/Dartプラグインのインストール等) (11:05)
-
スタート027-6: 【Windows・Mac共通】「flutter doctor」して設定ができているか確認しよう (2:43)
-
プレビュー028:オープニング(今回作るアプリの紹介[はじめてのアプリ]) (1:56)
-
スタート029:Android Studioで新しいFlutterプロジェクトを作ってみよう (15:30)
-
スタート030:【初心者向け解説】プロジェクトをWindowsエクスプローラーあるいはMacのFinderで見る方法 (2:34)
-
プレビュー030-2:Flutter2.5以降は「flutter_lints」パッケージを無効化しておいてください(理由も説明しています) (7:08)
-
スタート031:既に作ったプロジェクトを開いてみよう(作りかけのプロジェクトも含む) (2:39)
-
プレビュー032:【初心者向け解説】プログラミングの天才に学ぶAndroid Studioに行く前にすべきこと(スマホアプリを作るための3ステップ) (3:41)
-
スタート033:<資料>設計図(はじめてのアプリ)
-
プレビュー034:今回作るアプリの設計図を紙に書こう(はじめてのアプリ) (3:00)
-
スタート034-2: 【解説】課題アプリのサンプルプロジェクトのダウンロード方法 (7:00)
-
スタート035:Flutterプロジェクトのフォルダ構造を知ろう(最低限抑えておくべき3兄弟) (13:13)
-
スタート036:<資料>今回のアプリで使うリソース
-
スタート037:アプリで使う画像をプロジェクトに取り込もう(小道具のプロジェクトへの取り込み方3ステップ) (9:21)
-
プレビュー038:Flutterはどういう順番でコード書いたらええねん6ステップ (8:15)
-
スタート039:アプリ全体に共通する部分(アプリのルート部分)を実装しよう (8:21)
-
スタート040:【初心者向け解説】Dartプログラミングはたったの2ステップしかない! (4:59)
-
スタート041:【初心者向け解説】クラスのインスタンス化(初期化)とは (8:07)
-
スタート042:【初心者向け解説】Dartにおけるメソッド(関数)の作り方 (12:06)
-
スタート043:【解説】Widget(ウィジェット)とは (13:35)
-
スタート044: 「StatefulWidget」を使ってホーム画面の外枠を実装をしよう(import文とは) (9:18)
-
プレビュー045:フォルダの階層構造がちゃんと見えるように「Compact Middle Packages」のチェックを外しておこう (2:52)
-
スタート046:【初心者向け解説】ファイル・クラス・関数(メソッド)等の名前付けの規則 (4:00)
-
スタート047:【初心者向け解説】プロジェクト内のファイル・フォルダ名の変更の仕方 (1:16)
-
プレビュー047-2:【初心者向け解説】ソースコード内の値を検索する方法と値の名前を一括で変更する方法 (2:12)
-
スタート048:「Scaffold」を使ってホーム画面をマテリアルデザイン仕様にしてアプリバーを設定しよう (13:58)
-
スタート048-2: Androidエミュレーターをスタンドアロンアプリとして起動させる方法 (2:53)
-
スタート048-3: 【解説】MaterialAppのtitle属性(main.dart)とAppBarのtitle属性(home_screen.dart)は何が違うのか (8:21)
-
プレビュー048-4: 【解説】意図せざる「Hot Reload」が起こってしまうのを止める方法 (4:22)
-
スタート049:【解説】Material Design(マテリアルデザイン)とは(MaterialAppの謎解き) (13:27)
-
スタート050:【解説】Widgetの並べ方超基本3パターン (2:53)
-
スタート051:「Column」を使ってWidgetを縦方向に並べよう (4:05)
-
スタート052:「Text」を使って文字を表示させよう (5:32)
-
スタート053:「Center」を使ってWidgetを中央寄せしよう (4:04)
-
スタート054:「TextField」を使って文字入力欄を設置しよう (5:16)
-
スタート055:「Image.asset」を使ってプロジェクトに取り込んだ画像を表示させよう (2:25)
-
プレビュー055-2: 【解説】Android Studioで手入力せずにパスを入力できる方法(「Copy path/Reference..」の使用) (1:44)
-
スタート055-3: 【初心者向け解説】パス(path)とは何か (2:54)
-
スタート056: 「ElevatedButton」を使ってボタンを表示させよう(RaisedButton廃止についての説明あり) (8:18)
-
スタート057:「Container」を使って画面全体に余白(padding)を作ろう (5:05)
-
スタート057-2: 【解説】「PlaceHolder」とは (3:58)
-
スタート058: 【解説】「Flutter Outline」の基本的な使い方 (3:11)
-
スタート059:「SizedBox」を使ってボタンを横幅いっぱいに拡げよう (4:10)
-
スタート060:「Expanded」を使って画像の縦幅を残り枠いっぱいに拡げよう (3:30)
-
スタート061:ボタンを押したら文字を表示させる処理を実装しよう(変数の作り方) (7:25)
-
スタート062:入力欄(TextField)に入れた文字を取得して表示させよう (3:39)
-
スタート062-2: 文字がプログラム上で本当に変わっているかどうかを確かめてみよう (1:39)
-
スタート063:ボタンを押したら画像を表示させる処理を実装しよう (1:41)
-
スタート064:【解説】Dartにおけるスコープ(変数・関数にアクセスできる[参照できる・使える]範囲) (7:50)
-
スタート064-2: 【解説】クラスやメンバ(プロパティ・メソッド)の名前の前につく「_(アンダースコア)」の意味は何か (7:33)
-
スタート064-3: 【初心者向け解説】「変数」とは(インスタンス・オブジェクト・変数・定数の違いは何か) (5:17)
-
スタート064-4: 【初心者向け解説】Android Studioにおけるグローバル変数とローカル変数の見分け方 (2:27)
-
プレビュー064-5: 【初心者向け解説】「$」とは何か(文字列の間に変数を入れる方法) (5:30)
-
スタート065:「setState」メソッドを使って設定した文字・画像を画面に表示させよう(アプリの状態変化を画面に反映させる) (4:59)
-
スタート066:【初心者向け解説】プログラミングにおける「=」とは(代入) (4:39)
-
スタート067: 【初心者向け解説】セミコロン(;)とカンマ(,)とコロン(:)の違い (7:16)
-
スタート068:アプリを動かす前にプロジェクトを一旦きれいにしよう(flutter clean) (4:01)
-
プレビュー068-2: 【解説】「flutter clean」は内部で何をやってみるのか(Flutterプロジェクトのサイズ削減方法) (4:55)
-
スタート069:ソースコードのフォーマットを整えよう(Reformat File) (4:20)
-
スタート070:【Windows・Mac共通】作ったアプリをAndroidエミュレーターで動かしてみよう (5:48)
-
プレビュー070-2: 【エラー対応】「INSTALL_FAILED_INSUFFICIENT_STORAGE」というエラーが出てAndroidエミュレーターでアプリが動かせない場合の対処法 (2:49)
-
スタート070-3: 【エラー対応】「ParcelableException:・・・ Requested internal only, but not enough space」というエラーが出てAndroidエミュレーターでアプリが動かせない場合の対処法(エミュレーターのメモリを増やす方法) (3:34)
-
スタート071:【Windows・Mac共通】作ったアプリをAndroid実機で動かしてみよう (2:23)
-
プレビュー071-2: 【Windows・Mac共通(補足)】Android実機でワイアレスデバッグする方法(スマホをPCにケーブルで繋がずにデバッグする方法) (5:57)
-
スタート072:【Macのみ】作ったアプリをiOSシミュレーターで動かしてみよう (1:54)
-
スタート073:【Macのみ】作ったアプリをiOS実機で動かしてみよう(素晴らしきマルチプラットフォームの世界) (6:20)
-
プレビュー073-2: 【Macのみ(補足)】なぜiOS実機で動かそうとすると毎回Xcodeが開いてしまうのか (4:23)
-
プレビュー073-3: 【Macのみ(補足)】iOS実機でワイアレスデバッグする方法(スマホをPCにケーブルで繋がずにデバッグする方法) (2:45)
-
スタート073-4: 【Macのみ】iOS14以降はデバッグモードでインストールしたアプリは端末から直接起動することはできません (3:39)
-
スタート074: 【初心者向け解説】再生[Run]モードとデバッグ[Debug]モードの違い+ブレークポイントでアプリを途中で止めて変数の値を確認する方法 (4:02)
-
スタート074-1.5: 【該当者のみ】ブレークポイントでアプリを止めると同じ名前の編集不能のファイルが開く場合の対処法 (5:31)
-
スタート074-2: 【初心者向け解説】プログラムを1行ずつ止めながら実行する方法(Step Over / Step Into) (8:51)
-
スタート075:【初心者向け解説】Flutterアプリを動かす3つのモード(Debugモード / Releaseモード / Profileモード) (4:40)
-
スタート076:【+α】インターネット上の画像をアプリで表示させてみよう(Image.network) (2:24)
-
スタート077:【+α】デバッグバナーを非表示にしよう (1:32)
-
スタート078:【+α】アプリ全体のテーマをダークモードに変更しよう (2:14)
-
スタート079:【+α】「CupertinoApp」を使ってアプリの見た目をiOS仕様に変えよう (8:07)
-
スタート080:<資料>今回作ったアプリのプロジェクト(はじめてのアプリ)
-
スタート第4章の確認クイズ
-
プレビュー081:オープニング(今回作るアプリの紹介[ツッコミマシーン]) (5:33)
-
スタート082:<資料>今回のアプリの設計図(ツッコミマシーン)
-
プレビュー083:今回作るアプリの設計図を紙に書こう(ツッコミマシーン) (2:45)
-
スタート084:Android Studioで今回作るアプリのプロジェクトを作ろう (5:19)
-
スタート085:<資料>今回のアプリで使うリソース
-
スタート086:アプリで使う効果音ファイルをプロジェクトに取り込もう (5:42)
-
スタート086-2: 【解説】アプリで使うリソースをプロジェクトに取り込む際のpubspec.yamlファイルでの記述上の注意点 (3:18)
-
スタート087:アプリ全体に共通する部分(アプリのルート部分)を実装しよう(main.dart) (5:52)
-
スタート088:【解説】runApp関数とは (3:33)
-
スタート089:【初心者向け解説】クラスの継承(extends)とメソッドのオーバーライド(override)とは (11:13)
-
スタート090:【初心者向け解説】「ご先祖様」に「子孫」を代入するのはOK(プログラミングにおける「=」とは[完全版]) (2:42)
-
プレビュー091:「StatefulWidget」を使ってホーム画面の外枠を実装をしよう(home_screen.dart) (3:45)
-
スタート092:「Scaffold」を使ってホーム画面をマテリアルデザイン仕様にしてアプリバー(AppBar)を設定しよう (5:57)
-
スタート093:「Column」と「Row」を使ってボタンを3行2列の碁盤の目に並べよう (9:20)
-
スタート094:「Expanded」と「flex」を使って碁盤の目を画面いっぱいに均等に並べよう (5:39)
-
スタート095:「CrossAxisAlignment」を使ってボタンの大きさを枠いっぱいに拡げよう (5:56)
-
スタート096:「Container.padding」を使って画面全体と各枠内のボタンに余白(padding)を作ろう (5:11)
-
スタート097:【初心者向け解説】「List(配列)」とジェネリクス(総称型)とは (11:09)
-
スタート098:「List」を使って6つのボタンに表示させる文字をセットしよう (8:14)
-
スタート098-2:【初心者向け解説】関数・メソッドの引数の名前が何でもいいのはなぜか?(引数を入れる(渡す)とはどういうことなのか?) (4:21)
-
スタート099: 【解説】「パッケージ(package)」とは (4:23)
-
スタート100: 【解説】Flutterアプリで音(効果音・BGM)を出す方法(just_audioパッケージの使い方(パターン①:一番シンプルな使い方)) (9:46)
-
スタート101: 「just_audio」パッケージをプロジェクトに追加しよう(パッケージを使うための2ステップ) (12:53)
-
スタート101-2: 【Android】64K参照制限回避のための「multiDex」有効化設定をしよう(just_audioのバージョン0.9.20以降) (9:45)
-
スタート101-3: 【iOS&Appleシリコン(M1・M2)のMacのみ】「LoadError - dlopen・・・」エラーを回避するための設定をしよう (5:53)
-
スタート102: 【解説】pubspec.yamlファイルとは (6:00)
-
スタート103: 【解説】pubspec.lockファイルとパッケージのアップグレードとダウングレード方法 (4:17)
-
スタート104: 【解説】パッケージのバージョンを指定する際に出てくる「^」とは何者なのか(バージョンコード付与の原則(Sementic Versioning)と「caret syntax」) (9:06)
-
スタート104-2: 【解説】Flutter/Dartにおけるパッケージ(package)・プラグイン(plugin)・ライブラリ(library)の違いとは (9:33)
-
スタート105: 【解説】なぜAudioPlayerのインスタンスは使い終わったら破棄しないといけないのか(メモリの話) (5:06)
-
スタート105-2: 【解説】StatefulWidgetはどうやって状態管理をしているのか (8:18)
-
スタート106: AudioPlayerクラス(just_audioパッケージ)の初期化と破棄の実装をしよう (6:49)
-
スタート107: 【解説】なぜAudioPlayerの宣言文の先頭に「late」をつける必要があるのか(Null Safetyとは) (13:45)
-
スタート107-2: 【解説】initState及びdisposeメソッド内で処理を書く際の注意点 (9:21)
-
スタート107-3: 【解説】「assert」とは (5:02)
-
スタート108: 効果音ファイルのパス(Path)をセットしよう (10:03)
-
スタート109: 【初心者向け解説】ビルト・イン型クラスとは(Dartにおける2種類のクラス) (11:10)
-
スタート110: 【解説】非同期処理(async-await)とは (8:30)
-
スタート111: 【解説】「Future」とは (8:27)
-
スタート112: 【解説】Dartでの非同期処理の使い方3原則 (10:42)
-
スタート113:ボタンを押したら効果音を鳴らす処理を実装しよう (4:59)
-
スタート113-2: 【解説】時間のかかる非同期処理であるsetAssetの前に「await」をつけなくても音が鳴ったのはなぜか(playメソッドの謎解き) (5:24)
-
スタート114: 【解説】複数の音を同時に鳴らす方法(just_audioパッケージの使い方:パターン②) (3:07)
-
スタート114-2: 複数の音を同時に鳴らせるようにパターン①のプロジェクトを変更しよう (8:03)
-
スタート114-3: 【+α】「DateTime#difference」を使って音が鳴るまでのタイムラグを計測してみよう (6:39)
-
スタート115: 【解説】ボタンを押してから音が鳴るまでのタイムラグをなくす方法(just_audioパッケージの使い方:パターン③) (3:22)
-
スタート115-2: ボタンを押してから音が鳴るまでのタイムラグをなくせるようにパターン①のプロジェクトを変更しよう (3:34)
-
スタート115-3: 【解説】initStateで非同期処理をするとなぜエラーになるのか (3:38)
-
スタート115-4: initStateで非同期処理ができるようにしてアプリを動かしてみよう (3:33)
-
スタート115-5: 【解説】なぜ2回目のボタン押下時には音が鳴らなかったのか (4:40)
-
スタート115-6: ボタンを複数回押しても音が鳴るようにしよう(AudioPlayer#seekメソッド) (3:35)
-
プレビュー116:【初心者向け解説】エラーはどこでわかるのか(プログラミングにおける3種類のエラー) (6:28)
-
スタート117: 【初心者向け解説】「空っぽ(null)」と「空白("")」の違いとは (2:31)
-
スタート118: 【解説】StatefulWidgetはなぜStateオブジェクトと別クラスで分離されているのか(Widgetの本当の正体とは) (12:28)
-
スタート119: 【解説】Flutterとネイティブアプリ開発(Android/iOS)の状態管理方法比較 (6:35)
-
スタート119-2: 【解説】「Flutter Gems」を使ったパッケージの見つけ方 (4:19)
-
スタート119-3: 【+α:解説】pub devに公開されているパッケージの挙動確認方法(exampleモジュールにあるサンプルアプリの実行方法) (7:10)
-
スタート120:【+α】ElevatedButtonをカスタマイズしてみよう(ElevatedButton.styleFromメソッドを使って) (12:21)
-
プレビュー120-2: 【解説】Flutter3.3以降はElevatedButton.styleFromの「primary」「onPrimary」属性が非推奨になりました (3:57)
-
スタート121:【+α:解説】今回の課題アプリでNull許容を適用したらどうなるか(安全呼び出し(?)と「!」演算子の実例) (3:59)
-
スタート121-2: 【+α:解説】「!」演算子で強制アクセスして空っぽだった場合に何が起こるのか(Null check operator called on a null value) (3:44)
-
スタート122:<資料>今回作ったアプリのプロジェクト(ツッコミマシーン)
-
スタート第5章の確認クイズ
-
プレビュー123:オープニング(今回作るアプリの紹介[計算脳トレ]) (5:43)
-
スタート124:<資料>今回の作るアプリの設計図(計算脳トレ)
-
プレビュー125:今回作るアプリの設計図を紙に書こう(計算脳トレ) (4:48)
-
スタート126:Android Studioで今回作るアプリのプロジェクトを作ろう (4:52)
-
スタート127:<資料>今回のアプリで使うリソース
-
スタート128:アプリで使うリソース(画像・音)をプロジェクトに取り込もう (3:38)
-
スタート129:アプリ全体に共通する部分(アプリのルート部分)を実装しよう(main.dart) (4:38)
-
スタート130:[ホーム画面]外枠を実装をしよう(home_screen.dart) (3:45)
-
スタート131:[ホーム画面]「SafeArea」を使ってアプリバー(AppBar)無しのレイアウトに変えよう (3:15)
-
スタート132:[ホーム画面]「Column」を使ってWidgetを縦方向に並べよう (6:09)
-
スタート133:[ホーム画面]「Expanded」と「Container」を使ってボタンを画面最下部中央に設置しよう (5:35)
-
スタート134:[ホーム画面]「ElevatedButton.icon」を使ってボタンにアイコンをつけて見た目をカスタマイズしよう (5:44)
-
スタート135:【初心者向け解説】マテリアルアイコンとは (4:08)
-
スタート136:【解説】Flutterアプリにおける画面・文字の大きさの単位とは(物理ピクセルと論理ピクセル) (13:13)
-
スタート137:【+α】「MediaQuery.of」メソッドを使って画面のサイズ(論理ピクセル)を取得しよう (2:30)
-
スタート137-2: 【+α:解説】「MediaQuery」とは (4:22)
-
スタート137-3: 【+α:解説】Flutter3.10より導入された「MediaQuery.sizeOf」等について(MediaQueryのInheritedModel化) (9:32)
-
スタート137-4: 【+α:解説】動かしているアプリのWidgetの状況を確認する方法(「Flutter Inspector(Dev Tools)」の基本的な使い方) (7:22)
-
スタート137-5: 【+α:解説】画面サイズの異なる端末の見た目を1つの端末で確認する方法(「device_preview」パッケージの使い方) (10:08)
-
プレビュー138:【解説】「DropdownButton」の使い方3ステップ (2:07)
-
スタート139:[ホーム画面]「SizedBox」を使ってWidget間に空白を設定しよう (6:02)
-
スタート140:[ホーム画面]「DropdownMenuItem」を使って「DropdownButton」に表示させる選択肢をセットしよう(items属性) (9:43)
-
スタート141:【+α】「Cascade Notation(..)」を使ってコードをシンプルにしよう (3:17)
-
スタート142:[ホーム画面]「DropdownButton」で選択されたアイテムをセットしよう(value属性) (6:56)
-
スタート143:【解説】なぜ「value」の後ろに「!」をつける必要があるのか(安全呼び出し(?)と「!」演算子とは) (8:05)
-
スタート144:[ホーム画面]「DropdownButton」でアイテムが選択された時の処理を実装しよう(onChanged属性) (4:52)
-
スタート145:【解説】onPressed/onChanged属性の中身はどうなっているのか (8:03)
-
プレビュー145-2: 【解説】onPressed属性の「() =>」を忘れると何が起こるのか(setState() or markNeedsBuild() called during build) (6:53)
-
スタート145-3: 【解説】onChanged属性に設定する関数の引数は誰がいつ渡しているのか(コールバック関数とは) (4:29)
-
プレビュー145-4:【解説】「ValueChanged<T?>?(DropdownButton#onChanged属性)」にはなぜ「?」が2つあるのか? (3:21)
-
スタート146:【解説】Flutterにおける画面遷移の方法(NavigatorとMaterialPageRoute) (8:27)
-
スタート147:[ホーム画面]スタートボタンをクリックしてテスト画面を開く処理を実装しよう (7:18)
-
スタート147-2: 【解説】Stateクラス(StafulWidgetの面倒を見る育ての親)ではBuildContextがどこでも使えるのはなぜか (6:56)
-
スタート148:[ホーム画面・テスト画面]名前付きパラメータ(Named Parameter)を使って選択した問題数をホーム画面からテスト画面に渡そう (8:18)
-
スタート149: 【解説】「required」の意味とは(Flutter2.0以降は「@required」が「required」に変更されました) (3:59)
-
スタート149-2: 【解説】名前付き引数(パラメータ)とは(Named Parameters) (9:28)
-
スタート150:【初心者向け解説】Flutterにおける2つの定数(「const」と「final」) (6:22)
-
プレビュー151:【初心者向け解説】「this」とは (6:57)
-
スタート152:「const」を使って描画パフォーマンスを向上させよう(Flutter Performanceの使い方) (11:35)
-
スタート153:【初心者向け解説】どこからでもインスタンスを経由せずに直接使えるメンバを作る2つの方法(「top-level」と「static」) (9:53)
-
プレビュー153-2: 【初心者向け解説】「static」の解説②(「静的」と「動的」/「インスタンス変数」と「クラス変数」の違いとは) (8:21)
-
スタート153-3: 【解説】トップレベル(top-level)メンバ使用上の注意点(意図せざるしてアプリが落ちるトラップが起こる可能性あり) (7:21)
-
スタート154:[テスト画面]画面全体のレイアウトの枠組みを作ろう(SafeArea/Container/Column) (6:37)
-
スタート155:[テスト画面]「Table」と「Center」を使ってスコア表示部分を実装しよう (13:27)
-
プレビュー156:[テスト画面]問題表示部分を実装しよう(Expandedとflex/Container) (12:17)
-
スタート157:[テスト画面]こたえ合わせボタン部分を実装しよう(ElevatedButton/SizedBox/Container) (3:35)
-
プレビュー157-2: 【解説】「Hot Reload」と「Hot Restart(ゲジゲジor再生ボタン)」の違いとは (7:31)
-
プレビュー157-3: 【解説】「Hot Restart」時にbuildメソッドが2回回っても気にする必要なし (4:32)
-
スタート158:[テスト画面]もどるボタン部分を実装しよう(ElevatedButton/SizedBox/Container) (3:04)
-
スタート159:[テスト画面]電卓ボタン部分を実装しよう(Table/Container) (8:29)
-
スタート160:[テスト画面]「Stack」を使って○・☓画像とテスト終了テキスト部分のWidgetを積み重ねよう (7:39)
-
スタート161:【初心者向け解説】条件分岐の「if文」と比較演算子(プログラミングは3つの流れ) (8:01)
-
スタート162:[テスト画面]テスト開始前の初期設定をしよう(①:ホーム画面で選択した問題数の引き継ぎ) (6:01)
-
スタート163:[テスト画面]テスト開始前の初期設定をしよう(②:効果音の準備) (9:40)
-
スタート164:[テスト画面]出題処理を実装しよう(①:出題時の初期設定) (6:16)
-
プレビュー164-2: 【初心者向け解説】if(bool型の値)はif(bool型の値 == true)と同じ意味 (1:19)
-
スタート164-3: 【初心者向け解説】if(!bool型の値)はif(bool型の値 == false)と同じ意味(Dartにおける2つの「!」) (4:19)
-
スタート165:[テスト画面]出題処理を実装しよう(②:乱数(Random)を使って出題) (6:45)
-
スタート165-2: 【初心者向け解説】setStateメソッドの「中」で処理を書く場合と「外」で書くのでは何が違うのか(setStateメソッド使用上の留意点) (5:32)
-
スタート166:[テスト画面]電卓ボタンを押す処理を実装しよう (11:20)
-
スタート167:[テスト画面]こたえ合わせ処理を実装しよう(①:初期設定) (4:52)
-
プレビュー168:【初心者向け解説】三項条件演算子(conditional expressions)とは(?/:) (3:27)
-
スタート169:[テスト画面]こたえ合わせ処理を実装しよう(②:正解判定) (7:19)
-
スタート169-2: [テスト画面]こたえ合わせ処理を実装しよう(②-2:正解判定時に効果音追加) (4:10)
-
スタート170:[テスト画面]こたえ合わせ処理を実装しよう(③:正答率の計算) (3:36)
-
スタート171:[テスト画面]こたえ合わせ処理を実装しよう(④:終了判定) (2:28)
-
スタート172:[テスト画面]こたえ合わせ処理を実装しよう(⑤:「Timer」を使って1秒後に次の問題を出題) (2:53)
-
スタート173:<資料>次のレクチャー(タイマー処理の解説)で使うプロジェクト
-
スタート174:【解説】タイマー処理(Timer)とは (10:44)
-
スタート174-2: 【解説】「Duration」クラスとは (4:23)
-
スタート175:[テスト画面]もどるボタンを押したらホーム画面に戻る処理を実装しよう(Navigator.popメソッド) (6:41)
-
スタート176:【+α:解説】今回の課題アプリでNull許容を適用したらどうなるか(安全呼び出し(?)と「!」演算子の実例) (1:45)
-
スタート177:<資料>今回作ったアプリのプロジェクト(計算脳トレ)
-
スタート第6章の確認クイズ
-
プレビュー178:オープニング(今回作るアプリの紹介[私だけの単語帳]) (8:27)
-
スタート179:<資料>今回の作るアプリの設計図(私だけの単語帳)
-
プレビュー180:今回作るアプリの設計図を紙に書こう(私だけの単語帳) (8:07)
-
スタート181:Android Studioで今回作るアプリのプロジェクトを作ろう (5:12)
-
スタート182:<資料>今回の作るアプリのリソース
-
スタート183:アプリで使うリソース(画像)をプロジェクトに取り込もう (4:16)
-
スタート184:アプリ全体に共通する部分(アプリのルート部分)を実装しよう (3:17)
-
スタート185:[ホーム画面]外枠の実装をしよう(アプリバー無しのマテリアルデザイン仕様) (2:26)
-
スタート186:[ホーム画面]画面全体のレイアウトの枠組みを作ろう (5:03)
-
スタート186-3: 【初心者向け解説】「ビット」と「バイト」と16進数との関係とは (5:56)
-
スタート187:カスタムフォントの設定をしよう(カスタムフォントの使い方4ステップ) (8:37)
-
スタート188:「Divider」を使って横線を引こう (6:01)
-
スタート189:「VoidCallback」を使ってボタンをカスタムウィジェットで作ろう (15:25)
-
スタート190:【解説】なぜButtonWithIconのコンストラクタ引数に「required」キーワードをつける必要があるのか (1:29)
-
スタート191:<資料>次のレクチャー(VoidCallbackの解説)で使うプロジェクト
-
スタート192:【解説】「VoidCallback」とは何か (6:12)
-
スタート193:【解説】ラジオボタン(RadioListTile)の使い方4ステップ (6:31)
-
プレビュー194:[ホーム画面]ラジオボタンの表示部分を実装しよう(title属性) (5:42)
-
スタート194-2: 【+α:解説】RadioListTileのvalue属性はNull許容でないのに「null」が入れられるのはなぜか(nullとonChanged属性の正体とは?) (7:22)
-
スタート195:[ホーム画面]ラジオボタンにセットする値を設定しよう(value/groupValue属性) (3:01)
-
スタート196:[ホーム画面]ラジオボタンが選択されたときの処理を実装しよう(onChanged属性) (7:01)
-
スタート196-2: 【解説】RadioListTile.onChanged属性の引数に型を指定した場合の対処法(Null-safety対応) (3:27)
-
スタート197:[ホーム画面]単語一覧画面に遷移する処理を実装しよう (4:40)
-
スタート198:[ホーム画面]テスト画面に遷移する処理を実装しよう (5:14)
-
スタート199:【解説】「BuildContext」とは (15:01)
-
スタート199-2: 【解説】「MaterialPageRoute」の謎解き(なぜ遷移先の画面を「child」ではなく「builder」で設定するのか) (10:18)
-
スタート200:「AppBar」を使えば前の画面に戻る処理を実装する必要がない! (5:15)
-
スタート201:[一覧画面]「FloatingActionButton」を使って編集画面に遷移する処理を実装しよう (10:44)
-
スタート202:[編集画面]問題入力部分を実装しよう (6:32)
-
スタート203:[編集画面]こたえ入力部分を実装しよう (1:46)
-
スタート203-2: [編集画面]「TextEditingController」を使い終わったら破棄する処理を実装しよう (3:41)
-
プレビュー204:[編集画面]「SingleChildScrollView」を使ってコンテンツが画面からはみ出さないようにしよう (3:09)
-
スタート205:[編集画面]「WillPopScope」を使って一覧画面に戻る処理を実装しよう (11:11)
-
スタート205-2: 【解説】WillPopScopeとは (6:04)
-
スタート205-3: 【解説】Future.valueとは (3:10)
-
スタート205-4: 【解説】なぜ「WillPopScope」の後継として「PopScope」が登場したのか(「Android Predictive Back」対応) (8:30)
-
プレビュー205-5: 【Flutter3.16以降】「PopScope」とは(WillPopScopeとの違い) (9:41)
-
スタート205-6: 【Flutter3.16以降】編集画面のWillPopScopeをPopScopeに移行させよう (7:25)
-
スタート206:【初心者向け解説】データベース(Database:DB)とは (5:53)
-
スタート207: 【解説】Flutter/Dartで使えるデータベース操作パッケージ「Drift(旧:Moor)」とは (7:18)
-
プレビュー207-2: 【解説】なぜ「Moor」はパッケージ名をわざわざ「Drift」に変えたのか (6:30)
-
スタート208: 【解説】データベース操作パッケージ「Drift(旧:Moor)」の使い方10ステップ (18:00)
-
スタート209:【解説】pubspec.yamlファイルにおける「dependencies」と「dev_dependencies」の違いとは (5:37)
-
スタート210: Drift(旧:Moor)パッケージをプロジェクトに追加しよう(Driftの使い方10ステップ①) (3:04)
-
スタート210-2: 【解説】Driftを使うために必要なパッケージ群の説明(なぜ4つも必要なのか) (6:03)
-
スタート210-3: x86のAndroid端末用のビルドを作成しないようにbuild.gradleファイルを修正しよう (3:20)
-
スタート210-4: 【Macのみ:Drift関連】iOSでビルドしたら「C compiler cannot create executables」というエラーが出る場合の対処法 (5:48)
-
スタート211: コード生成用ファイルとテーブルクラスの設定をしよう(Driftの使い方10ステップ②③) (7:28)
-
スタート212:【解説】SQLiteで使えるデータの型とテーブルクラスのコードの解説 (7:54)
-
スタート213:【初心者向け解説】「Set」とは (3:25)
-
スタート214:【初心者向け解説】「get」とは (5:12)
-
スタート215: データベースクラスの設定をしよう(Driftの使い方10ステップ④) (2:47)
-
プレビュー216: dartコマンドを使ってDrift用のコードを生成しよう(Driftの使い方10ステップ⑤) (2:45)
-
スタート216-2: (該当者のみ)Flutterを3.24にアップグレードするとコード生成に失敗する場合の対処法([SEVERE]Failed to precompile build script・・) (4:13)
-
スタート216-3: 【解説】「part」とは (3:07)
-
スタート217: 【解説】コード生成コマンドで出来たファイル(database.g.dart)の中身を見てみよう (3:55)
-
スタート218: データベースとの接続を開始するメソッド(_openConnectionメソッド)を作成しよう(Driftの使い方10ステップ⑥) (5:02)
-
スタート219: 【解説】Dartにおける7つのコンストラクタ(「:」の謎解き) (10:33)
-
プレビュー220: 【解説】「const」キーワードのややこしさ(コンストラクタを「作る」場面(クラスの設計図)と「使う」場面(インスタンスの生成)で意味合いが異なる) (6:21)
-
スタート221: データベースのスキーマバージョンを設定しよう(Driftの使い方10ステップ⑦) (1:23)
-
スタート222: 【解説】「annotation:アノテーション(@)」とは (4:43)
-
プレビュー223: 【解説】Drift2.18より導入された「Manager」とは何か (4:44)
-
スタート224: データベースの4つの操作メソッド(クエリ)を作成しよう(Driftの使い方10ステップ⑧) (9:11)
-
スタート225: データベースクラスのインスタンスを設定しよう(Driftの使い方10ステップ⑨) (3:40)
-
スタート226: [編集画面]新しい単語をデータベースに登録する処理を実装しよう(Driftの使い方10ステップ⓾) (8:57)
-
スタート226-2: 【解説】Driftを入れたらFlutterのColumnウィジェットが使えなくなってしまった場合の対処法(複数のパッケージに存在する同じ名前のクラスを使いたい場合の対処法) (5:12)
-
スタート227:【解説】端末にインストールされているSQLiteデータベースの中身を見る方法(DB Browser for SQLiteの使い方) (10:55)
-
スタート228:[編集画面]トーストメッセージ(FlutterToast)を使って登録完了メッセージを表示させよう(これまで使用していたToastパッケージとの違い) (7:47)
-
スタート229: 【解説】例外処理とは(try~catch文) (7:01)
-
スタート229-2: [編集画面]例外処理を使って単語を重複して登録しようとした際にエラーメッセージを表示させよう(Driftで重複データをチェックする方法) (4:54)
-
スタート230:[一覧画面]データベースに登録した単語データを取得する処理を実装しよう (5:45)
-
スタート230-2: 【+α:解説】Navigator.pushメソッドは遷移先の画面から戻ってくるのを待てる!(Navigator.pushの謎解き) (6:18)
-
スタート230-3: 【+α:解説】Navigator.popメソッドは遷移元の画面へ値を渡せる!(Navigator.popの謎解き) (5:25)
-
スタート231:【解説】ListViewの使い方5ステップ (4:45)
-
スタート232:[一覧画面]「ListView」を使って単語の一覧リスト部分を実装しよう (4:46)
-
スタート232-2: 【解説】itemBuilder属性に設定する関数の引数(BuildContextとint)は誰がいつ渡しているのか (3:34)
-
スタート233:[一覧画面]「Card」と「ListTile」を使って単語の一覧リスト部分を実装しよう (9:49)
-
スタート234:[一覧画面]一覧に表示された単語を長押ししたら削除する処理を実装しよう (5:18)
-
スタート235:「enum(列挙型)」を使って編集ステータスの設定をし、編集画面のコンストラクタを修正しよう (6:07)
-
スタート235-2: 【初心者向け解説】なぜ定数ではなく列挙型(enum)を使うのか (2:27)
-
スタート236:[一覧画面]一覧に表示された単語をタップしたときに編集画面に遷移する処理を実装しよう (2:58)
-
スタート237:[編集画面]一覧画面から渡された値を引き継ごう (8:49)
-
スタート238:[編集画面]一覧画面で選択した単語を修正する処理を実装しよう (8:09)
-
スタート第7章の確認クイズ
-
スタート239: データベースにフィールド(暗記済みフラグ)を追加しよう (6:04)
-
スタート239-2: database.g.dartファイルを再作成してスキーマバージョンを繰り上げよう (3:23)
-
スタート240: 【解説】Driftデータベースのフィールドを空っぽOK(Nullable)にする方法 (2:36)
-
スタート241:既に端末にインストールされている旧バージョンのデータベースとの統合処理を実装しよう (9:59)
-
スタート242:[編集画面]データベースのフィールド追加に伴う単語の登録・修正処理を変更しよう (2:14)
-
プレビュー243:【+α】「copyWith」メソッドを使って変更したい項目だけを簡単に修正する方法 (3:15)
-
スタート244:テストの状態を管理するためのステータスを設定しよう(TestStatus) (3:15)
-
スタート245:[テスト画面]画面全体のレイアウトの枠組みを作ろう (6:39)
-
スタート246:[テスト画面]問題数を表示するパートを実装しよう (4:50)
-
スタート247:[テスト画面]「Stack」でWidgetを重ねて問題カード表示パートを実装しよう (5:40)
-
スタート248:[テスト画面]「Stack」でWidgetを重ねてこたえカード表示パートを実装しよう (3:35)
-
スタート249:【解説】CheckBoxListTileの使い方3ステップ (8:48)
-
スタート250:[テスト画面]「CheckBoxListTile」を使って単語を暗記済みにする場合のチェックボックスを実装しよう (6:00)
-
プレビュー251:[テスト画面]テストで使う単語群をデータベースから取得しよう①(暗記済みの単語を除外して取得するクエリメソッドの作成) (6:32)
-
スタート252:[テスト画面]テストで使う単語群をデータベースから取得しよう②(テスト画面からクエリメソッド呼び出し) (6:06)
-
スタート253:[テスト画面]取得した単語リストをシャッフルしよう (5:07)
-
スタート253-2: 【解説】「late」使用上の注意点(最初に使うまでに値を入れないと(初期化しないと)いけない) (9:22)
-
スタート254:[テスト画面]「switch」文を使ってテストの状態を切り替える処理を実装しよう(FloatingActionButton) (6:07)
-
スタート255:[テスト画面]テスト開始前の初期状態の設定をしよう (5:57)
-
スタート256:[テスト画面]問題カードを出す処理を実装しよう (5:45)
-
スタート256-2: [テスト画面]出すべき問題が1問もない場合に発生するエラーへの対処法(Unhandled Exception: RangeError (index)) (4:08)
-
スタート256-3: 【解説】Listの要素無し判定の際に「isNotEmpty」ではなく「!=[]」ではなぜダメなのか(「==」の本当の意味とは) (7:21)
-
スタート257:[テスト画面]こたえカードを出す処理を実装しよう (3:14)
-
スタート258:[テスト画面]暗記済フラグをデータベースに登録しよう (5:01)
-
スタート259:[テスト画面]テスト終了時にメッセージを表示させよう (6:46)
-
スタート260:[一覧画面]暗記済の単語は一覧上でチェックマークを表示させよう(ListTile.trailing/Icon) (3:46)
-
スタート261:[一覧画面]暗記済の単語を下にソートする処理を実装しよう①(クエリメソッドの作成) (5:21)
-
スタート262:[一覧画面]暗記済の単語を下にソートする処理を実装しよう②(一覧画面からクエリメソッド呼び出しとリストの更新) (2:59)
-
スタート263:<資料>次のレクチャー(AlertDialogの解説)で使うプロジェクト
-
スタート264:【解説】確認ダイアログ(AlertDialog)の使い方4ステップ (8:24)
-
スタート265:[一覧画面]単語削除時に確認ダイアログ(AlertDialog)を出す処理を実装しよう (10:44)
-
スタート266:[編集画面]単語の登録・修正時に確認ダイアログ(AlertDialog)を表示する処理を実装しよう (11:10)
-
スタート267:[テスト画面]テスト終了時の確認ダイアログを実装しよう(AlertDialog) (9:17)
-
スタート268: 【Flutter3.16以降】テスト画面のWillPopScopeをPopScopeに移行させよう (3:36)
-
スタート第8章の確認クイズ
-
スタート269: 【+α:解説】繰り返し処理とは(forループとforEach関数) (9:15)
-
スタート270: 【+α:繰り返し処理①】for句を使ってみよう (7:37)
-
スタート271: 【+α:繰り返し処理②】for-in句を使ってみよう (2:21)
-
スタート272: 【+α:繰り返し処理③】forEach関数を使ってみよう (4:30)
-
スタート273:【+α】「Radio(ラジオボタン)」を「Switch(切り替えトグル)」に変えてみよう (6:25)
-
スタート274:【+α】ランチャーアイコンを作ってみよう(flutter_launcher_iconsパッケージ) (10:11)
-
スタート275: 【エラー対応】「flutter_launcher_icons」パッケージでランチャーアイコンを作ると「FormatException: Invalid number」 という例外が発生してしまう場合の対処法 (1:41)
-
スタート276:【+α:補足1】AndroidのランチャーアイコンをAdaptive Iconにする方法 (5:50)
-
スタート277:【+α:補足2】AndroidのランチャーアイコンをAdaptiveからLegacyに戻す方法 (1:22)
-
スタート278:【+α】Android端末に表示されるアプリのタイトルと画面の向きを設定しよう (3:00)
-
スタート279:【+α:Macのみ】iOS端末に表示されるアプリのタイトルと画面の向き設定しよう(Xcode) (2:35)
-
スタート280:【+α】Android用のスプラッシュスクリーン(ランチャースクリーン)を作ってみよう (12:42)
-
スタート281:【+α:Macのみ】iOS用のスプラッシュスクリーン(ランチャースクリーン)を作ってみよう (4:08)
-
スタート280-2: 【+α:解説】Android12(APIレベル31)以降のランチャースクリーンの設定方法 (8:31)
-
スタート282: 【+α】SingleChileScrollViewとListViewを組み合わせる場合の注意点 (7:48)
-
スタート283: 【+α】SingleChildScrollViewとExpandedは一緒に使ってはいけない(ExpandedとElexibleの違いとは) (6:38)
-
スタート284:【+α:解説】今回の課題アプリでNull許容を適用したらどうなるか(安全呼び出し(?)と「!」演算子の実例) (3:05)
-
スタート285:<資料>今回作ったアプリのプロジェクト(私だけの単語帳)
-
スタート第8章+αの確認クイズ
-
スタートF101: Androidアプリの開発者登録をしよう(Google Playデベロッパーアカウント登録) (6:34)
-
スタートF102: 支払いプロフィールを設定しよう(Google Play Console) (6:08)
-
プレビューF103: サービス手数料を15%に引き下げるための設定をしよう(アカウントグループの登録) (4:17)
-
スタートF104: ターゲットAPIレベル・アプリID・アプリのバージョン設定をしよう(Android Studio) (7:40)
-
プレビューF104-2: 【解説】Flutter2.8以降におけるAndroidのビルドファイル(build.gradle)の各種SDKversion数値の確認方法 (5:03)
-
スタートF105: 【該当者のみ】ハイフン(-)の入ったドメイン名を使う場合の注意点(「AAPT: error: attribute 'package' in tag is not a valid Android package name: ・・・'」の対処法) (4:44)
-
スタートF106: 【解説】AndroidアプリのAPIレベルとは (7:29)
-
スタートF107: 【解説】なぜbuild.gradleファイルは2つ存在するのか (3:23)
-
スタートF108: アップロード鍵を作ってGoogle Play Consoleにアップロードするファイル(App Bundle)を作ろう(Android Studio) (8:02)
-
プレビューF108-2: 【+α】アップロード鍵を紛失してしまった場合の対処法(パスワード忘れ含む) (12:46)
-
スタートF109: 【解説】Google Playアプリ署名(App Signing)とは (3:47)
-
スタートF110: Google Play Consoleに新規アプリを追加して「ストア掲載情報」を入力しよう (3:23)
-
スタートF111: アプリのアクセス権と広告に関する設定をしよう(初期設定) (3:43)
-
スタートF112: コンテンツのレーティングを取得しよう(Google Play Console) (1:41)
-
スタートF113: ターゲットユーザーを設定しよう(初期設定) (3:26)
-
スタートF114: 【解説】13歳未満対象のアプリをリリースする際の注意点(①:新しくなったGoogle Playファミリーポリシーへの対応) (5:01)
-
プレビューF114-2: 【解説】13歳未満対象のアプリをリリースする際の注意点(②:対象年齢設定上の注意点と外部リンクの禁止) (5:46)
-
スタートF114-3: 「ニュースアプリ」であるかどうかの設定をしよう (2:09)
-
スタートF114-4: 新型コロナ(COVID-19)関連アプリであるかどうかの設定をしよう (1:53)
-
スタートF114-5: 「データセーフティ(個人情報を収集するかどうか)」の設定をしよう (5:48)
-
スタートF114-6: 「広告ID」の設定をしよう (3:37)
-
スタートF114-7: 「金融取引機能」を提供するアプリかどうかの設定をしよう (3:24)
-
スタートF114-8: 「行政アプリ」かどうかの設定をしよう (3:20)
-
スタートF115: アプリのカテゴリを選択し、連絡先情報を登録しよう(初期設定) (1:41)
-
スタートF116: ストアの掲載情報を設定しよう(初期設定) (6:11)
-
スタートF117: 内部テストを行うためのテスターを設定しよう(アプリのリリース) (2:11)
-
スタートF118: 新しいリリースを内部テスト版でリリースしよう(アプリのリリース) (2:10)
-
スタートF119: 内部テスト版アプリをテストし「リリース前」レポートで問題を確認しよう(アプリのリリース) (2:37)
-
プレビューF120: リリース前レポートで「java.lang.StackOverflowError」というクラッシュエラーが出た場合の対処法 (3:43)
-
スタートF121: テストが完了した内部テスト版を製品版としてリリースしよう(アプリのリリース) (2:07)
-
スタートF121-2: 【希望者のみ】EUを配信対象から外す設定をしよう(Google Play Console) (5:14)
-
スタートF122: リリースしたアプリのバージョンアップをしよう (3:47)
-
スタートF123: 【重要】2020/11/2までにAndroidアプリの「targetSdkVersion」を「29」に上げる必要あり! (3:50)
-
スタートF124: リリース版のアプリをGoogle Playを通さずに開発者のスマホ端末にインストールする方法 (2:49)
-
スタートF125: 【2023/9以前に作成されたアカウント向け】Google Play Consoleデベロッパーアカウント確認完了期限の設定 (5:36)
-
スタートF126: 【該当者のみ】法人で登録する際のDUNSナンバーの取得方法 (2:30)
-
スタートF127: 【2023/9以前に作成されたアカウント向け】Google Play Consoleデベロッパーアカウントの確認方法(組織の場合) (6:28)
-
スタートF201: iOSアプリの開発者登録をしよう(Apple Developer Programへの登録) (7:06)
-
スタートF201-2: 【該当者のみ】法人で登録する際のDUNSナンバーの取得方法 (2:30)
-
スタートF202: 支払いプロフィールを設定しよう(App Store Connect) (5:42)
-
スタートF202-2:【未済の方のみ】銀行口座保有人の住所登録が2021/10/22までに必要になりました(「有料App」契約をしている場合) (2:06)
-
プレビューF203: サービス手数料を15%に引き下げるための設定をしよう(App Store Small Business Programの申請) (3:25)
-
スタートF204: バンドルIDを登録しよう(App IDs) (4:03)
-
スタートF205: App Store Connectで新規アプリを追加しよう (3:45)
-
スタートF206: アップロードするプロジェクトの設定を確認しよう(Xcode) (5:15)
-
スタートF207: App Store Connectにアプリのファイルをアップロードしよう(XCode) (5:43)
-
スタートF208: 「App情報」を入力しよう(App Store Connect) (2:19)
-
スタートF209: 「価格および配信状況」の入力をしよう(App Store Connect) (1:34)
-
スタートF209-2: 欧州連合デジタルサービス法のトレーダー要件の設定をしよう (6:58)
-
スタートF209-3: 【トレーダーでない場合】EUを配信対象から外す設定をしよう(App Store Connect) (3:12)
-
スタートF209-4: App Store Connectに載せるスクリーンショット作成時の注意点 (4:44)
-
スタートF209-5: 「年齢制限指定」の設定をしよう (5:29)
-
スタートF209-6: 【解説】子供向けiOSアプリ作成上の注意点 (5:36)
-
スタートF210: 「プラットフォームバージョン情報」を入力しよう(App Store Connect) (6:26)
-
スタートF211: TestFlightでベータ版テストをしよう(App Store Connect) (6:23)
-
スタートF212: テストが完了したベータ版を製品版として審査に提出しよう(AppReview) (3:04)
-
スタートF213: リリースしたアプリのバージョンをアップしよう (2:35)
-
スタート「Null Safety(Null安全)」とは (8:06)
-
スタート安全呼び出し(Safe Call)と「!」演算子 (6:56)
-
スタート空っぽ(null)と空文字(””)の違い (2:02)
-
スタート「!」演算子で強制アクセスして空っぽだった場合に何が起こるのか(Null check operator called on null value) (3:44)
-
スタート「late」使用上の注意点(最初に使うまでに値を入れないと(初期化しないと)いけない) (9:22)
-
スタート【+α】ジェネリクスを使う場合のNull Safety上の注意点 (8:10)
-
プレビュー既存のプロジェクトをNull Safety対応に移行させる方法(Migrating to null safety) (6:13)
この講座に頂いたお客様の声
こちらをクリックするとご覧頂けます(みんプロのHPに飛びます)。
みんプロ公式メルマガにご登録でFlutter初級編講座の「体験版」無料クーポン及び「製品版」15%割引クーポンがご利用頂けます!
みんプロでは、ぼくのこれまでのプログラマー・金融マン・心理カウンセラー経験を元にしたお役立ち情報や、ご登録者限定の割引クーポンなどのお得情報をお届けする公式メールマガジンを発行しています。下のリンクからご登録頂くと、この講座の体験版の無料クーポン及び製品版の15%割引クーポン含めた6大特典が無料でゲットできますので、よろしければご登録下さい。
- 【特典1】みんプロ式・Flutter初級編講座「製品版」15%割引クーポン(この講座)
- 【特典2】みんプロ式・Flutter初級編講座「体験版」の無料クーポン(この製品版講座の約1/6を抜粋。体験版の詳細はこちらから)
- 【特典3】みんプロ式・Android StudioとGit・Githubを使ったバージョン管理入門講座10%割引クーポン
- 【特典4】みんプロ式・Kotlin逆引き大辞典10%割引クーポン
- 【特典5】ぼくの苦い挫折ヒストリーとそこから導き出された「プログラミング挫折撲滅への道」無料メール講座
- 【特典6】「心がラクになる新しい成功法則」無料PDF小冊子
(注)このコースはプログラミングサポーター(講師)への質問が行えないバージョンですのでご注意ください。コメント機能を通じて質問を行いたい方は「質問対応あり版」をご検討ください。
プログラミングサポーター(講師)
大阪府生まれ。大阪府立茨木高等学校、京都大学経済学部卒業。
2000年より、日本生命保険相互会社、ニッセイアセットマネジメント株式会社、パトナム・インベストメンツ(米国)、ニッセイ・キャピタル株式会社において、日本株トレーダー・アナリスト、証券バックオフィス、経営企画、システム開発、海外投資家向け日本株マーケティング、資産運用会社の会計・税務・法務等の業務に従事。
2016年、合同会社てるる設立。スマホアプリプログラマーとして「願望実現サポートアプリ『GAMBO』」「Meisoー1番シンプルなマインドフルネス瞑想アプリ」「小学生からの英検®単語」をはじめとした、メンタルヘルス・知育・自己啓発系アプリを6タイトル・計12本(Android・iOS)をリリース。
2017年、自身のこれまでの社会人経験・プログラミング経験・子育て経験を基に、プログラミングを通じて人々の人生を豊かにして、未来に希望の持てる明るい社会の実現に貢献したいとの想いから、プログラミング完全初心者と挫折経験のある人を支援する「プログラミング挫折撲滅プロジェクト・みんなのプログラミング by Telulu LLC」を設立し、プログラミングサポーター活動と心理カウンセリング活動を開始。これまでに3,000名を超える方の挫折撲滅をサポート。わたしの人生挫折ヒストリー(詳しいプロフィール)はこちらから。
わたしのプログラミング挫折ヒストリーはこちらから。
「みんプロ式」で無限の可能性への扉を開いて下さい!はじめるの今でしょ!
長いメッセージをここまでお読み頂いて、どうもありがとうございました。
スマホアプリ(iOS・Android)が作れるようになると「稼ぐ力」が身につくだけではありません。
それ以上に、あなたの人生の質そのものを高める・豊かにしてくれる可能性をものすごい秘めているんです。
これって、エキサイティングじゃないですか?!
でも、プログラミングは身近になってきたとは言え、まだまだハードルが高いのが現実。
ぼくもアラフォー未経験から始めてさんざん苦労させられました。
こんな無駄な苦労をする人は、ぼくで最後にしたい。
プログラミング経験ゼロの人でも、歯を食いしばらずに楽しく続けられて、3ヶ月でスマホアプリ(iOS・Android)が作れるようになってもらいたい。
「みんプロ式」は、そんなぼくの想いを形にしたプログラミング講座です。
「みんプロ式」なら、PC1台さえあれば事前知識も経験も何もいりません。
スマホアプリを作ってみたいという熱意さえあれば、「はじめの第一歩」を踏み出すのに1円のリスクを背負う必要もありません。
さあ、今すぐこの講座を受講して無限の可能性の世界への扉を開いて下さい。
その扉を開くのはあなたです。
最後の最後までご覧頂きまして、本当にありがとうございました。
みんなのプログラミング by Telulu LLC 代表
北川 博之(きーぼー)
(注)このコースはプログラミングサポーター(講師)への質問が行えないバージョンですのでご注意ください。コメント機能を通じて質問を行いたい方は「質問対応あり版」をご検討ください。
よくあるご質問
https://minpro.net/query