Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 1 | Introduction | 4hr | Lecture |
What is Flutter? | Lecture | ||
Understanding the Flutter Architecture | Lecture | ||
How Flutter & Dart Code Gets Compiled to Native Apps |
Lecture | ||
Understanding Flutter Versions | Lecture | ||
Flutter macOS Setup | Lecture and Lab Exercise | ||
macOS Development Environment | Lecture and Lab Exercise | ||
Day 2 | Flutter Windows Setup | 4hr | Lecture and Lab Exercise |
Windows Development Environment | Lecture and Lab Exercise | ||
Flutter & Material Design | Lecture and Lab Exercise | ||
Flutter Alternatives | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 3 | Introduction | 4hr | Lecture |
Widget Tree & Element Tree - What, Why and How? |
Lecture and Lab Exercise | ||
How Flutter Rebuilds & Repaints the Screen |
Lecture and Lab Exercise | ||
How Flutter Executes build() | Lecture and Lab Exercise | ||
Day 4 | Widget and their role in a flutter app | 4hr | Lecture and Lab Exercise |
The Material App and Scaffold widget | Lecture and Lab Exercise | ||
AppBar | Lecture and Lab Exercise | ||
Day 5 | Uses of Buttons | 4hr | Lecture and Lab Exercise |
More widget – Text styling and decoration |
Lecture and Lab Exercise | ||
Animations | Lecture and Lab Exercise | ||
Day 6 | Advanced UI -slivers, gestures, splash screen |
4hr | Lecture and Lab Exercise |
Hot reload and Hot restart,
the tricks of the trade |
Lecture and Lab Exercise | ||
Recreating the default flutter app (UI only) |
Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 7 | Introduction | 4hr | Lecture |
Running the App on a Real Android Device |
Lecture and Lab Exercise | ||
Running the App on a Real Android Emulator |
Lecture and Lab Exercise | ||
Running the App on a Real iOS Device |
Lecture and Lab Exercise | ||
Running the App on a Real iOS Emulator |
Lecture and Lab Exercise | ||
Day 8 | Working with the Emulators / Using the Emulators |
4hr | Lecture and Lab Exercise |
Understanding Error Messages & Fixing Errors |
Lecture and Lab Exercise | ||
Using the Debugger | Lecture and Lab Exercise | ||
Getting Started with the Dart DevTools | Lecture and Lab Exercise | ||
Understanding the Repaint Rainbow | Lecture and Lab Exercise | ||
Wrapping up the Dart DevTools | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 9 | Containers and their role | 4hr | Lecture and Lab Exercise |
Importing images from network and assets |
Lecture and Lab Exercise | ||
Adding icons to widgets | Lecture and Lab Exercise | ||
Day 10 | Understanding Row and Column | 4hr | Lecture and Lab Exercise |
ListView and ListTile | Lecture and Lab Exercise | ||
Day 11 | Building views using ListView.builder | 4hr | Lecture and Lab Exercise |
Inkwell and its importance | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 12 | Stateless vs Stateful widgets | 4hr | Lecture and Lab Exercise |
Day 13 | Define a ‘State’ | 4hr | Lecture and Lab Exercise |
Day 14 | The setState Method | 4hr | Lecture and Lab Exercise |
Day 15 | Returning to the default flutter app | 4hr | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 16 | Navigators and routes | 4hr | Lecture and Lab Exercise |
Day 17 | Applying push() and pop()
using MaterialPageRoute |
4hr | Lecture and Lab Exercise |
Day 18 | Declaring parameter-less
routes (pushNamed()) in MaterialApp widget | 4hr | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 19 | Using TestField | 4hr | Lecture and Lab Exercise |
Day 20 | Handling changes to a TextField | 4hr | Lecture and Lab Exercise |
Day 21 | Pass retrieved values
using Navigator |
4hr | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 22 | Applying ThemeData | 4hr | Lecture and Lab Exercise |
Day 23 | The Basic Screen layout
and Applying custom Font |
4hr | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 24 | Introduction | 4hr | Lecture |
What does "Responsive"
and "Adaptive" Mean? |
Lecture | ||
Calculating Sizes Dynamically | Lecture and Lab Exercise | ||
Day 25 | Responsiveness | 4hr | Lecture and Lab Exercise |
Controlling the Device Orientation | Lecture and Lab Exercise | ||
Rendering Alternative
Landscape Content |
Lecture and Lab Exercise | ||
Finishing Landscape Mode | Lecture and Lab Exercise | ||
Day 26 | Showing Different Content Based on Device Orientation |
4hr | Lecture and Lab Exercise |
Respecting Softkeyboard, device size, MediaQuery Device Platform, OS etc. |
Lecture and Lab Exercise | ||
Creating Custom
Adaptive Widgets |
Lecture and Lab Exercise | ||
Adaptive Widgets | Lecture and Lab Exercise | ||
Wrap up | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 27-28 | The ‘Future’ function | 6hr | Lecture and Lab Exercise |
Day 28-29 | ‘async’ and ‘await’ | 6hr | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 30 | The ‘http’ packages | 4hr | Lecture and Lab Exercise |
Day 31 | Model Class and JSON parsing | 4hr | Lecture and Lab Exercise |
Day 32 | Displaying remote Data (News API) | 4hr | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 33-34 | The ‘url_launcher’ package | 6hr | Lecture and Lab Exercise |
Day 34-35 | Adding onTap() to NEWS API | 6hr | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 36 | GridView | 4hr | Lecture and Lab Exercise |
The’HERO’ Animation | Lecture and Lab Exercise | ||
Day 37 | Stack | 4hr | Lecture and Lab Exercise |
‘AlertDialoug’ with buttons | Lecture and Lab Exercise |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 38 | Introduction | 4hr | Practical |
Planning the App | Practical | ||
Defining a Data Model | Practical | ||
Working on the "Products"
Grid & Item Widgets |
Practical | ||
Styling & Theming the App | Practical | ||
Adding Navigation to the App | Practical | ||
Why State Management?
And what is "State" and "State Management"? |
Practical | ||
Understanding the "Provider"
Package & Approach |
Practical | ||
Day 39 | Working with Providers & Listeners | 4hr | Practical |
Inheritance ("extends")
vs Mixins ("with") |
Practical | ||
Providing non-Objects | Practical | ||
Listening in Different Places & Ways | Practical | ||
Using Nested Models & Providers | Practical | ||
Exploring Alternative Provider Syntaxes |
Practical | ||
Using "Consumer" instead
of "Provider.of" |
Practical | ||
Local State vs App-wide State | Practical | ||
Day 40 | Adding Shopping Cart Data | 4hr | Practical |
Working with Multiple Providers | Practical | ||
Connecting the Cart Provider | Practical | ||
Working on the Shopping
Cart & Displaying a Total |
Practical | ||
Displaying a List of Cart Items | Practical | ||
Making Cart Items Dismissible | Practical | ||
Adding Product Detail Data | Practical | ||
Providing an Orders Object | Practical | ||
Adding Orders | Practical | ||
Adding an Orders Screen | Practical | ||
Using a Side Drawer | Practical | ||
Making Orders Expandable
& Stateful Widgets vs Providers |
Practical | ||
Wrap Up | Practical |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 41 | Introduction | 4hr | Practical |
Snackbars & Undoing
"Add to Cart" Actions |
Practical | ||
Showing Alert Dialogs | Practical | ||
Adding a "Manage Products" Page | Practical | ||
"Edit Product" Screen
& A Problem |
Practical | ||
Using Forms & Working
with Form Inputs |
Practical | ||
ListView or Column | Practical | ||
Managing Form Input Focus | Practical | ||
Day 42 | Multiline Inputs
& Disposing Objects |
4hr | Practical |
Image Input & Image Preview | Practical | ||
Submitting Forms | Practical | ||
Validating User Input | Practical | ||
Adding Validation to All Inputs | Practical | ||
Saving New Products | Practical | ||
Time to Update Products! | Practical | ||
Allowing Users to
Delete Products |
Practical | ||
Wrap Up | Practical |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 43 | Introduction | 4hr | Practical |
On-Device vs Web Storage | Practical | ||
How to Connect Flutter to a Database | Practical | ||
Preparing Our Backend | Practical | ||
How To Send Http Requests | Practical | ||
Sending POST Requests | Practical | ||
Working with Futures in Dart | Practical | ||
Futures & Async Code | Practical | ||
Http Requests & Futures | Practical | ||
Showing a Loading Indicator | Practical | ||
Handling Errors Gracefully | Practical | ||
Day 44 | Working with "async" & "await" | 4hr | Practical |
Fetching Data, initState
& "of(context)" |
Practical | ||
How to Transform Fetched Data | Practical | ||
Implementing Pull-to-Refresh | Practical | ||
Updating Data via PATCH Requests | Practical | ||
Utilizing Optimistic Updating | Practical | ||
Day 45 | Creating Custom Exceptions
& More Error Handling |
4hr | Practical |
Updating the "Favorite"
Status Optimistically |
Practical | ||
Storing Orders in the Web
Fetching Orders & Fixing an Issue |
Practical | ||
Using the "FutureBuilder"
Widget & Improving the Code |
Practical | ||
Wrap Up | Practical |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 46 | Introduction | 4hr | Practical |
How Authentication Works | Practical | ||
Prepare Backend | Practical | ||
Adding the Auth Screend | Practical | ||
Adding User Signup | Practical | ||
Allowing Users to Log In | Practical | ||
Handling Authentication Errors | Practical | ||
Managing the Auth Token
Locally (in the App) |
Practical | ||
Day 47 | Using the "ProxyProvider" and
Attaching the Token to Outgoing Http Requests |
4hr | Practical |
Adding the Token to All Requests | Practical | ||
Connecting the "Favorite"
Status to Users |
Practical | ||
Attaching Products to Users
& Filtering By Creatorsh |
Practical | ||
Attaching Orders to Users | Practical | ||
Adding a Logout Functionality | Practical | ||
Automatically Logging Users Out
(After Some Time) |
Practical | ||
Automatically Logging Users In | Practical | ||
Wrap Up | Practical |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 48 | Introduction | 4hr | Practical |
Animations From Scratch
(Completely Manually Controlled) |
Practical | ||
Using the "AnimatedBuilder" Widget | Practical | ||
Working with the "AnimatedContainer" | Practical | ||
More Built-in Animation
& Transition Widgets |
Practical | ||
Day 49 | Fading Loaded Images In
(And Showing a Placeholder) |
4hr | Practical |
Adding a "Hero" Transition | Practical | ||
Working with Slivers | Practical | ||
Animating Order Boxes | Practical | ||
Implementing Custom Route Transitions | Practical | ||
Wrap Up | Practical |
Day | Topic | Class Duration | Teaching Method |
---|---|---|---|
Day 50 | Android app publishing mechanism | 4hr | Lecture and Lab Exercise |
iOS app publishing mechanism | Lecture and Lab Exercise |