• Stars
    star
    815
  • Rank 55,957 (Top 2 %)
  • Language
    Dart
  • License
    MIT License
  • Created over 2 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Flutter Foundations Course - eCommerce App

Complete Flutter Course Bundle - eCommerce App

This is the official repo for this course:

This will include a full-stack eCommerce app using Flutter & Firebase:

eCommerce App Preview

A Flutter web preview of the app can be found here:

Project Setup

To clone the repo for the first time and open it in VSCode, run this:

git clone https://github.com/bizz84/complete-flutter-course.git
cd complete-flutter-course
code .

This will checkout the main branch which contains the latest code.

But at various points in the course, I'll ask you to checkout a specific branch name, so you can follow along with the right code, at the right time.

And to prevent any conflicts, you may need to reset your local changes:

git reset --hard HEAD
git checkout <branch-name>

Documentation & FAQ

This project includes a documentation website that can be found here:

Flutter Foundations - Course Syllabus

1. Intro & Project Overview

  1. What you will learn in this course
  2. Section overview
  3. VSCode Shortcuts, Extensions & Settings for Flutter development
  4. Join the Slack Channel
  5. Course Project on GitHub
  6. Download the Starter Project & pubspec.yaml overview
  7. eCommerce app overview
  8. Code walkthrough: project structure
  9. Exploring the codebase with the Widget Inspector (DevTools)
  10. UI Design Principles: Composition & Reusable Widget Classes
  11. Useful Widgets for Responsive Design
  12. App Localization

2. Navigation with GoRouter

  1. Section Intro
  2. Limitations of Navigator 1.0
  3. GoRouter installation & initial setup with MaterialApp.router
  4. Routes, sub-routes and navigation
  5. GoRouterHelper Extension and pageBuilder
  6. Adding some additional routes
  7. Routing by path vs routing by name
  8. Routing with parameters
  9. GoRouter error handling
  10. Navigating with go vs push
  11. Adding the remaining routes
  12. How to pop a route with GoRouter
  13. Nested Navigation
  14. Bug fix & wrap up

3. Flutter App Architecture

  1. Section Intro
  2. Popular App Architectures: MVC, MVP, MVVM, Clean Architecture, Bloc
  3. Riverpod App Architecture with the Controller-Service-Repository Pattern
  4. Project Structure: Feature-first vs Layer-first
  5. The Repository Pattern and the Data Layer
  6. Implementing the "fake" products repository as a singleton
  7. Working with Future and Stream-based APIs
  8. Wrap Up

4. State Management with Riverpod - Part 1 (Product Listings)

  1. Section Intro
  2. Introduction to Riverpod
  3. Riverpod installation and setup
  4. Creating our first provider
  5. Reading providers with ConsumerWidget and Consumer
  6. Working with FutureProvider, StreamProvider, and AsyncValue
  7. Testing AsyncValue by adding a delay
  8. The family modifier
  9. The autoDispose modifier + advanced data caching options
  10. Creating a reusable AsyncValueWidget helper
  11. Wrap Up + Exercise

5. State Management with Riverpod - Part 2 (Authentication Flow)

  1. Section intro
  2. Implementing a fake authentication repository
  3. Creating repositories using abstract classes (optional)
  4. Intro: a reactive in-memory store with RxDart
  5. Implementing the InMemoryStore with RxDart
  6. Using the InMemoryStore in the FakeAuthRepository
  7. Accessing the FakeAuthRepository with ref.read() in the AccountScreen
  8. Creating our first controller using StateNotifier
  9. Using the StateNotifier inside the AccountScreen widget
  10. Listening to provider state changes with ref.listen()
  11. Bug-fix for Navigator.pop
  12. The AsyncValue.guard method
  13. Adding an AsyncValue extension method
  14. Using the authStateChangesProvider in HomeAppBar
  15. Intro to the email & password sign-in screen
  16. How to generate immutable state classes in Dart
  17. Using AsyncValue inside EmailPasswordSignInState
  18. Implementing the EmailPasswordSignInController
  19. Using the EmailPasswordSignInController in the widget class
  20. Bug fix + filtering state updates with select()
  21. GoRouter redirects
  22. GoRouter: the refreshListenable argument
  23. Wrap Up

6. Automated Testing - Part 1

  1. Section Intro
  2. Introduction to Automated Testing and the Testing Pyramid
  3. Getting started with automated testing
  4. Writing the first unit test + adding toString() and equality implementations
  5. Test matchers and working with methods that throw exceptions
  6. Fixing the getProduct() method and updating the unit tests
  7. Working with groups and testing Futures and Streams
  8. Adding an optional delay to the FakeProductsRepository
  9. How to generate a Flutter test coverage report in VSCode
  10. Testing the FakeAuthRepository (part 1)
  11. Testing the FakeAuthRepository (part 2) + advanced stream matchers
  12. Mocks vs Fakes + installing the mocktail package
  13. Testing the AccountScreenController (part 1) + AsyncValue subclasses
  14. Testing the AccountScreenController (part 2) + working with mocks
  15. Testing the AccountScreenController (part 3) + type matchers
  16. Testing with Stream Matchers and Predicates
  17. Testing lifecycle methods (setUp, tearDown, setUpAll, tearDownAll)
  18. Testing the EmailPasswordSignInController with acceptance criteria
  19. Testing the EmailPasswordSignInController (part 2)
  20. Tip: setting custom test timeouts per-file
  21. Adding a test workflow to automate testing with GitHub Actions
  22. Wrap up

7. Automated Testing - Part 2

  1. Section Intro
  2. Introduction to widget tests + starter project
  3. Writing our first widget test using pumpWidget()
  4. Working with WidgetTester and finder
  5. Robot testing
  6. How to find widgets by key
  7. Writing widget tests with mocks and provider overrides
  8. Writing widget tests with Future.delayed() and runAsync()
  9. Adding the email & password widget tests
  10. Adding the email & password widget tests (part 2)
  11. Test setup for the authentication flow + using pumpAndSettle()
  12. Fixing the RenderFlex overflow error
  13. Completing the authentication flow test
  14. Integration tests
  15. Golden image tests
  16. Running golden image tests with size variants
  17. How to deal with holden image tests failing on CI
  18. Wrap Up

8. Feature: Shopping Cart

  1. Section Intro
  2. Overview of the shopping cart feature + technical requirements
  3. App Architecture for the shopping cart feature
  4. Starter project + overview of the data and domain layers
  5. Local data persistence with Sembast: Initial setup
  6. How to persist the shopping cart data with the SembastCartRepository
  7. Implementing the CartService class
  8. Updating the CartService class to read dependencies using Ref
  9. Writing unit tests using ProviderContainer
  10. Writing the unit tests for the CartService class
  11. Implementing the AddToCartController
  12. Updating the AddToCartWidget
  13. Bug Fix: Adding autoDispose to the AddToCartController
  14. Showing the cart items in the ShoppingCartScreen + AutoDispose vs AlwaysAlive error when combining providers
  15. Implementing the ShoppingCartItemController
  16. Updating the EditOrRemoveItemWidget and ShoppingCartScreen widgets
  17. Calculating and showing the cart items count
  18. Calculating and showing the cart total price
  19. Limiting the available quantity when adding items to the shopping cart
  20. Implementing the CartSyncService with a listener
  21. Registering the CartSyncService with ProviderContainer when the app starts
  22. Implementing the logic inside the CartSyncService
  23. Implementing the logic inside the CartSyncService (part 2 - optional)
  24. Unit tests for the CartSyncService
  25. Unit-testing providers with dependencies using ProviderContainer
  26. Updated widget and integration tests
  27. Wrap up + exercise (implement a wish list feature)

9. Feature: Checkout Flows

  1. Section intro
  2. Starter project for the checkout flows
  3. Updating the CheckoutScreen with the PageController initialization logic
  4. Do we need a StateNotifier for the CheckoutScreen?
  5. Updating the PaymentPage
  6. Implementing the PaymentButtonController
  7. Wrap Up

10. Error Handling

  1. Intro
  2. Errors vs exceptions
  3. Starter project overview + defining custom exceptions with enums
  4. Using sealed classes to define exception types
  5. Using the AppException sealed class in the FakeAuthRepository
  6. Adding an AsyncErrorLogger using ProviderObserver
  7. Creating a reusable ErrorLogger to catch all exceptions
  8. Completing the error handling system
  9. Working with the Result type (Success and Error)
  10. Drawbacks of the Result type (and when not to use it)
  11. Wrap Up

11. Feature: Product Reviews

  1. Section Intro
  2. Starter project overview
  3. Overview of the LeaveReviewScreen
  4. Implemeting a LeaveReviewController and submitting form data
  5. Testing the LeaveReviewForm and preventing an AssertionError
  6. Dismissing the LeaveReviewScreen programmatically on success using a callback
  7. How to prefill a form with data from a repository/backend
  8. Optimization: only submit the form if the data has changed
  9. Showing existing reviews in the ProductReviewsList
  10. Updating the LeaveReviewAction by reading read data from the userPurchaseProvider
  11. Calculating the average product ratings
  12. Updated tests & wrap up

12. Feature: Products Search

  1. Section Intro
  2. Client-side vs server-side search
  3. Adding a search method to the FakeProductsRepository
  4. Implementing client-side search with StateProvider and FutureProvider
  5. Riverpod caching with autoDispose, keepAlive() and Timer
  6. Debouncing and cancelling network requests

13. New Riverpod 2.x APIs & Riverpod Generator

  1. Introduction to Riverpod 2.x
  2. Starter project and updated code walkthrough
  3. Installing the Riverpod Generator package
  4. Generating providers with the @riverpod syntax
  5. Migrating some more providers to Riverpod Generator + the keepAlive syntax
  6. Migrating the AccountScreenController from StateNotifier to AsyncNotifier
  7. Converting the AccountScreenController to use Riverpod Generator
  8. How to check if an AsyncNotifier is mounted
  9. How to write unit tests for AsyncNotifier subclasses
  10. Wrap Up
  11. Conclusion & Next Steps

LICENSE: MIT

More Repositories

1

SwiftyStoreKit

Lightweight In App Purchases Swift framework for iOS 8.0+, tvOS 9.0+ and macOS 10.10+ β›Ί
Swift
6,552
star
2

flutter-tips-and-tricks

My Flutter Tips & Tricks on Twitter πŸ‘‡
Dart
2,040
star
3

starter_architecture_flutter_firebase

Time Tracking app with Flutter & Firebase
Dart
1,655
star
4

layout-demo-flutter

Super Useful Flutter Layouts - Right in Your Pocket. πŸ˜‰
Dart
1,381
star
5

flutter_example_apps

A directory of all my open source Flutter apps and projects.
753
star
6

firebase_auth_demo_flutter

Reference Authentication Flow with Flutter & Firebase
Dart
675
star
7

nested-navigation-demo-flutter

Nested navigation with BottomNavigationBar
Dart
620
star
8

movie_app_state_management_flutter

Flutter State Management: Movie App with Provider, Riverpod, flutter_bloc
Dart
557
star
9

time_tracker_flutter_course

Source code for every lesson in the "Flutter & Firebase: Build a Complete App for iOS & Android" course on Udemy
Dart
405
star
10

dart-course-materials

Code, Exercises & Syllabus for my Complete Dart Course
Dart
343
star
11

open_weather_example_flutter

Flutter Weather App Example using the OpenWeatherMap API
Dart
295
star
12

bottom_bar_fab_flutter

BottomAppBar Navigation with FAB
Dart
283
star
13

flutter_animations_course_materials

All projects from my Flutter Animations Course
Dart
248
star
14

tmdb_movie_app_riverpod

Flutter Movies app with Riverpod (TMDB API)
Dart
233
star
15

fluttercon_23_resources

List of talks from FlutterCon 23
219
star
16

MVCarouselCollectionView

UICollectionView-based image carousel written in Swift
Swift
205
star
17

Sustainable-Earth

A curated list of all things sustainable
Ruby
189
star
18

coding-with-flutter-login-demo

Source code for login demo in Coding with Flutter series
Dart
168
star
19

flutter_animations_gallery

A showcase of the most common Flutter animation APIs.
Dart
156
star
20

firebase_user_avatar_flutter

Advanced Provider Architecture Demo: Image Picker + Firebase Storage Upload
Dart
154
star
21

stopwatch-flutter

Simple stopwatch example app in Flutter
Dart
142
star
22

multiple-counters-flutter

Flutter State Management [ setState ❖ StreamBuilder ❖ scoped_model ❖ redux ]
Dart
132
star
23

ftcon24eu_talks

List of talks from FlutterCon 24 Europe
Dart
122
star
24

coronavirus_rest_api_flutter_course

Coronavirus REST API Flutter Course
Dart
120
star
25

codewithandrea_flutter_packages

A collection of packages created to increase code reuse across many of my Flutter projects.
Dart
119
star
26

slivers_demo_flutter

Example Layouts with Slivers in Flutter
Dart
111
star
27

nested_navigation_examples

Bottom Navigation Bar with Nested Routes: GoRouter vs Beamer
106
star
28

firebase-login-flutter

Sample login and registration app with Firebase built in Flutter.
Dart
106
star
29

MVSelectorScrollView

Simple scrollable horizontal control, alternative to UISegmentedControl
Objective-C
103
star
30

flutter-firebase-masterclass

Flutter & Firebase Masterclass
Dart
103
star
31

simple_auth_flutter_riverpod

Simple authentication flow using Flutter & Riverpod
Dart
99
star
32

code_with_andrea_flutter

Code With Andrea Home Page - Flutter Clone
Dart
76
star
33

AcceptanceMark

Tool for generating Acceptance Tests in Xcode, inspired by Fitnesse
Swift
65
star
34

flight_co2_calculator_flutter

Flutter package and sample app to calculate Flight CO2 emissions
Dart
58
star
35

page_flip_builder

Interactive Page Flip Flutter widget
Dart
49
star
36

CrackingTheCodingInterview

Solutions to exercises from the book "Cracking the Coding Interview"
Swift
49
star
37

image-picker-demo-flutter

Photos and Camera Image Picker built in Flutter
Dart
47
star
38

split_view_example_flutter

Flutter Split View and Drawer Navigation example
Dart
47
star
39

localization_riverpod_flutter

Simplified localization app template
Dart
47
star
40

MVHorizontalPicker

Simple scrollable horizontal control, alternative to UISegmentedControl
Swift
43
star
41

github_search_flutter_client_rxdart_example

Example GitHub Search app built in Flutter & RxDart
Dart
41
star
42

apple_sign_in_firebase_flutter

Demo app showing how to implement Apple Sign In with Firebase & Flutter
Dart
40
star
43

json_placeholder_flutter_example

Riverpod data caching and CRUD example with the JsonPlaceholder API
Dart
35
star
44

simple_auth_comparison_flutter

Flutter State Management Comparison: [ setState ❖ BLoC ❖ ValueNotifier ❖ Provider ]
Dart
35
star
45

fitness_tracker_flutter

Fitness Tracker - Flutter UI Demo
Dart
35
star
46

input_validation_demo_flutter

Flutter: Input Validation with RegExp
Dart
33
star
47

platform_aware_widgets_flutter

Example project showing how to create platform-aware widget classes in Flutter.
Dart
32
star
48

async_notifier_example_riverpod

AsyncNotifier example with Riverpod
C++
29
star
49

pushable_button

A 3D pushable button built in Flutter. Ideal for important CTAs in the app.
Dart
29
star
50

MVBouncyView

UIView category to add bouncing animations to your UIViews
Objective-C
28
star
51

restaurant_ratings_flutter_firebase

Restaurant In-App Rating Demo App with Flutter & Firebase
Dart
28
star
52

passwordless_sign_in_firebase_flutter

Passwordless sign-in with Flutter and Firebase
Dart
24
star
53

faker_app_flutter_firebase

Demo project for the first module of my Flutter & Firebase Masterclass
Dart
21
star
54

ncov2019-api-and-webclient

nCoV 2019 Backend REST API and Admin Web Client
Dart
21
star
55

MVScrollViewAutoLayout

Example iOS project showing how Auto-Layout can calculate the contentSize of a UIScrollView for you based on the constraints of the scroll view’s subviews.
Objective-C
20
star
56

MVMediaSlider

Custom media slider inspired by the Overcast App
Swift
18
star
57

force_update_helper

A package for showing a force update prompt that is controlled remotely.
Dart
18
star
58

bmi_calculator_app_flutter

Simple BMI Calculator Flutter App
Dart
16
star
59

flutter_ship_app

Companion app for the Flutter in Production course
JavaScript
16
star
60

rxdart_combine_latest_example_movie_app

Simple movie favourites app showcasing how to use combineLatest to combine data from two Firestore collections into one stream.
Dart
15
star
61

convert-srt-vtt

Bash script to convert closed captions from SRT to VTT format
Shell
15
star
62

redux-navigation-color-picker

Code for "Managing State in a React-Navigation App with Redux" tutorial
JavaScript
15
star
63

ResponsiveCollectionViews

Demo app showing how to make UICollectionViews responsive to trait collection changes
Swift
14
star
64

OAuthRequestBuilderSwift

OAuth Authentication with Custom Headers in Swift
Swift
13
star
65

firebase-example-flutter

Sample Firebase anonymous auth with Flutter
Dart
13
star
66

mood_tracker_flutter

Super easy mood tracking app to demonstrate use of the Firebase Local Emulator Suite
Dart
13
star
67

game_of_life_flutter

Game Of Life Flutter Demo
Dart
12
star
68

flutter_simple_permissions

Swift
12
star
69

dart_json_parsing_examples

JSON Parsing examples in Dart
Dart
11
star
70

flutter_web_apps_template

Flutter Web + GitHub Pages templates
Makefile
11
star
71

SudokuSolver

JSON Android Sudoku Solver
Java
10
star
72

contacts_list_demo_flutter

Sample contact list page built in Flutter and iOS
Swift
10
star
73

MVFeedbackBanner

Customisable banner UI to ask for user feedback / app rating
Swift
9
star
74

ITunesSearch.js

Javascript client for App Store Lookup based on iTunes Search API
JavaScript
7
star
75

coding-with-flutter-robohash-demo

Sample Flutter app showing an avatar image with the RoboHash API.
Dart
7
star
76

openai_dart_shelf_flutter

OpenAI + Dart Shelf + Flutter Demo
C++
7
star
77

flutter_firestore_counter_app

Dart
6
star
78

multiple_counters_firestore_flutter

Multiple Counters Flutter App with Cloud Firestore
Dart
6
star
79

simple_auth_flutter_firebase_ui

Minimal authentication flow with Flutter & Firebase Auth
C++
5
star
80

faker_app_firebase

Simple Flutter app showing how to use the Firebase UI packages
C++
5
star
81

image_upload_flutter_firebase

Flutter image upload demo with Firebase Storage
C++
5
star
82

flutter-firebase-ecommerce-docs

4
star
83

ncov_2019_app_flutter

Coronavirus REST API Flutter Course (demo app before recordings)
Dart
4
star
84

OGLESCubeTestAPI

Android Test for ES API 1.0 and 2.0
Java
3
star
85

required_version_shelf

A simple server-side Dart implementing a required_version endpoint.
Dart
3
star
86

MVKerningLabel

UILabel subclass with kerning support via @IBInspectable property
Swift
2
star
87

MVCoreDataStack

Core Data Parent-Child Stack for iOS 8 and 9
Swift
2
star
88

dart-null-safety-package-name-issue

Null Safety only works if package name is `test`
Dart
2
star
89

firebase_id_token_bug

Ruby
2
star
90

redux-navigator-react

Example app combining redux with react-navigation
JavaScript
2
star
91

SwiftyStoreDemo

Example app for iOS, tvOS showing how to retrieve products info with StoreKit
Swift
2
star
92

astro-vercel-serverless-bug

Astro
1
star
93

Xcode-xcarchive-command

Xcode xcarchive command to archive to custom location
Shell
1
star
94

PopSpringViews

Helper classes to enable Facebook POP spring animations on UIViews
Swift
1
star
95

firebase_ui_auth_widget_tests_bug

C++
1
star
96

biz-engine

OpenGL 2.0 Graphics engine + SDK
C++
1
star
97

ff3_whitelabel_app

Dart
1
star
98

MVITunesSearch

Simple wrapper library for the iTunes Search API to search for apps by developer ID
Objective-C
1
star