Skip to main content
CF

Build a Yelp! Clone for Restaurants with Flutter and Dart

13h 15m 53s
English
Paid

Build a comprehensive Flutter app for mobile (iOS & Android) and web that allows users to write reviews, ratings, photos, locations, and syncs via the Cloud.

This isn't just any Flutter practice project...it's a true portfolio project that allows you to dive deep and practice your Flutter and Dart skills while building a beautiful, enterprise-level app that will be the highlight of your portfolio!

Additional

https://github.com/JediPixels/keiko_food_reviews

About the Author: Zero To Mastery

Zero To Mastery thumbnail

Zero To Mastery (ZTM) is a Toronto-based online coding academy founded by Andrei Neagoie, originally a senior developer at large Canadian tech firms before turning to teaching full-time. The academy's signature is the cohort-based bootcamp track combined with a deep self-paced course library, all aimed at career-changers and self-taught developers preparing to land software-engineering roles at top companies.

The instructor roster has grown well beyond Andrei to include other senior practitioners: Daniel Bourke (machine learning), Aleksa Tešić (DevOps), Jacinto Wong, and others. Courses cover the full software-engineering career path: web development with React and Next.js, Python, machine learning and deep learning, DevOps and cloud, system design, mobile, and the algorithm / data-structure interview prep that gates engineering jobs.

The CourseFlix listing under this source carries over 120 ZTM courses spanning that full range. Material is paid; ZTM itself runs on a monthly / annual membership model. The teaching style favours long-form, project-based courses where students build complete portfolio-quality applications rather than disconnected feature tutorials.

Watch Online 186 lessons

This is a demo lesson (10:00 remaining)

You can watch up to 10 minutes for free. Subscribe to unlock all 186 lessons in this course and access 10,000+ hours of premium content across all courses.

View Pricing
0:00
/
#1: Project Demo
All Course Lessons (186)
#Lesson TitleDurationAccess
1
Project Demo Demo
04:15
2
Create Project
04:26
3
Integrating Version Control with Github
03:14
4
App Foundation
05:59
5
Base Folder Structure
02:49
6
Dark & Light Themes
07:42
7
Run Themes Changes
03:22
8
Introduction to Base Page Structure, Responsive Layout Builder and Navigation
01:07
9
Constants
04:41
10
Page Stubs Base Navigation
04:58
11
Responsive Layout Builder
04:15
12
Home Responsive Layout Builder - Mobile
05:47
13
Home Responsive Layout Builder - Web Desktop Tablet
07:54
14
Image Assets
04:31
15
Page Stubs Authentication - Review Entry Photo
07:40
16
Routes Class
06:35
17
Custom Clipper - Intro
01:27
18
Custom Clipper - Class
04:33
19
Reviews List AppBar with Custom Clipper
04:58
20
Different Ways to Add Packages
02:52
21
Add Packages Dependencies (Camera, Photo Album, Location, Reverse Geocoding, etc.)
06:12
22
iOS Info.plist - Image Picker Location Permissions
01:49
23
Android Manifest Location Permissions
02:15
24
Enable CORS
02:43
25
Different Ways to Create Firebase Project
03:47
26
Install Firebase CLI and FlutterFire CLI
05:48
27
Create New Firebase Project with FlutterFire CLI
05:14
28
Initialize Firebase
02:21
29
Android SDK Version
02:05
30
Enabling Authentication - Sign In Providers
01:31
31
Reviewing Authentication - Email Templates
00:57
32
Create Authentication Service - CreateUser
06:43
33
Create Authentication Service - Sign In & Out, Password Reset, Email Vertification
06:30
34
Authentication Business Logic - Part 1 (Validators, Error Handling)
06:13
35
Authentication Business Logic - Part 2 (Private Variables)
07:58
36
Authentication Business Logic - Part 3 (Check Register Email)
05:51
37
Authentication Business Logic - Part 4 (Create Login Logic)
02:06
38
Authentication Business Logic - Part 5 (Create User Model Calls, New User Default Values)
04:35
39
Authentication Business Logic - Part 6 (Create Database Service)
05:49
40
Authentication Business Logic - Part 7 (Get and Update User)
06:32
41
Authentication Business Logic - Part 8 (Adding Register Logic)
05:26
42
Creating Authentication State
05:56
43
Introduction & Explanations
01:31
44
Introduction
00:53
45
Base Layout
06:50
46
Base Layout - Image, Body Structure and Email
07:10
47
Base Layout - Password and Confirm
07:00
48
Base Layout - Register Button
04:37
49
Base Layout - Register Error Message
03:29
50
Base Layout - Login Button and Navigation
04:07
51
Introduction
00:53
52
Base Layout
05:17
53
Base Layout - Email
05:55
54
Base Layout - Password
05:13
55
Base Layout - Login Button
02:51
56
Base Layout - Login Error Message
03:48
57
Base Layout - Forgot Password and Create User Buttons
05:26
58
Base Layout
04:57
59
Base Layout - Image, Body Structure and Email
04:43
60
Base Layout - Reset Password Button
03:55
61
Base Layout - Login Button
03:33
62
Introduction
01:19
63
Implementing the Build Material App
05:41
64
Implementing the Authentication State and Named Routes Navigation
07:23
65
Enabling Security Rules
03:08
66
Storage Service - Upload Photo
09:11
67
Storage Service - Delete Photo
04:19
68
Introduction
01:01
69
Creating Review Model
02:13
70
Creating Review Model - Optionals
02:27
71
Creating Review Model - Equality Operator
06:00
72
Creating Review Model - Add New Review with Default Values
04:01
73
Create Firestore Database and Enable Security Rules
04:13
74
Database Service - Add Review
06:54
75
Database Service - Update Review - Handle Photo
07:22
76
Database Service - Update Review - Handle Save to Firestore
02:09
77
Database Service - Delete Review
02:30
78
Database Service - Get Review List
06:23
79
Database Service - Get Review List with Photos
07:39
80
Introduction
01:00
81
Get API Key
02:34
82
Get Permission and Location
08:54
83
Get Reverse Geocoding
04:45
84
Introduction
02:20
85
App Helpers - Arguments
03:23
86
App Helpers - Dialogs
05:06
87
App Helpers - Format Dates
03:01
88
Reusable Widgets - Image Circle Shadow
03:07
89
Reusable Widgets - Image and Message
04:57
90
Reusable Widgets - Muted Text
02:28
91
Reusable Widgets - Star Rating - Variables
03:26
92
Reusable Widgets - Star Rating - Rating
02:53
93
Reusable Widgets - Star Rating - Gesture Detector
06:15
94
Introduction
01:04
95
Review List Logic
05:05
96
Modifying Themes - Custom Error Color
01:21
97
Review List Body Card - Base Layout and Dismissible
06:58
98
Review List Body Card - Card, InkWell, Navigation and Hero
03:38
99
Review List Body Card - Hero, Aspect Ratio and Image Network
04:20
100
Review List Body Card - Cached Network Image
03:35
101
Review List Body Card - ListTile Title Star Rating
04:01
102
Review List Body Card - ListTile Subtitle
07:10
103
Review List Body - Base Layout, Image and Message
04:24
104
Review List Body - Sliver Grid or Sliver List
05:09
105
Review List - Initialize Logic and Stream
02:56
106
Review List - Refactor Logic
02:50
107
Review List - App Bar, Menu Actions
06:29
108
Review List - Safe Area and Stream Builder
07:29
109
Review List - Floating Action Button and Navigation
04:27
110
Review List - Cloud Firestore Index
02:18
111
Introduction
00:44
112
Base Layout and Navigation Arguments
03:28
113
Hero and Image Network Widget
03:17
114
Cached Network Image
02:53
115
Introduction
01:46
116
Base Layout
04:58
117
InkWell, Hero and Image Network
04:59
118
Cached Network Image
02:38
119
ListTile - Title and Star Rating
04:13
120
ListTile - Subtitle Property - Column and Review Details
03:20
121
ListTile - Subtitle Property - Location Placemark in a Wrap Widget
01:33
122
ListTile - Subtitle Property - Map with FlutterMap
07:35
123
Create Review Entry Edit Logic
06:04
124
Set Location and Address - Web
03:36
125
Set Location and Address - Mobile
03:18
126
Get Location, Current Position, and Replace Location
05:55
127
Check if Data Changed and Save Review
06:31
128
Delete Location
05:53
129
Cancel Editing Review and Delete Review
06:16
130
Select Date and Pick Image
07:49
131
Introduction
02:23
132
App Bar Widget - Base Layout
04:51
133
App Bar Widget - Title and Leading Properties
04:54
134
App Bar Widget - Actions
04:57
135
Photo Widget - Base Layout
04:08
136
Photo Widget - Image File and Image Network
04:48
137
Photo Widget - Cached Network Image
02:44
138
Photo Widget - Take Photo
05:49
139
Photo Widget - Pick Photo
05:36
140
Photo Widget - Take or Pick Photo Logic
06:56
141
Date Picker Widget - Base Layout
03:17
142
Date Picker Widget - Custom Button
05:57
143
Affordability Widget - Base Layout
03:59
144
Affordability Widget - Star Rating
03:45
145
Affordability Widget - Affordability Segmented Button
07:18
146
Text Fields Widget - Base Layout
03:51
147
Text Fields Widget - Restaurant and Title
03:19
148
Text Fields Widget - Category and Review
02:52
149
Placemark and Map Widget - Base Layout
04:32
150
Placemark and Map Widget - Position Value Listenable Builder
03:02
151
Placemark and Map Widget - Location Placemark
02:17
152
Placemark and Map Widget - Map
06:58
153
Placemark and Map Widget - Progress Indicator
03:08
154
Placemark and Map Widget - Replace Location Button
05:58
155
Placemark and Map Widget - Delete Location Button
02:37
156
Introduction
01:14
157
Base Layout
04:43
158
Navigation Arguments and Edit Logic
07:44
159
ValueNotifier Class
06:21
160
Dispose Method
02:12
161
WillPopScope Widget
02:31
162
App Bar Widget - Layout Body Property
01:41
163
Photo Widget and Date Picker Widget
03:03
164
Rating Widget and Affordability Widget
02:04
165
Placemark Map Widget
02:32
166
Adding New Review
04:09
167
Introduction
01:24
168
Grid Logic
03:24
169
Base Layout
02:43
170
StreamBuilder
05:53
171
GridView Builder
03:48
172
InkWell
02:32
173
Image Network
02:59
174
Cached Network Image
02:33
175
Title Bar Gradient
05:53
176
Cloud Firestore Index
02:31
177
Introduction
01:10
178
Locations Logic
03:20
179
Review Map Locations Body Widget
08:43
180
Base Layout
02:19
181
StreamBuilder, Update Packages, and Pubspec.yaml File
08:33
182
Refactoring, AnimatedBuilder to ListenableBuilder
02:22
183
Sound Null Safety
03:02
184
Dart Analysis
03:18
185
Mission Accomplished!
03:31
186
Top Widgets, Features, Techniques
06:09
Unlock unlimited learning

Get instant access to all 185 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.

Learn more about subscription

Related courses

Frequently asked questions

What are the prerequisites for enrolling in this course?
Before enrolling, students should have a basic understanding of programming concepts and some familiarity with Dart and Flutter. The course covers the creation of a Yelp! clone for restaurants, which involves integrating version control with GitHub and working with Firebase for authentication and data management.
What will I build by the end of the course?
Students will build a comprehensive Flutter application that functions as a Yelp! clone for restaurants. The app allows users to write reviews, rate restaurants, upload photos, and use location services. It will be functional on both mobile (iOS and Android) and web platforms, with data synchronization via the Cloud.
Who is the intended audience for this course?
The course is designed for developers who are interested in building cross-platform applications using Flutter and Dart. It's suitable for those looking to enhance their skills with practical experience in building a full-featured app that includes authentication, photo handling, and location-based services.
How does this course differ from other Flutter courses?
This course focuses on building a specific, real-world application—a Yelp! clone—which covers a wide range of topics such as responsive layouts, theme management, Firebase integration, and authentication services. It is project-based, offering practical experience with tools like Firebase CLI and custom UI components.
What specific tools and platforms are used in the course?
Students will use Flutter and Dart to develop the app. The course integrates several packages for handling camera, photo albums, and location services. Firebase is used for authentication and cloud data management, with detailed setup using Firebase CLI and FlutterFire CLI. GitHub is used for version control.
What topics are not covered in this course?
The course does not cover advanced backend development beyond Firebase integration, nor does it delve into non-Flutter mobile development frameworks. It focuses on building a specific application and does not include generalized app design principles or other programming languages outside of Dart.
How much time should I expect to commit to completing the course?
With a total of 186 lessons, students should be prepared for a significant time commitment. The course is self-paced, but the comprehensive nature of the content, including setting up project foundations, working through authentication logic, and creating responsive layouts, suggests that a dedicated approach will be necessary to complete the project.