🗒 강의 소개
- 2023년을 위한, Flutter 3.3+ 최.신.버.전!
- 292강 이상의 고급 강의 + 모르는 부분 추가 강의
- Flutter 개발에 대한 모든 기본 개념을 배우고 Flutter로 앱 바로 출시 가능합니다.
- 여러가지 언어 배울 필요없이 Dart언어 하나만 배우면 끝!
- Flutter 개발자로서 알아야 할 IDE(Android Studio) 사용법을 알려 드립니다.
- 네트워킹 - 존재하는 모든 API사용 가능 (ex. https://www.data.go.kr/)
- 다른 강의들처럼 "따라 해봐라" 식의 강의가 아닌, 모든 개념을 이해하시고 넘어가실 수 있게 설명을 합니다.
Flutter는 모든게 위젯!
Widget 사용법 뿐만 아니라.
Widget이 어떻게 작동하지는지 이해하고
Flutter를 가볍고 빠르게 Optimize 가능!!
Router API를 이해해서 iOS, Android를 통해 Deep Link를 지원하는 방법을 알고 웹에서 Fooderlich 앱을 탐색합니다.
- Router API를 더 잘 이해하세요.
- iOS 및 Android에서 Deep Link를 지원하는 방법을 알고 있습니다.
- 웹에서 Fooderlich 앱을 탐색합니다.
Shared preferences
설정값 저장 방법!
서버에 데이터 보내고 받기
- 모든 공공 데이터베이스 또는 모든 서버 사용 가능!
- 실제 API를 사용!!
- Json을 통해 서버와 대화 및 데이터 전달
상태 관리 구현 및 관리하는 방법.
- 상태 관리가 필요한 이유.
- Provider를 사용하여 상태 관리를 구현하는 방법.
- 북마크 및 재료의 현재 목록을 저장하는 방법.
- 저장소를 만드는 방법.
- 모의 서비스를 만드는 방법.
- 상태를 관리하는 다양한 방법.
SQLite 기반 Database 만드는 방법 및 sqflite 플러그인, sqlbright 라이브러리 사용 방법.
- SQLite 기반 Database 만드는 방법.
- 레시피 또는 재료를 삽입, 가져오기 및 제거하는 방법.
- sqflite 플러그인을 사용하는 방법.
- sqlbright 라이브러리를 사용하고 Stream을 통해 업데이트를 받는 방법.
- 데이터 베이스 작업 시 Moor 라이브러리의 기능을 활용하는 방법.
Android, iOS 앱 출시까지.
- Android 앱 빌드 및 출시.
- iOS 앱 빌드 및 출시.
- Firebase 클라우드 Firestore.
커리큘럼
- How to approach first chapter (2:16)
- First Flutter App_Starter
- 01_Create application (3:38)
- 02_Run project on different platforms (4:56)
- 03_Flutter basic code explained (4:36)
- 04_Change name (2:00)
- 05_Widget tree (2:16)
- 06_Clear code to start (4:03)
- 07_Stateless stateful widget (3:27)
- 08_How to continue (0:51)
- 09_Create recipe model (3:00)
- 10_Add recipe data (1:13)
- 11_Add images to project (3:46)
- 12_Listview widget (4:02)
- 13_Use list in listview (2:57)
- 14_Extract text widget (2:23)
- 15_Create recipe item layout (7:08)
- 16_See widget tree (1:53)
- 17_Fine tune layout (8:50)
- 18_User click(gesture detector) (2:48)
- 19_Using navigator (4:54)
- 20_Create stateful widget (4:52)
- 21_Create state for stateful widget (3:30)
- 22_Material and Scaffold (3:13)
- 23_Safe area (2:21)
- 24_Sized box (8:50)
- 25_Ingredient class (5:15)
- 26_Show ingredient data in detail page (1:47)
- 27_Expanded(listview in column) (8:24)
- 28_Show all data in text (2:27)
- 29_App key logic intro (1:25)
- 30_Slide widget (3:46)
- 31_Control slider (7:03)
- 32_Finish slider layout (2:23)
- 33_Calculate serving with slider value (6:58)
- 34_Wrap up (3:16)
- Everything is a widget_Starter
- 35_Widget introduction (3:24)
- 36_Open starter project (2:13)
- 37_Understand main code (8:07)
- 38_Theme data (2:43)
- 39_Text theme (3:19)
- 40_Apply theme (4:21)
- 41_Adopt theme into widgets (6:49)
- 42_Bottom navigation bar (4:23)
- 43_Change body with bottom navigation bar (7:35)
- 44_First card layout (10:09)
- 45_Stack widget (6:24)
- 46_Stack positioned widget (5:20)
- 47_Decode layout into column row (5:57)
- 48_Circle image wz border (11:09)
- 49_Custom widget(author card layout) (6:24)
- 50-1_Alignment n axis in column n row (7:50)
- 50-2_Alignment n axis in column n row (8:33)
- 51_Rotated box (7:22)
- 52_Icon button (4:05)
- 53_Snackbar (3:18)
- 54_So far (2:24)
- 55_Card box layout (3:05)
- 56_Background filter color (6:02)
- 57_Padding to right widget (4:03)
- 58_Chip widget (3:53)
- 59_Wrap widget (5:15)
- 60_Play wz alignment (3:47)
- 61_Button on chip and update theme (4:10)
- Scrollable Widget_Starter
- 68_How widget updated single widget (6:01)
- 69_How widget tree updated (4:13)
- 70_Intro open project (1:40)
- 71_Walk through project and json (5:13)
- 72_Mock service explained (6:31)
- 73-1_Create explore screen (2:29)
- 73-2_Create explore screen (5:26)
- 74-1_Future builder (4:02)
- 74-2_Future builder (6:57)
- 75_Get data from snapshot future builder (2:54)
- 76_Create top listview (6:25)
- 77_ListView separated (7:11)
- 78_Use list data in listview (3:00)
- 79_Show card widget in listview (6:48)
- 80_Column vs Nested listview (1:46)
- 81_List view inside listview (2:32)
- 82_Friend post tile (9:41)
- 83_Create friend post listview widget (5:18)
- 84_Nesting list view in listview (6:58)
- 85_Titles layout fix (2:19)
- 86_Show data in nested listview (8:53)
- 87_Padding for listview (3:02)
- 88_Gridview constructor (6:08)
- 89_Create recipe screen (4:04)
- 90_Future builder state (2:21)
- 91_Recipe thumbnail (13:18)
- 92_Create grid view wz builder constructor (4:35)
- 93_Gridview padding (6:04)
- 94_Data from future (6:57)
- Interactive Widget_Starter
- 95_Intro interactive widgets (2:10)
- 96_Empty grocery screen (7:27)
- 97_Empty screen layout (7:49)
- 98_Provider intro (10:51)
- 99_Create tab manager (6:19)
- 100_Change notifier provider (5:15)
- 101_Consumer (5:12)
- 102_Provider of (4:22)
- 103_Create grocery model (4:52)
- 104_Protect manager value by private (5:15)
- 105_Grocery manager (6:09)
- 106_Add multiple providers (3:18)
- 107_Consumer of grocery manager (3:00)
- 108_Extract widget into function and floating action button (3:56)
- 109_Add more packages (2:34)
- 110_Create grocery items screen file (2:53)
- 111_Navigate to grocery item screen (4:00)
- 112_Add item and navigator pop (3:20)
- 113_Add state properties (4:02)
- 114_Init state properties (5:48)
- 115_Must dispose controller (2:24)
- 116_App bar and google font (4:56)
- 117_App bar shadow (1:02)
- 118_Text field decor (7:24)
- 119_Get data from text editing controller (2:16)
- 120_Extract into method by section (2:16)
- 121_Choice chip layout (6:17)
- 122_When choice chip selected (3:22)
- 123_Select date layout (6:34)
- 124_Date picker (5:55)
- 125_Time picker (2:59)
- 126_Color picker wz dialog (9:35)
- 127_Quantity wz slider (7:30)
- 128_Create grocery tile (6:30)
- 129_Use grocery tile widget (5:49)
- 130_Build importance (6:21)
- 131_Date format (1:48)
- 132_Finalize grocery tile (2:58)
- 133_Adjust theme for specific widget (2:38)
- 134_Save grocery item (4:19)
- 135_Grocery list screen (4:36)
- 136_Check box toggle action (6:46)
- 137_Update item (6:39)
- 138_Dismissible (4:12)
- 139_On dismissible action (1:00)
- 140_Show snack bar after item removed (2:52)
- 141_Indexed stack to cach screens (3:16)
- Shared Preferences_Starter
- 149_Intro shared pref (4:01)
- 150_Get shared pref package (4:33)
- 151_What we need for shared pref (4:00)
- 152_Save and retreive string list from shared pref (4:25)
- 153_Add function to start search and save (2:30)
- 154_Trigger start search function (5:29)
- 155_Hide keyboard by unfocus (2:54)
- 156_Pop up menu button (5:05)
- 157_Get previous searches (3:09)
- 158_Save and get int value (9:18)
- final project
- Network Library_Starter
- 173_Intro to chopper (1:22)
- 174_Add chopper packages to project (1:21)
- 175_Prepare for getting result (3:56)
- 176_Chopper interface (6:17)
- 177_Convert request (5:40)
- 178_Convert response (4:42)
- 179_Why using chopper (2:43)
- 180_Add params (3:18)
- 181_Combine all into chopper client (7:02)
- 182_Generate chopper code (3:24)
- 183_Setup for logging (2:18)
- 184_Chopper api call and future builder (1:43)
- 185_Get value from response (4:36)
- 186_Error handling (2:28)
- 187_Check logging (4:08)
- State Management_Starter
- 188_Why manage state (4:58)
- 189_Business logic (3:15)
- 190_Birth of provider (4:00)
- 191_Introduction to provider (2:41)
- 192_Create models for ui (4:32)
- 193_Create repository interface (6:50)
- 194_Create memory repository (4:11)
- 195_Find data from memory (3:17)
- 196_Find recipe ingredients (2:17)
- 197_Insert data (4:02)
- 198_Delete data (2:37)
- 199_Delete recipe (2:33)
- 200_Change notifier provider (5:21)
- 201_Use real data in recipe detail (5:06)
- 202_Insert recipe from widget (1:41)
- 203_Convert api model to local model (7:27)
- 204_Pass api model to detail page after convert (1:19)
- 205_Api recipe model to recipe model procedure (3:26)
- 206_Access provider data via consumer (4:48)
- 207_Show bookmarked items (6:48)
- 208_Tuning bookmark item layout (0:58)
- 209_Practice consumer (4:35)
- 210_Flutter slidable package (2:32)
- 211_Delete recipe via consumer (3:28)
- 212_Delete recipe and ingredients(how to use breakpoint) (7:51)
- 213_Create mock service (7:47)
- 214_Use provider for inject mock service (2:56)
- 215_Use mock service (3:50)
- 216_Other state management tool (2:41)
- Stream_Starter
- 217_Stream intro (0:20)
- 218_Type of streams (1:07)
- 219_Single to broadcast stream (0:47)
- 220_Understand stream (5:09)
- 221_Open starter project (0:33)
- 222_What we do wz stream (2:18)
- 223_Update repository for using stream (2:18)
- 224_Create stream and stream controller (5:09)
- 225_Insert data and sink via stream (3:01)
- 226_Fix delete items methods (2:45)
- 227_Switch between mock and real service (7:09)
- 228_Remove change notifier provider (2:42)
- 229_Connect stream to widget (4:49)
- 230_See how stream works (7:50)
- 231_Connect groceries wz stream (5:13)
- Database with SQLite_Starter
- 232_Intro database sqlite sqflite (4:48)
- 233_Look up in sql (2:54)
- 234_Position of sqflite and drift (2:00)
- 235_Sqflite in flutter (6:38)
- 236_Create db instance (1:51)
- 237_Database singleton (3:36)
- 238_Open database (3:25)
- 239_Create tables (8:45)
- 240_Init and access database (3:39)
- 241_Init and access stream database (1:30)
- 242_Recap json serialization (4:13)
- 243_Create recipes ingredients parser (3:52)
- 244_Find all recipes from db (3:30)
- 245_Find recipe by id in db (2:19)
- 246_Find all ingredients in db (1:09)
- 247_Find recipe ingredients in db (3:11)
- 248_Watch all recipe with stream function (6:43)
- 249_Watch all ingredients from db (1:20)
- 250_Insert recipe into db (1:43)
- 251_Insert one ingredient (0:55)
- 252_Create base insert method (2:18)
- 253_Create base delete method (1:47)
- 254_Delete recipe (1:53)
- 255_Delete ingredients (1:41)
- 256_Delete ingredients for a recipe (1:32)
- 257_Close stream database (1:34)
- 258_Sqlite repository with repository interface (5:22)
- 259_Insert recipe with ingredients (7:32)
- 260_Delete data (2:06)
- 261_Delete recipe and ingredients (1:06)
- 262_Open and close database (1:51)
- 263_Ignore param in json serializable (6:51)
- 264_Fix sql syntax(cons of sqflite compare to drift) (5:00)
- Database with drift_Starter
- 265_Intro drift repository (1:43)
- 266_Add drift packages (2:21)
- 267_What we will do wz drift (3:03)
- 268_Create recipe table (6:48)
- 269_Supported data type n create ingredient table (1:29)
- 270_Create recipe database (4:55)
- 271_Create connection to db (2:19)
- 272_Create recipe accessor (8:42)
- 273_Create ingredient accessor (2:40)
- 274_Generate drift code (1:32)
- 275_Convert methods (4:27)
- 276_Drift repository (3:13)
- 277_Find all recipes (5:53)
- 278_Watch all recipes (4:40)
- 279_Pass stream via repository (2:07)
- 280_Watch all ingredients(different with recipes) (5:12)
- 281_Transform data with map (1:52)
- 282_Find recipe by id and transform future data (2:08)
- 283_Find all ingredients and new list converter (3:05)
- 284_Find recipe ingredients (1:11)
- 285_Insert recipe (3:48)
- 286_Insert ingredients (2:23)
- 287_Try drift db (3:10)
- 288_Delete recipe (1:44)
- 289_Delete ingredient (1:29)
- 290_Delete recipe ingredients (2:41)
- 291_Testing delete (0:57)
- 292_Other way to delete many items (3:58)
강의 중간에 이해가 안 되는 부분이 분명이 있을거예요. 처음 프로그래밍을 배우거나, Flutter를 처음 배우는 사람이라면 더더욱 많을 것 같고요.
아무리 네이버, 구글을 해봐도 마땅한 해결책은 안 나오고...
시간은 흘러가고...
시간 낭비한 것 같아 죄책감만 늘어나고...
이때부터는 '아~ 강의를 끝까지 무사히 마칠 수 있을까..?' 라는 의구심이 들기 시작하고,
그런 의구심에 강의에 잘 안 들어오게 되고...
'이 강의는 나한테 안 맞나보다... 다른 강의를 찾아봐야겠다...' 이런 식으로 여기저기 헤매다가
결국 돈 낭비 + 시간 낭비...
마음은 더욱더 복잡해지고, 조급해지고...
저 "코딩 파파"가 해결책 드립니다!
일단 딱 30일만! 하기 싫은 마음 꾸욱 참고해보세요.
한 달 해보고 배운 게 없다면 30일 안에 무조건 환불해 드릴게요^^ 나쁘지 않죠?
이해 안 되는 부분 질문해서 '더코딩파파'한테 추가 강의 의뢰하세요~^^
추가 강의 포함 가격입니다!
자, 그럼 해보지 않을 이유가 없지 않을까요?
돈 낭비 해결! 시간 낭비 해결!
Q1. 환불 가능 한가요?
A: 배운 게 없으시면, 30일 안에 긴 말없이 환불!! 그만큼 자신 있습니다! 모두가 도움받을 수 있는 강의를 만드는 게 궁극의 목표이기 때문입니다! 맘에 안 드는 강의는 돈 받을 자격 없죠!ㅎㅎ 시간이 갈수록 더욱더 완벽한 강의가 될 거예요 ㅎㅎ
Q2. 강의는 얼마 동안 수강할 수 있나요?
A: 12개월 동안 수강 가능하십니다! 인터넷과 브라우저만 있으면 언제 어디서든 24시간 365일 시청 가능하십니다.
Q3. 비전공자도 들을 수 있나요?
A: 프로그래밍을 아예 처음 하시는 분도 문제없으실 거예요!!
Q4. 강의 질문은 어디서 하나요?
A: 수강하시는 강의 첫 페이지(Intro) 안에 질문 방법에 대해서 안내되어 있습니다. 영상 보시고 안내에 따라서 질문해 주시면 됩니다.
Q5. 왜 Flutter를 배워야 하나요?
A: Dart 언어 한 가지 언어로 단 한 개의 코드만 작성해서 안드로이드, iOS 앱을 만들 수 있어요! 차후에는 그 프로젝트 그대로 데스크톱, 웹 등에도 작동하는 애플리케이션 빌드가 가능해집니다. 또한, Flutter는 다이내믹한 레이아웃을 만드는데 최적화된 언어를 사용하고, Flutter Team이 직접 만든 방대한 Widget(레이아웃 컴포넌트)들을 사용할 수 있습니다.
홍콩에서 Team lead로 Watsons, Fortress, 여러 스타트업 등에서
15년 넘게 일해온 경험과 지난 5년간 100권 이상의
Personal development 책을 읽고 배운 점들을 접목하여
이 강의를 만들었다.