Flutter Developer Bootcamp
Flutter is explosively taking over the cross-platform front-end market. Although it's only 2.5 years since the first stable release, it has surpassed any other competing framework on Google Trends . But this is the least that Flutter has to show for itself...
More
Don't Miss The Opportunity Called "Flutter"
Flutter is explosively taking over the cross-platform front-end market. Although it's only 2.5 years since the first stable release, it has surpassed any other competing framework on Google Trends . But this is the least that Flutter has to show for itself...
Companies all around the world are heavily investing into Flutter. And it's not only new projects that are hopping on board - apps which are already released and with millions of users are being migrated to Flutter as we speak!
Think about it - you already have an app released which is built in native Android & iOS or React Native. You've invested millions of dollars into that app's code, users are reasonably happy and the app generates millions in revenue... Now, despite this huge previous investment, you still decide Flutter is the way to go forward. Crazy right?
Yes, Flutter is so crazily good that companies are willing to invest a lot of money to have their flagship apps rebuilt in it. That's the story of Google Ads and Google Pay - two of Google's biggest moneymakers. Brand new apps which Google sets out to build are also written in Dart & Flutter. One them is the client app for Stadia - the cloud gaming service.
Sure, Google is the company which stands behind Flutter, so it's not really that surprising to see it used so extensively over there. Still, the migration or new development of mission-critical apps is not something to be overlooked. Google simply believes that Flutter is the future and they don't fear to invest millions, if not billions of dollars in it.
However, Flutter is spreading like a wildfire outside of its parent company too! Even banks (which have a very strict criteria when choosing technologies) have chosen Flutter. The Polish branch of the ING bank has fully switched their Android/iOS native app to Flutter and Nubank, the largest digital bank outside Asia, now develops all new features in Flutter.
Entire teams are transitioning to building apps with the Flutter framework and companies all around the world are actively hiring Flutter developers.
Big players like eBay, Philips, Alibaba, BMW, Toyota, Square, and many others are using Flutter to bring their projects to life for millions of users. Of course, such massive adoption means there are more and more Flutter jobs each day, and this trend is not slowing down anytime soon.
Smaller companies are also finding out about the benefits of this framework, which opens up even more opportunities for you as a developer. From my personal experience, even non-technical business owners are getting increasingly more interested in Flutter and what it has to offer for their growth.
There are entire software development studios adopting Flutter as their main UI technology. One of the leading software studios building apps for clients all around the world in Flutter is LeanCode. They've successfully built apps for industries ranging from energy to food products. As if that weren't enough, this is also the company behind the world's largest community-driven Flutter conference in the world to date, Flutter Europe.
Be a Developer in the Fastest Growing UI Framework!
- The average Flutter developer salary in San Francisco is $148,315 USD per year!
- Google, Microsoft, Toyota, Alibaba, eBay and many more are heavily investing into Flutter.
- I personally scored a contract with a billion-dollar company, charging $150 USD per hour.
- Flutter is the fastest growing cross-platform framework supporting mobile, web and desktop from a single codebase.
Watch Online Flutter Developer Bootcamp
# | Title | Duration |
---|---|---|
1 | Windows Flutter Install | 07:59 |
2 | Windows Android Setup | 05:07 |
3 | MacOS Flutter Install | 06:40 |
4 | MacOS iOS Android Setup | 08:53 |
5 | Turning VS Code Into a Flutter IDE | 13:58 |
6 | (Optional) Configuring VS Code to Look Exactly Like Mine | 03:03 |
7 | Flutter-Specific VS Code Settings | 02:04 |
8 | Dart Module Introduction | 06:08 |
9 | Variables and Primitive Types | 14:15 |
10 | Non-Nullability | 06:54 |
11 | Operators | 10:12 |
12 | Control Flow - If and Switch | 06:07 |
13 | Control Flow - Loops | 05:22 |
14 | Functions - Basics | 05:17 |
15 | Functions - Parameters | 10:31 |
16 | Functions - Higher Order | 12:51 |
17 | Collections - Basics | 09:14 |
18 | Collections - Transformations | 07:51 |
19 | Collections - If, For, Spread | 05:02 |
20 | Enums | 06:11 |
21 | The Pub Package System | 06:53 |
22 | Linting | 03:21 |
23 | Classes - Basics | 16:31 |
24 | Classes - Static Members | 02:24 |
25 | Classes - Private Members | 06:23 |
26 | Classes - Properties | 11:24 |
27 | Classes - Equality | 06:56 |
28 | Inheritance - Extending a Class | 15:38 |
29 | Factory Constructors | 03:57 |
30 | Inheritance - Abstract Classes | 04:19 |
31 | Inheritance - Interfaces | 06:05 |
32 | Generics | 03:13 |
33 | Mixins | 05:48 |
34 | Extensions | 04:52 |
35 | More About Files and Packages | 03:16 |
36 | Immutable Data Classes - Basics | 09:53 |
37 | Freezed Data Classes | 11:55 |
38 | Freezed Unions | 16:18 |
39 | Error Handling | 06:32 |
40 | Asynchrony - Futures | 12:09 |
41 | Asynchrony - Stream Basics | 05:25 |
42 | Asynchrony - Stream Generators and Operators | 06:21 |
43 | Module Introduction | 05:30 |
44 | Flutter 101 | 23:18 |
45 | Reorganizing The Default App | 06:02 |
46 | RangeSelectorPage Outline | 04:16 |
47 | Creating the Input Form UI | 06:16 |
48 | Removing Widget Code Duplication | 02:19 |
49 | Minimum and Maximum Range Fields | 07:13 |
50 | Field Validators | 02:51 |
51 | Validating and Saving the Form | 06:25 |
52 | Extracting the Form Into a Separate Widget | 11:14 |
53 | Navigating to the Randomizer Page | 09:38 |
54 | Implementing the Randomizer Page | 13:20 |
55 | Reimplementing With Flutter Hooks | 14:22 |
56 | Creating a ChangeNotifier | 10:10 |
57 | Providing the ChangeNotifier Around the App Using Provider | 15:36 |
58 | Adding a Riverpod Dependency | 05:29 |
59 | Using ChangeNotifier With Riverpod | 16:25 |
60 | Managing State Immutably With StateNotifier | 20:12 |
61 | Repo Viewer Module Introduction | 14:16 |
62 | Setting Up the Project | 08:22 |
63 | Creating an OAuth App and a Personal Access Token | 06:39 |
64 | Making a Test Authorized Request | 05:25 |
65 | Overview of the OAuth2 Authorization Code Flow | 05:31 |
66 | Architectural Overview | 18:47 |
67 | Adding Dependencies | 13:16 |
68 | Setting Up Analysis Options | 04:21 |
69 | Auth Failure | 07:20 |
70 | Starting With the Auth Infrastructure Layer | 07:18 |
71 | Secure Credentials Storage | 15:00 |
72 | Getting Signed-In Credentials | 08:49 |
73 | IDs, Scopes and Endpoints | 11:19 |
74 | Creating the AuthorizationCodeGrant | 06:22 |
75 | Handling the Authorization Response | 09:51 |
76 | Changing the Access Token Response Format To JSON | 09:27 |
77 | Signing Out and Token Revocation | 24:05 |
78 | Handling the Offline Sign Out Behavior | 08:50 |
79 | DioError Extension | 05:54 |
80 | Refresh Credentials Method | 10:08 |
81 | Starting With the Auth Application Layer | 08:58 |
82 | Writing the First AuthNotifier Method | 06:42 |
83 | Creating an AuthUriCallback | 14:50 |
84 | Orchestrating the Sign In Process | 06:15 |
85 | Sign Out and Auth Application Layer Conclusion | 03:54 |
86 | Auth Providers | 12:10 |
87 | Setting Up Presentation Layer Pages | 05:38 |
88 | Creating an AppWidget | 06:33 |
89 | Setting Up AutoRoute | 12:28 |
90 | Creating a Splash Page | 09:54 |
91 | Initialization Provider | 07:43 |
92 | Navigating Based On the AuthState | 10:40 |
93 | Building the Sign-In Page UI | 12:16 |
94 | Paving the Way for the Auth WebView | 08:02 |
95 | Auth Callback Functions | 09:42 |
96 | Creating a WebView | 07:17 |
97 | Intercepting Redirection Attempts & Finishing the WebView | 10:50 |
98 | Android-Specific WebView Setup | 05:58 |
99 | Researching the GitHub API Endpoints | 29:57 |
100 | Similarities Between Starred And Search Endpoints | 06:48 |
101 | Creating the GitHub Feature Folder Structure | 08:11 |
102 | GitHub Domain Entities | 13:35 |
103 | GitHub Failure | 02:19 |
104 | Starting With the Data Transfer Objects | 06:40 |
105 | Using Json Serializable | 10:41 |
106 | Converting Between DTOs and Entities | 03:44 |
107 | GithubRepoDTO | 09:51 |
108 | Converting the GithubRepoDTO Between Layers | 03:31 |
109 | Explanation of ETags and General Caching | 06:24 |
110 | First Draft of the StarredReposRemoteService Interface | 03:25 |
111 | Creating a RemoteResponse Union | 06:11 |
112 | Setting Up a SembastDatabase Class | 20:44 |
113 | Registering a Sembast Provider | 03:33 |
114 | Implementing the First Version of the GithubHeaders Data Class | 09:49 |
115 | Parsing the Link Header for Pagination Purposes | 28:22 |
116 | Caching the GitHub Headers | 15:51 |
117 | Getting Starred Repos Page - Starting With the Implementation | 22:16 |
118 | Getting Starred Response Page - Handling All RemoteResponse Cases | 12:03 |
119 | Passing the Max Page Number in the RemoteResponse | 15:55 |
120 | Indicating Freshness of the Data | 13:42 |
121 | StarredReposRepository Implementation Part 1 - Using Only Remote Service | 12:25 |
122 | StarredReposLocalService - Upserting a Page | 15:31 |
123 | StarredReposLocalService - Reading a Page | 15:04 |
124 | StarredReposRepository Implementation Part 2 - Local Service | 07:12 |
125 | OAuth2Interceptor Part 1 | 18:46 |
126 | OAuth2Interceptor Part 2 | 12:44 |
127 | Providing the OAuth2Interceptor | 13:54 |
128 | Creating a StarredReposState | 21:47 |
129 | StarredReposNotifier - First Setup | 06:25 |
130 | Finishing the StarredReposNotifier | 13:18 |
131 | Providers for the Starred Repos Feature | 09:15 |
132 | Initial Creation of the PaginatedReposListView | 14:33 |
133 | Configuring the PaginatedReposListView | 13:37 |
134 | Repo Tile Initial Creation and Fighting Fires | 14:25 |
135 | Repo Tile Part 1 | 09:04 |
136 | Fixing Dio's Wrong 304 Status Code Categorization | 05:39 |
137 | Repo Tile Part 2 | 09:03 |
138 | Loading Repo Tile - Shimmer Effect | 11:19 |
139 | Loading Repo Tile - Layout | 20:41 |
140 | Failure Repo Tile | 25:24 |
141 | Adding Pagination Part 1 | 08:53 |
142 | Adding Pagination Part 2 | 14:49 |
143 | No Connection Toast | 14:36 |
144 | No Results Display | 11:17 |
145 | Using the Local Page Count In the No Connection State | 08:42 |
146 | Searched Repos Feature Overview | 11:13 |
147 | Removing Duplication - Repos Remote Service | 13:06 |
148 | Creating Searched Repos Repository | 10:49 |
149 | Removing Duplication - Paginated Repos Notifier | 12:24 |
150 | Searched Repos Providers and Start of Dependency Generalization | 08:53 |
151 | Finishing the Dependency Generalization | 12:33 |
152 | Creating the Searched Repos Page | 10:08 |
153 | Fixing the Old Data Issue With AutoDispose Provider | 05:41 |
154 | Explanation of the Search Feature | 07:42 |
155 | Watching Search Terms | 13:00 |
156 | Adding Search Terms and Sorting | 07:27 |
157 | Deleting and Putting Search Terms First | 16:36 |
158 | Search History Application Layer | 12:00 |
159 | Creating a SearchBar Widget and Search Feature Providers | 13:25 |
160 | Adding Parameters to the Search Bar | 10:38 |
161 | Building the Search Bar UI Part 1 | 11:52 |
162 | Fixing the Failure Repo Tile | 03:47 |
163 | Building the Search Bar UI Part 2 | 10:44 |
164 | Search Bar Actions | 07:09 |
165 | Minimum Viable Search Bar UI | 12:22 |
166 | The onSubmitted Search Bar Callback | 09:00 |
167 | Search Bar Dropdown Background | 09:39 |
168 | Finishing Up the Search Bar | 25:16 |
169 | Adding Search Bar to the Searched Repos Page | 17:14 |
170 | Platform-Adaptive Search Bar Back Button | 09:28 |
171 | Overview of the Repo Detail Feature | 17:49 |
172 | Creating Repo Detail Entity and DTO | 14:04 |
173 | Getting the Readme HTML | 08:13 |
174 | Getting the Starred Status of a Repo | 08:40 |
175 | Switching the Starred Status of a Repo | 10:21 |
176 | Local Repo Detail Service Part 1 | 22:10 |
177 | Local Repo Detail Service Part 2 - Last Used Timestamp | 16:37 |
178 | Local Repo Detail Service Part 3 - Finishing Up the Caching Strategy | 09:25 |
179 | Deleting the Repo Detail Headers | 04:21 |
180 | Repo Detail Repository Part 1 | 08:27 |
181 | Repo Detail Repository Part 2 | 16:16 |
182 | Repo Detail State and Notifier | 13:31 |
183 | Optimistic Updates in the Repo Detail Notifier | 17:33 |
184 | Preparing the Repo Detail Page | 18:56 |
185 | Changing the App Bar Color | 05:13 |
186 | Providers for the Repo Detail Subfeature | 04:47 |
187 | Repo Detail Page Part 1 | 31:07 |
188 | Repo Detail Page Part 2 | 18:35 |
189 | Opening Links in an External Browser | 06:32 |
190 | Module Recap | 05:19 |
191 | Initial Setup | 12:55 |
192 | Writing Strings and Using Them Within the App | 15:30 |
193 | Supporting Plural Strings | 08:24 |
194 | Adding Another Language | 09:52 |
195 | Module Introduction and Setup | 09:35 |
196 | The Need for Method Channels | 08:21 |
197 | Exploring the Native Code and Writing Dart Code | 13:34 |
198 | Enabling Code Completion for Writing Kotlin | 13:04 |
199 | Creating an Android Notification Channel | 19:29 |
200 | Showing a Notification on Android | 12:24 |
201 | Using the Plugin From a Flutter App and Showcasing on Android | 07:08 |
202 | Opening the iOS Plugin Project in XCode | 07:00 |
203 | Showing a Notification on iOS | 22:51 |