Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Flutter Developer Bootcamp
Set up a professional environment for Flutter & Dart
Windows Flutter Install (7:58)
Windows Android Setup (5:06)
MacOS Flutter Install (6:39)
MacOS iOS Android Setup (8:52)
Turning VS Code Into a Flutter IDE (13:57)
(Optional) Configuring VS Code to Look Exactly Like Mine (3:02)
Flutter-Specific VS Code Settings (2:03)
Get Up To Speed With Dart
Dart Module Introduction (6:07)
Variables and Primitive Types (14:14)
Non-Nullability (6:53)
Operators (10:11)
Control Flow - If and Switch (6:06)
Control Flow - Loops (5:21)
Functions - Basics (5:16)
Functions - Parameters (10:30)
Functions - Higher Order (12:50)
Collections - Basics (9:13)
Collections - Transformations (7:50)
Collections - If, For, Spread (5:01)
Enums (6:09)
The Pub Package System (6:52)
Linting (3:20)
Classes - Basics (16:30)
Classes - Static Members (2:23)
Classes - Private Members (6:22)
Classes - Properties (11:23)
Classes - Equality (6:54)
Inheritance - Extending a Class (15:37)
Factory Constructors (3:56)
Inheritance - Abstract Classes (4:17)
Inheritance - Interfaces (6:04)
Generics (3:12)
Mixins (5:47)
Extensions (4:51)
More About Files and Packages (3:15)
Immutable Data Classes - Basics (9:52)
Freezed Data Classes (11:54)
Freezed Unions (16:17)
Error Handling (6:31)
Asynchrony - Futures (12:08)
Asynchrony - Stream Basics (5:24)
Asynchrony - Stream Generators and Operators (6:20)
Flutter Foundations
Module Introduction (5:29)
Flutter 101 (23:17)
Reorganizing The Default App (6:01)
RangeSelectorPage Outline (4:15)
Creating the Input Form UI (6:15)
Removing Widget Code Duplication (2:18)
Minimum and Maximum Range Fields (7:12)
Field Validators (2:50)
Validating and Saving the Form (6:24)
Extracting the Form Into a Separate Widget (11:13)
Navigating to the Randomizer Page (9:37)
Implementing the Randomizer Page (13:19)
Reimplementing With Flutter Hooks (14:21)
Creating a ChangeNotifier (10:09)
Providing the ChangeNotifier Around the App Using Provider (15:35)
Adding a Riverpod Dependency (5:28)
Using ChangeNotifier With Riverpod (16:24)
Managing State Immutably With StateNotifier (20:10)
Production-Grade Project - Repo Viewer
Repo Viewer Module Introduction (14:15)
Setting Up the Project (8:21)
Creating an OAuth App and a Personal Access Token (6:38)
Making a Test Authorized Request (5:24)
Overview of the OAuth2 Authorization Code Flow (5:30)
Architectural Overview (18:46)
Adding Dependencies (13:15)
Setting Up Analysis Options (4:20)
Auth Failure (7:19)
Starting With the Auth Infrastructure Layer (7:17)
Secure Credentials Storage (14:59)
Getting Signed-In Credentials (8:48)
IDs, Scopes and Endpoints (11:18)
Creating the AuthorizationCodeGrant (6:21)
Handling the Authorization Response (9:50)
Changing the Access Token Response Format To JSON (9:26)
Signing Out and Token Revocation (24:04)
Handling the Offline Sign Out Behavior (8:49)
DioError Extension (5:53)
Refresh Credentials Method (10:07)
Starting With the Auth Application Layer (8:57)
Writing the First AuthNotifier Method (6:41)
Creating an AuthUriCallback (14:49)
Orchestrating the Sign In Process (6:14)
Sign Out and Auth Application Layer Conclusion (3:53)
Auth Providers (12:08)
Setting Up Presentation Layer Pages (5:37)
Creating an AppWidget (6:32)
Setting Up AutoRoute (12:27)
Creating a Splash Page (9:53)
Initialization Provider (7:42)
Navigating Based On the AuthState (10:39)
Building the Sign-In Page UI (12:15)
Paving the Way for the Auth WebView (8:01)
Auth Callback Functions (9:41)
Creating a WebView (7:16)
Intercepting Redirection Attempts & Finishing the WebView (10:49)
Android-Specific WebView Setup (5:57)
Researching the GitHub API Endpoints (29:56)
Similarities Between Starred And Search Endpoints (6:47)
Creating the GitHub Feature Folder Structure (8:10)
GitHub Domain Entities (13:34)
GitHub Failure (2:18)
Starting With the Data Transfer Objects (6:39)
Using Json Serializable (10:40)
Converting Between DTOs and Entities (3:43)
GithubRepoDTO (9:50)
Converting the GithubRepoDTO Between Layers (3:30)
Explanation of ETags and General Caching (6:23)
First Draft of the StarredReposRemoteService Interface (3:24)
Creating a RemoteResponse Union (6:10)
Setting Up a SembastDatabase Class (20:43)
Registering a Sembast Provider (3:32)
Implementing the First Version of the GithubHeaders Data Class (9:48)
Parsing the Link Header for Pagination Purposes (28:21)
Caching the GitHub Headers (15:50)
Getting Starred Repos Page - Starting With the Implementation (22:15)
Getting Starred Response Page - Handling All RemoteResponse Cases (12:02)
Passing the Max Page Number in the RemoteResponse (15:54)
Indicating Freshness of the Data (13:41)
StarredReposRepository Implementation Part 1 - Using Only Remote Service (12:24)
StarredReposLocalService - Upserting a Page (15:30)
StarredReposLocalService - Reading a Page (15:03)
StarredReposRepository Implementation Part 2 - Local Service (7:11)
OAuth2Interceptor Part 1 (18:45)
OAuth2Interceptor Part 2 (12:43)
Providing the OAuth2Interceptor (13:53)
Creating a StarredReposState (21:46)
StarredReposNotifier - First Setup (6:24)
Finishing the StarredReposNotifier (13:17)
Providers for the Starred Repos Feature (9:14)
Initial Creation of the PaginatedReposListView (14:32)
Configuring the PaginatedReposListView (13:36)
Repo Tile Initial Creation and Fighting Fires (14:24)
Repo Tile Part 1 (9:03)
Fixing Dio's Wrong 304 Status Code Categorization (5:38)
Repo Tile Part 2 (9:02)
Loading Repo Tile - Shimmer Effect (11:18)
Loading Repo Tile - Layout (20:40)
Failure Repo Tile (25:23)
Adding Pagination Part 1 (8:52)
Adding Pagination Part 2 (14:48)
No Connection Toast (14:35)
No Results Display (11:16)
Using the Local Page Count In the No Connection State (8:41)
Searched Repos Feature Overview (11:12)
Removing Duplication - Repos Remote Service (13:05)
Creating Searched Repos Repository (10:48)
Removing Duplication - Paginated Repos Notifier (12:23)
Searched Repos Providers and Start of Dependency Generalization (8:52)
Finishing the Dependency Generalization (12:32)
Creating the Searched Repos Page (10:07)
Fixing the Old Data Issue With AutoDispose Provider (5:40)
Explanation of the Search Feature (7:41)
Watching Search Terms (12:59)
Adding Search Terms and Sorting (7:26)
Deleting and Putting Search Terms First (16:35)
Search History Application Layer (11:59)
Creating a SearchBar Widget and Search Feature Providers (13:24)
Adding Parameters to the Search Bar (10:37)
Building the Search Bar UI Part 1 (11:51)
Fixing the Failure Repo Tile (3:46)
Building the Search Bar UI Part 2 (10:43)
Search Bar Actions (7:08)
Minimum Viable Search Bar UI (12:21)
The onSubmitted Search Bar Callback (8:59)
Search Bar Dropdown Background (9:38)
Finishing Up the Search Bar (25:15)
Adding Search Bar to the Searched Repos Page (17:13)
Platform-Adaptive Search Bar Back Button (8:39)
Overview of the Repo Detail Feature (8:12)
Creating Repo Detail Entity and DTO (14:03)
Getting the Readme HTML (17:48)
Getting the Starred Status of a Repo (9:27)
Switching the Starred Status of a Repo (10:20)
Local Repo Detail Service Part 1 (22:09)
Local Repo Detail Service Part 2 - Last Used Timestamp (16:36)
Local Repo Detail Service Part 3 - Finishing Up the Caching Strategy (9:24)
Deleting the Repo Detail Headers (4:20)
Repo Detail Repository Part 1 (8:26)
Repo Detail Repository Part 2 (16:15)
Repo Detail State and Notifier (13:30)
Optimistic Updates in the Repo Detail Notifier (17:32)
Preparing the Repo Detail Page (18:55)
Changing the App Bar Color (5:12)
Providers for the Repo Detail Subfeature (4:46)
Repo Detail Page Part 1 (31:06)
Repo Detail Page Part 2 (18:34)
Opening Links in an External Browser (6:31)
Module Recap (5:18)
Internationalization
Initial Setup (12:54)
Writing Strings and Using Them Within the App (15:29)
Supporting Plural Strings (8:23)
Adding Another Language (9:51)
Native Plugin
Module Introduction and Setup (9:34)
The Need for Method Channels (8:20)
Exploring the Native Code and Writing Dart Code (13:33)
Enabling Code Completion for Writing Kotlin (13:03)
Creating an Android Notification Channel (19:28)
Showing a Notification on Android (12:23)
Using the Plugin From a Flutter App and Showcasing on Android (7:07)
Opening the iOS Plugin Project in XCode (6:59)
Showing a Notification on iOS (22:50)
Next lessons coming very soon
All About Tests
This module will be uploaded in the future
BONUS: Migrating the Repo Viewer App To Web
This module will be uploaded in the future
Dart Module Introduction
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock