Video description
What makes Flutter the best framework to build mobile apps? With Flutter, you can build mobile apps without learning Android, Java, iOS, or Swift.
In this updated video course on Flutter, you will learn all the basic and advanced concepts needed to build amazing iOS and Android apps.
The course starts with an introduction to Flutter, guiding you through the installation process of Flutter on Windows and Mac. Once you are ready with the setup, you will build real-time mobile apps such as the Quiz app and Personal Expenses app to understand Flutter basics, the UI, widgets, styling, logic, navigation, state management, and more.
You will also find out effective techniques to run the app on different devices such as Android, iOS, and emulators. After you have completed the basics, you will learn advanced topics such as Firebase, image picker, and push notifications by building a chat app. Toward the end, you will discover how to run Native Swift, Objective-C, Java, or Kotlin code, and find methods to publish your apps on app stores.
By the end of this course, you will have the skills you need to build native mobile apps for iOS and Android.
What You Will Learn
- Understand Flutter, Dart, and the concept behind widgets
- Build engaging native mobile apps for both Android and iOS
- Connect your Flutter app to back-end servers by sending HTTP requests
- Use native device features such as the camera and Google Maps
- Handle manual and automated push notifications
- Publish your app on iStore and Play Store
Audience
This course is for beginners and experienced developers who are interested in delving into mobile app development using one language for both platforms. It is also ideal for experienced iOS or Android developers who want to build cross-platform (iOS and Android) apps with one single programming language. No prior knowledge of Flutter or Dart and experience of Android or iOS development is required to get started with this course.
About The Author
Academind by Maximilian Schwarzmüller:
Academind GmbH
Bundling the courses and the knowledge of successful instructors, Academind strives to deliver high-quality online education. The platform covers topics such as web development, data analysis, and more in a fun and engaging way.
Maximilian Schwarzmüller
Since the age of 13, he has never stopped learning new programming skills and languages. In his early days, he started creating websites simply for fun. This passion has remained and shaped his decision to work as a freelance web developer and consultant. Although he started web development on the backend (PHP with Laravel and NodeJS), he has progressed to becoming a front-end developer using modern frameworks such as React, Angular, and VueJS 2 in many projects.
The most rewarding experience for him is to see how people find new and better jobs, build exciting web applications, acquire amazing projects, or simply enjoy their hobby with the help of his content.
Table of contents
-
Chapter 1 : Introduction
- Introduction
- What Is Flutter?
- Understanding the Flutter Architecture
- How Flutter and Dart Codes Get Compiled to Native Apps
- Understanding Flutter Versions
- Flutter macOS Setup
- macOS Development Environment
- Flutter Windows Setup
- Windows Development Environment
- Flutter and Material Design
- Flutter Alternatives
- Course Outline
- How to Get the Most Out of the Course?
-
Chapter 2 : Flutter Basics (Quiz App)
- Module Introduction
- Creating a New Project
- Important - Adjusting the Starting Project
- An Overview of the Generated Files and Folders
- Analyzing the Default App
- Dart Basics
- More Dart Basics
- Building an App from Scratch
- Running the App on an Emulator
- Class Constructors and Named Arguments
- First Summary and Additional Syntax
- Building a Widget Tree
- Visible (Input/Output) and Invisible (Layout/Control) Widgets
- Adding Layout Widgets
- Connecting Functions and Buttons
- Anonymous Functions
- Updating Widget Data (Or Using StatelessWidget Incorrectly)
- Updating Correctly with StatefulWidget
- A Brief Look at What Flutter Actually Does
- Using Private Properties
- Creating a New Custom Widget
- First Styling and Layout Steps
- Enums and Multiple Constructors
- Official Docs and the Widget Catalogue
- Passing the Callback Functions Around
- Introducing Maps
- Mapping Lists to Widgets
- Final Versus Const
- Introducing "if" Statements
- (Dart Deep Dive) More on "if" Statements
- (Dart Deep Dive) The "null" Value and Null Safety
- Outputting Widgets Conditionally
- Splitting the App into Widgets
- Calculating the Total Score
- Getters and "else-if"
- Resetting the Quiz
- "New" Flutter Buttons Versus "Old" Buttons
- Assignment - Basics (Problem)
- Assignment - Basics (Solution)
- Wrap Up
-
Chapter 3 : Running Apps on Different Devices and Debugging Apps
- Module Introduction
- Running the App on an Android Device
- Running the App on an iOS Emulator
- Running the App on an iOS Device
- Working with Emulators
- Understanding Error Messages and Fixing Errors
- Using the Debugger
- Getting Started with Dart DevTools
- Understanding the Repaint Rainbow
- Wrapping Up the Dart DevTools
-
Chapter 4 : Widgets, Styling, and Adding Logic - Building a Real App (Personal Expenses App)
- Module Introduction
- An Overview of the Core Flutter Widgets
- Planning the App
- Combining Widgets
- Important - Adjusting the Starting Project
- Understanding Column Alignment
- Not a Widget: Adding a Transaction Model and Transaction Data
- Mapping Data into Widgets
- Building a Custom List Item
- Styling a Container
- Styling Text
- More Styling!
- Containers Versus Columns Versus Rows
- Using String Interpolation
- Installing External Packages and Formatting Dates
- Adding Text Input Widgets (TextField)
- Fetching User Input
- Splitting the App into Widgets
- Connecting Widgets and Managing Data/State
- Adding User Transactions to the List
- Making the List Scrollable!
- Working with ListViews
- Further Input and Output Styling and Configuration
- Adding AppBar Buttons and Floating Action Buttons
- Showing a Modal Bottom Sheet
- Improving and Styling the Modal Bottom Sheet
- Configuring and Using Themes
- Custom Fonts and Working with Text Themes
- Adding Images to the App
- Planning the Chart Widget
- Looping Through Lists
- Deriving Recent Transactions
- Creating Bars for a Chart
- Populating a Chart with Values
- Finishing the Chart Bars
- Flexible and Expanded: Deep Dive
- Adding a ListTile Widget
- Improving the Overall Chart
- Widgets and Configuring Widgets - Summary/Overview
- Getting Started with Date Selection
- Showing a DatePicker
- Adding Transactions with a Date
- Deleting Transactions and Using IconButtons
- Final Polishing!
- Wrap Up
-
Chapter 5 : Responsive and Adaptive User Interfaces and Apps
- Module Introduction
- What does "Responsive" and "Adaptive" Mean?
- Examples: Where We Could Improve the App!
- Calculating Sizes Dynamically
- Using the LayoutBuilder Widget
- Controlling Device Orientation
- Rendering Alternative Landscape Content – 1
- Finishing Landscape Mode
- Showing Different Content Based on Device Orientation
- Respecting the Softkeyboard Insets
- Using the Device Size in Different Conditions
- Managing the MediaQuery Object
- Checking the Device Platform
- Using Cupertino (iOS) Widgets
- Using the SafeArea Class
- More Cupertino Styles
- Using Cupertino Buttons
- Creating Custom Adaptive Widgets
- Wrap Up
-
Chapter 6 : Widget and Flutter Internals - Deep Dive
- Module Introduction
- The Problem at Hand
- Widget Tree and Element Tree - What, Why, and How?
- How Flutter Rebuilds and Repaints the Screen
- How Flutter Executes build ()
- Using "const" Widgets and Constructors
- Writing a Good Code
- Extracting Widgets
- Using Builder Methods
- Assignment - Builder Methods (Problem)
- Assignment - Builder Methods (Solution)
- Understanding the Widget Lifecycle
- Understanding the App Lifecycle
- Understanding Context
- A Problem with Lists and Stateful Widgets
- Understanding the Problem
- Using Keys
- Wrap Up
-
Chapter 7 : Navigation and Multiple Screens (Meals App)
- Module Introduction
- Planning the App
- Starting with the App - Adding Base Data
- Important - Adjusting the Starting Project
- Creating a Grid and Working with Linear Gradients
- Registering a Screen as the Main Screen
- Styling and Themes
- Navigating to a New Page
- Passing Data Through the Constructor
- Using Named Routes and Passing Data with Named Routes
- Diving Deeper into Named Routes
- Adding a Meal Model and Data
- Selecting Meals for a Chosen Category
- Displaying Recipe Items and Using Network Images
- Finishing the Meal List Item
- Navigating to the Meal Detail Page
- onGenerateRoute and onUnknownRoute
- Finishing the Meal Detail Page
- Adding a TabBar to the Appbar
- Adding a Bottom TabBar
- Adding a Custom Drawer
- Adding Links to the Drawer
- Replacing Pages (Instead of Pushing)
- Popping Pages and Passing Data Back
- Adding Filter Switches
- Adding Filtering Logic
- Adding the "Mark as Favorite" Feature
- A Problem!
- Wrap Up
-
Chapter 8 : State Management (Shop App)
- Module Introduction
- Planning the App
- Defining a Data Model
- Important - Adjusting the Starting Project
- Working on the "Products" Grid and Item Widgets
- Styling the App and Adding a Theme to the App
- Adding Navigation to the App
- Why State Management? What Is "State" and "State Management"?
- Understanding the "Provider" Package and Approach
- Working with Providers and Listeners
- (Dart Deep Dive) Inheritance ("extends") Versus Mixins ("with")
- Listening in Different Places and Ways
- Using Nested Models and Providers
- Exploring Alternative Provider Syntaxes
- Using "Consumer" Instead of "Provider.of"
- Local State Versus App-Wide State
- Adding Shopping Cart Data
- Working with Multiple Providers
- Connecting the Cart Provider
- Working on the Shopping Cart and Displaying the total
- Displaying a List of Cart Items
- Making Cart Items Dismissible
- Adding Product Detail Data
- Providing an Orders Object
- Adding Orders
- Adding an Orders Screen
- Using a Side Drawer
- Making Orders Expandable and Stateful Widgets Versus Providers
- Wrap Up
-
Chapter 9 : Working with User Input and Forms (Shop App)
- Module Introduction
- Snackbars and Undoing "Add to Cart" Actions
- Showing Alert Dialogs
- Adding a "Manage Products" Page
- "Edit Product" Screen and a Problem
- Using Forms and Working with Form Inputs
- Managing Form Input Focus
- Multiline Inputs and Disposing Objects
- Image Input and Image Preview
- Submitting Forms
- Validating User Input
- Adding Validation to All Inputs
- Saving New Products
- Time to Update Products!
- Allowing Users to Delete Products
- Wrap Up
-
Chapter 10 : Sending HTTP Requests (Shop App)
- Module Introduction
- On-Device Versus Web Storage
- How to Connect Flutter to a Database
- Preparing the Backend
- How to Send HTTP Requests
- Sending POST Requests
- Working with Futures in Dart
- (Dart Deep Dive) Futures and Async Code
- Showing a Loading Indicator
- Handling Errors Gracefully
- Working with "async" and "await"
- Fetching Data, initState and "of(context)"
- How to Transform Fetched Data
- Implementing Pull-to-Refresh
- Updating Data using PATCH Requests
- Utilizing Optimistic Updating
- Creating Custom Exceptions and More Error Handling
- A Challenge for You!
- Updating the "Favorite" Status Optimistically
- Storing Orders on the Web
- Fetching Orders and Fixing an Issue
- Using the "FutureBuilder" Widget and Improving the Code
- Wrap Up
-
Chapter 11 : Adding User Authentication (Shop App)
- Module Introduction
- How Authentication Works
- Preparing the Backend
- Adding the Auth Screen
- Adding User Signup
- Allowing Users to Log In
- Handling Authentication Errors
- Managing the Auth Token Locally (in the App)
- Using the "ProxyProvider" and Attaching the Token to Outgoing HTTP Requests
- Adding Token to All Requests
- Connecting the "Favorite" Status to Users
- Attaching Products to Users and Filtering by Creator
- Attaching Orders to Users
- Adding a Logout Functionality
- Automatically Logging Users Out (After Some Time)
- Automatically Logging Users In
- Wrap Up
-
Chapter 12 : Adding Animations (Shop App)
- Module Introduction
- Animations from Scratch (Completely Manually Controlled)
- Using the "AnimatedBuilder" Widget
- Working with the "AnimatedContainer"
- More Built-In Animation and Transition Widgets
- Fading Loaded Images In (and Showing a Placeholder)
- Adding a "Hero" Transition
- Working with Slivers
- Practice: Animating Order Boxes
- Implementing Custom Route Transitions
- Wrap Up
-
Chapter 13 : Using Native Device Features (Such as Camera, Maps, and Location) (Great Places App)
- Module Introduction
- Planning the App
- PlaceList and Place Provider Setup
- Important - Adjusting the Starting Project
- Adding the "Add Place" Screen and an Image Input
- Using Image Picker and the Device Camera
- Storing the Image on the Filesystem (on the Device)
- Managing Data and Images Through the Provider Package
- Handling Errors
- Testing on Real Devices
- Preparing SQLite
- Storing and Fetching Data with SQLite
- Adding a Location Input and the "location" Package
- Fetching User Coordinates
- Displaying a Static Map Snapshot
- Rendering a Dynamic Map (Using Google Maps)
- Allowing Users to Pick a Location on the Map
- Storing the Location in SQLite
- Adding a "Place Detail" Screen and Opening the Map in "read only" Mode
- Wrap Up
-
Chapter 14 : Firebase, Image Upload, Push Notification - Building a Chat App
- Module Introduction
- What Is Firebase?
- Creating a New App
- Getting Started with Firebase
- Getting Started with Flutter and the Firebase SDK
- Rendering Stream Data with StreamBuilder
- Adding Data
- A Basic Authentication Screen
- Adding an App Theme
- Creating an Authentication Form
- Connecting the Auth Form and Auth Screen
- Implementing Authentication
- Storing Extra User Data
- Completing Authentication and Logout
- Adding Firebase Security Rules
- Listening to Chat Messages
- Sending and Ordering Chat Messages
- Creating a Basic Chat Bubble Widget
- Improving the Chat Bubbles
- Testing on Multiple Devices
- Displaying Usernames
- Adding an Image Picker
- Preparing File Upload and Validating Images
- Uploading Images
- Improving Image Upload
- Running on an iOS Device
- Displaying User Images
- How Push Notifications Work
- An Introduction to Firebase Cloud Messaging
- Android and Push Notifications
- iOS and Push Notifications
- Handling Push Notifications
- Getting Started with Firebase Cloud Functions
- Setting a Firestore Trigger
- Sending Automated Push Notifications
- Polishing and Wrap Up
- Chapter 15 : Running Native Swift, Objective C, Java, or Kotlin Code
- Chapter 16 : Publishing to the App Stores
- Chapter 17 : Roundup and Next Steps
- Chapter 18 : Flutter 2 Update
Product information
- Title: Learn Flutter and Dart to Build iOS and Android Apps (2023)
- Author(s):
- Release date: September 2021
- Publisher(s): Packt Publishing
- ISBN: 9781789951998
You might also like
video
Learn Flutter and Dart to Build iOS and Android Apps - Second Edition
This Flutter course is an excellent opportunity to discover the power of Flutter and Dart for …
book
Developing Apps with GPT-4 and ChatGPT
This minibook is a comprehensive guide for Python developers who want to learn how to build …
video
React - The Complete Guide (Includes Hooks, React Router, and Redux) - Second Edition
**This course is now updated for React 18** Starting with an introduction to React concepts, you …
video
React Front to Back 2022
The course starts with React fundamentals including components, props, hooks, state, and so on. Then learn …