The Complete Mobile App Development Course with Flutter

Discover how to use Flutter, the popular open-source framework created by Google for developing Android and iOS apps. This course will show you how to build a complete Contacts App from scratch, and how to make the most of this high-performance, intuitive framework.

The app will feature editable fields for each contact’s name, email address, and phone number; customizable profile pictures; and native integration (such as writing emails and calling a contact from the app).

This course will cover:

  • How to write clean code
  • Setting up the UI
  • Working with widgets
  • Incorporating UI animations
  • Persistent storage
  • Using plugins for native functionality

…and more!

Course Requirements
Install Flutter on Windows
Install Flutter on MacOS
Setup Android SDK
Setup Android Emulator
Install VS Code
Set up VS Code Flutter Plugins
Creating a Flutter Project
Exploring the Project Structure
Running the Default Demo App
What is a Widget
Most Used Pre-built Widgets
Building a ContactsPage Widget
Displaying a Vertical List
Adding a ListView
Importing a 3rd Party Library
Using the Faker Library
Creating a Contact Model Class
Creating a List of Contacts
Displaying Contacts in a ListView
Converting ContactsPage to a StatefulWidget
Populating the Contacts to initState
Adding isFavorite to Contact Class
Finishing isFavorite UI
Setting State
Sorting Contacts Based on isFavorite
Creating a Custom Widget
State Management – Lifting State up and Callbacks
State Management – Adding a ScopedModel
Moving Functionality to ContactsModel
Using a Scoped Model
Accessing the Model through ScopedModelDescendant
Notifying Listeners of ScopedModel
Another Way of Accessing the Model
Sorting the Contacts Alphabetically
Adding a ContactCreate Page
Creating an Input Form
Reason for Using Keys for Widgets
Getting Data out of the Form with a Key
Styling an Input Form
Validating the name field
Regular Expressions to Validate the Email
Validating the Phone Number
Adding New Contacts to the ContactsModel
Implementing the Saving of the Form
Adding a Floating Action Button
Navigating using MaterialPageRoute
Creating ContactEditPage
Passing Edited Data to the ContactForm
Navigating to ContactEditPage
Pre-populating ContactForm with Data
Editing a Contact in the ContactModel
Preserving isFavorite Value after Editing
Adding Null Safe Access Elvis Operators
Making List Items Slidable
Fixing Slidable UI with a Container
Creating a Helper Build Function
Deleting a Contact from the ContactModel
Adding Default Images for Contacts
Displaying a default image in ContactEditPage
Getting Device Dimensions with MediaQuery
Fixing ContactCreatePage’s Contact Image
Making a Hero Animation
Setting up the image_picker Library
Configuring Image Picker on iOS
Using the image_picker Library
Picking an Image from the Device
Displaying the Picked Image in ContactForm
Displaying Images while Creating a Contact
Adding an Image Field to the Contact Class
Displaying the Contact’s Image in ContactTile
Pre-populating an Edited Image in ContactEditPage
SEMBAST and Other Packages for Data Persistence
Converting Contact Objects to Map
Converting Map Objects to Contacts
Opening a SEMBAST Database
Writing Asynchronous Code with Completer
Preparing for the Singleton Pattern
Making AppDatabase into a Singleton
Understanding How SEMBAST Stores Data
Creating a Data Access Object for Contacts
Adding ID Field to Contact Class
Preserving the ID while Editing
Updating and Deleting Contacts with SEMBAST
Getting All Contacts in Sorted Order – Part 1
Getting All Contacts in Sorted Order – Part 2
Adding ContactDao to ContactsModel
Loading Contacts from ContactDao in ContactsModel
Modifying ContactsModel to Work with ContactDao
Fixing Newly Broken Code
Testing Persistent Storage Functionality
Displaying a Loading Indicator
Adding Back the Favoriting of Contacts
Making Contacts Sortable based on isFavorite
Adding UI for Contacting the Contacts
Using url_launcher to Call a Contact
Writing an Email to a Contact
Adding Padding to the ContactForm
Course conclusion

No prior experience with Dart or mobile development is required for this course. However, familiarity with basic programming concepts (such as variables, objects, conditionals and so on) is assumed.

Tools and Frameworks

Dart, Android SDK 8.0 and 9.0, Flutter SDK 1.2.1

Buy Now For $50

OR access ALL Zenva courses with our subscription.

  • Access all 250+ courses
  • New courses added monthly
  • Cancel anytime
  • Certificates of completion


New members: get 7 days of full access for freeClaim Offer
Don't miss out! Offer ends in