Course Overview
Discover the power of Flutter and Dart to create stunning, high-performance mobile apps for iOS and Android with the most comprehensive and bestselling Flutter course! With over 30 hours of comprehensive content, this course is the ultimate resource for anyone who wants to build beautiful, responsive, and feature-rich applications from scratch.
Learn from a Bestselling Udemy Instructor: Maximilian Schwarzmüller
I'm Maximilian Schwarzmüller, a bestselling, top-rated online course instructor with a vast variety of courses on web and mobile development. I'm excited to be your guide throughout this journey. My goal with this course is to teach you Flutter from the ground up, step-by-step and in a highly practice-oriented way!
Unlock Your Potential in Mobile App Development
This Flutter & Dart course is designed for absolute beginners with no prior programming experience, as well as for those with existing iOS, Android or other development skills. Through video lessons and hands-on projects, you'll learn the ins and outs of Flutter and Dart!
Throughout the course you'll build multiple demo apps - ranging from simple to more complex - and, by the end of the course, you'll be able to build your own iOS and Android apps with Flutter.
Why Choose Flutter?
Developed by Google, Flutter is a framework that allows you to learn one language (Dart) and build beautiful native mobile apps in no time
Write code only once and ship your apps both to the Apple App Store and Google Play
Use the rich widget suite Flutter provides to add common UI elements or build your own custom widgets
What You'll Learn:
Detailed setup instructions for both macOS and Windows
A thorough introduction to Flutter, Dart, and the concept behind widgets
An overview of the built-in widgets and how to add your own
Debugging tips & tricks
Page navigation with tabs, side drawers, and stack-based navigation
State management solutions
Handling and validating user input
Connecting your Flutter app to backend servers by sending HTTP requests
User authentication
Adding Google Maps
Using native device features like the camera
Adding beautiful animations & page transitions
Image upload
Push notifications - manual approach and automated
And much more!
Course Highlights:
On-Demand, Video-Based Learning: An immersive experience with practical examples and demo apps to help you develop your skills at your own pace
Lifetime Access: Revisit topics and refresh your knowledge anytime
Regularly Updated: The course has been updated multiple times in the past to ensure it stays up-to-date with the latest industry standards
No Experience Necessary
This course is designed to be accessible to everyone, regardless of their programming background. Whether you're a complete beginner or an experienced developer looking to expand your skillset, I will guide you through each step of the process, ensuring you gain a deep understanding of the fundamentals and advanced concepts.
Prerequisites:
Basic programming language knowledge will help but is not required
No prior knowledge of Flutter or Dart is needed
No iOS (Swift/ObjectiveC) or Android (Java/Kotlin) development experience required
Take the First Step Towards Your Mobile App Development Career
With the skyrocketing demand for skilled mobile app developers in today's job market, there has never been a better time to jump into the world of Flutter & Dart. By the end of this course, you'll be fully equipped to design, develop, and deploy stunning iOS and Android apps, setting yourself up for a successful career in mobile app development.
Don't let this opportunity pass you by! Enroll in "Flutter & Dart - The Complete Guide" today and start building amazing apps for the iOS and Android platforms!
FAQ
FAQ area empty
Course curriculum
-
Using the FavoritesProvider
Xem trước -
Triggering a Notifier Method
Xem trước -
Getting Started with Another Provider
Xem trước -
Combining Local & Provider-managed State
Xem trước -
Outsourcing State Into The Provider
Xem trước -
Connecting Multiple Providers With Each Other (Dependent Providers)
Xem trước -
Swapping The "Favorite Button" Based On Provider State
Xem trước -
Module Summary
Xem trước -
"riverpod" vs "provider" - There are many Alternatives!
-
Welcome To This Course!
Xem trước -
What Is Flutter?
Xem trước -
Flutter uses Dart!
Xem trước -
One Codebase, Multiple Platforms
Xem trước -
Flutter Setup - Overview
Xem trước -
Windows Setup
Xem trước -
MacOS Setup
Xem trước -
Project Creation & Setting Up a Code Editor for Flutter Development
Xem trước -
Course Setup
-
Running a First Flutter App
Xem trước -
Understanding Material Design
Xem trước -
About This Course
Xem trước -
Course Resources (Code Snapshots, Community & Slides)
-
Module Introduction
Xem trước -
Setup & Understanding Explicit vs Implicit Animations
Xem trước -
Explicit Animations: Adding an Animation Controller
-
Explicit Animations: Playing the Animation with AnimatedBuilder
-
Finetuning Explicit Animations
-
Getting Started with Implicit Animations
-
Configuring Implicit Animations
-
Adding Multi-Screen Transitions
-
Module Summary
-
Module Introduction
-
Analyzing A New Flutter Project
-
From Dart To Machine Code
-
How Programming Languages Work
-
Starting From Scratch: Understanding Functions
-
Importing Features From Packages
-
How Flutter Apps Start
-
Knowledge Check: Flutter & Dart Basics
-
Understanding Widgets
-
Using a First Widget & Passing Values to Functions
-
Positional & Named Arguments
-
Deep Dive: Position & Named Arguments
-
Combining Multiple Widgets
-
Understanding "const" Values
-
Flutter & Code Formatting
-
Building More Complex Widget Trees
-
Understanding Value Types
-
Configuring Widgets & Understanding Objects
-
Working with "Configuration Objects" (Non-Widget Objects)
-
Generics, Lists & Adding Gradient Colors
-
How To Configure Widgets & Objects
-
Practice: Styling Text
-
Onwards to Custom Widgets: Why Do You Need Them?
-
Understanding Classes
-
Building Custom Widgets
-
Working with Constructor Functions
-
Splitting Code Across Files
-
Practice: Create a Custom Widget
-
Introducing Variables
-
Variables & Types - Combining Two Key Concepts
-
"final" & "const" - Special Kinds Of "Variables"
-
Instance Variables (Properties) & Configurable Widgets
-
Practice: Reusable Widgets & Constructor Functions
-
Displaying Images & Using Multiple Constructor Functions
-
Adding Buttons & Using Functions As Values
-
Styling Buttons & Working with Padding
-
How NOT To Build Interactive Widgets
-
Introducing Stateful Widgets
-
Generating Random Numbers
-
Module Summary
-
Module Introduction
-
Setup & A Challenge For You
-
Challenge Solution 1 - Building & Using Models
-
Challenge Solution 2 - Building the List UI
-
Adding a "New Item" Screen
-
The Form & TextFormField Widgets
-
A Form-aware Dropdown Button
-
Adding Buttons to a Form
-
Adding Validation Logic
-
Getting Form Access via a Global Key
-
Extracting Entered Values
-
Passing Data Between Screens
-
Final Challenge Solution
-
Module Summary
-
Module Introduction
-
A Challenge For You!
-
Challenge Solution 1/2 - Creating a Widget
-
Challenge Solution 2/2 - Working with More Widgets
-
Adding Icons to Buttons
-
Adding Transparency to Widgets
-
Repetition & Exercise: Adding a Stateful Widget
-
Rendering Content Conditionally
-
Accepting & Passing Functions as Values
-
The "initState" Method
-
Deep Dive: Flutter's (Stateful) Widget Lifecycle
-
Using Ternary Expressions & Comparison Operators
-
Understanding "if" Statements
-
Using "if" Statements In Lists
-
If Statements & Comparison Operators
-
Adding a Data Model & Dummy Data
-
Configuring a Column
-
Creating a Reusable, Custom Styled Button
-
Accessing List Elements & Object Properties
-
Mapping Lists & Using the Spread Operator
-
Alignment, Margin & Padding
-
Mutating Values in Memory
-
Managing The Questions Index As State
-
More on Button Styling
-
Using Third-Party Packages & Adding Google Fonts
-
Passing Data via Functions Across Widgets
-
More Conditions
-
Getting Started with the Results Screen
-
Passing Data to the Results Screen
-
Introducing Maps & "for" Loops
-
Using "for" Loops In Lists
-
Note: A Typo In The Next Lecture
-
Accessing Map Values & Using "Type Casting"
-
Combining Columns & Rows
-
Expanded To The Rescue!
-
Filtering & Analyzing Lists
-
Making Content Scrollable with SingleChildScrollView
-
Time to Practice: Flutter Basics
-
Beyond the Basics: Optional, Important Dart Features
-
Module Summary
-
Module Introduction
-
What's a Backend? And Why Would You Want One?
-
What Is HTTP & How Does It Work?
-
Setting Up a Dummy Backend (Firebase)
-
Adding the http Package
-
Sending a POST Request to the Backend
-
Working with the Request & Waiting for the Response
-
Fetching & Transforming Data
-
Avoiding Unnecessary Requests
-
Managing the Loading State
-
Error Response Handling
-
Sending DELETE Requests
-
Handling the "No Data" Case
-
Better Error Handling
-
Using the FutureBuilder Widget
-
Module Summary
-
Module Introduction
-
Setup & A Challenge For You!
-
Adding a Place Model (Challenge Solution 1/6)
-
Adding a "Places" Screen (Challenge Solution 2/6)
-
Adding an "Add Place" Screen (Challenge Solution 3/6)
-
Adding "riverpod" & A Provider (Challenge Solution 4/6)
-
Adding Places with Provider & Displaying Places (Challenge Solution 5/6)
-
Adding a "Place Details" Screen (Challenge Solution 6/6)
-
Adding a "Pick an Image" Input
-
Installing the "Image Picker" Package
-
Using the Device Camera For Taking Pictures
-
Adding the Picked Image to the Model & "Add Place" Form
-
Previewing the Picked Image
-
Important: "location" Package & Android
-
Adding the "location" Package & Starting with the "Get Location" Input Widget
-
Getting the User's Current Location
-
Using the Google Maps API - Setup
-
Using Google's Geocoding API
-
Storing the Location Data in the Model
-
Displaying a Location Preview Map Snapshot via Google
-
Using the Picked Location in the Form
-
Outputting the Location Data
-
Installing & Configuring the Google Maps Package
-
Adding a "Map" Screen
-
Displaying the Picked Place on a Dynamic Map
-
Handling Map Taps for Selecting a Location Manually
-
Using the Map Screen in the "Add Place" Form
-
Installing Packages for Local (On-Device) Data Storage
-
Storing the Picked Image Locally
-
Storing Place Data in a (On-Device) SQL Database
-
Loading Data from the SQL Database
-
Using a FutureBuilder for Loading Data
-
Module Summary
-
Adding Your Own Native Code
-
Module Introduction
-
Starting Setup & Repetition Time!
-
Adding an Expense Data Model with a Unique ID & Exploring Initializer Lists
-
Introducing Enums
-
Creating Dummy Data
-
Efficiently Rendering Long Lists with ListView
-
Using Lists Inside Of Lists
-
Creating a Custom List Item with the Card & Spacer Widgets
-
Using Icons & Formatting Dates
-
Setting an AppBar with a Title & Actions
-
Adding a Modal Sheet & Understanding Context
-
Handling User (Text) Input with the TextField Widget
-
Getting User Input on Every Keystroke
-
Letting Flutter do the Work with TextEditingController
-
Time to Practice: Adding a New Input
-
Exercise Solution
-
Closing The Modal Manually
-
Showing a Date Picker
-
Working with "Futures" for Handling Data from the Future
-
Adding a Dropdown Button
-
Combining Conditions with AND and OR Operators
-
Validating User Input & Showing an Error Dialog
-
Saving New Expenses
-
Creating a Fullscreen Modal
-
Using the Dismissible Widget for Dismissing List Items
-
SnackBar Durations
-
Showing & Managing "Snackbars"
-
Flutter & Material 3
-
Getting Started with Theming
-
Setting & Using a Color Scheme
-
Setting Text Themes
-
Using Theme Data in Widgets
-
Important: Adding Dark Mode
-
Adding Dark Mode
-
Using Another Kind of Loop (for-in)
-
Adding Alternative Constructor Functions & Filtering Lists
-
Adding Chart Widgets
-
Module Summary
-
Module Introduction
-
App & Firebase Setup
-
Adding an Authentication Screen
-
Adding Buttons & Modes to the Authentication Screen
-
Validating User Input
-
Firebase CLI & SDK Setup 1/2
-
FlutterFire Configuration
-
Firebase CLI & SDK Setup 2/2
-
Signing Users Up
-
Logging Users In
-
Showing Different Screens Based On The Authentication State
-
Adding a Splash Screen (Loading Screen)
-
Adding User Logout
-
Firebase & Image Storage
-
Image Upload: Setup & First Steps
-
Adding a User Image Picker Widget
-
Using the ImagePicker Package
-
Managing The Selected Image In The Authentication Form
-
Uploading Images To Firebase
-
Showing a Loading Spinner Whilst Uploading
-
Adding a Remote Database: Firestore Setup
-
Sending Data to Firestore
-
Storing a Username
-
Adding ChatMessages & Input Widgets
-
A Note About Reading Data From Firestore
-
Sending & Reading Data To & From Firestore
-
Loading & Displaying Chat Messages as a Stream
-
Styling Chat Message Bubbles
-
Push Notifications - Setup & First Steps
-
Requesting Permissions & Getting an Address Token
-
Testing Push Notifications
-
Working with Notification Topics
-
Sending Push Notifications Automatically via Cloud Functions
-
Module Summary
-
Module Introduction
-
What is "Responsiveness"?
-
Locking the Device Orientiation
-
Updating the UI based on the Available Space
-
Understanding Size Constraints
-
Handling to Screen Overlays like the Soft Keyboard
-
Understanding "Safe Areas"
-
Using the LayoutBuilder Widget
-
Building Adaptive Widgets
-
Module Summary
-
Module Introduction
-
Three Trees: Widget Tree, Element Tree & Render Tree
-
How The UI Is Updated
-
Refactor & Extract Widgets To Avoid Unnecessary Builds
-
Understanding Keys - Setup
-
Which Problem Do Keys Solve?
-
Understanding & Using Keys
-
Mutating Values in Memory & Making Sense of var, final & const
-
Module Summary
-
Module Introduction
-
Project Setup
-
Using a GridView
-
Widgets vs Screens
-
Displaying Category Items on a Screen
-
Making any Widget Tappable with InkWell
-
Adding Meals Data
-
Loading Meals Data Into a Screen
-
Adding Cross-Screen Navigation
-
Passing Data to the Target Screen
-
Introducing the Stack Widget
-
Improving the MealItem Widget
-
Adding Navigation to the MealDetails Screen
-
Improving the MealDetails Screen
-
Adding Tab-based Navigation
-
Passing Functions Through Multiple Layers of Widgets (for State Management)
-
Managing App-wide State & Data
-
Adding a Side Drawer
-
Closing the Drawer Manually
-
Adding a Filter Item
-
Replacing Screens (Instead of Pushing)
-
Adding More Filter Options
-
Replacing WillPopScope with PopScope
-
Returning Data When Leaving a Screen
-
Reading & Using Returned Data
-
Applying Filters
-
An Alternative Navigation Pattern: Using Named Routes
-
Module Summary
-
Module Introduction
-
What's The Problem?
-
Installing the Solution: Riverpod
-
How State Management with Riverpod Works
-
Creating a Provider
-
Using a Provider
-
Creating a More Complex Provider with StateNotifier
-
Using the FavoritesProvider
-
Triggering a Notifier Method
-
Getting Started with Another Provider
-
Combining Local & Provider-managed State
-
Outsourcing State Into The Provider
-
Connecting Multiple Providers With Each Other (Dependent Providers)
-
Swapping The "Favorite Button" Based On Provider State
-
Module Summary
-
"riverpod" vs "provider" - There are many Alternatives!
Requirment
-
Basic programming language will help but is not a must-have
-
You can use either Windows, macOS or Linux for Android app development - iOS apps can only be built on macOS though
-
NO prior iOS or Android development experience is required
-
NO prior Flutter or Dart experience is required - this course starts at zero!
Outcomes
-
Learn Flutter and Dart from the ground up, step-by-step
-
Build engaging native mobile apps for both Android and iOS
-
Use features like Google Maps, the device camera, authentication and much more!
-
Learn how to upload images and how to send manual and automated push notifications
-
Learn all the basics without stopping after them: Dive deeply into Flutter & Dart and become an advanced developer
Instructor
Nguyễn Đình Cường
1.2
-
1 Student
-
330 Courses
-
1253 reviews
Xin chào các bạn, tôi là Nguyễn Đình Cường, một lập trình viên và giảng viên đam mê công nghệ với hơn 15 năm kinh nghiệm trong ngành công nghiệp phần mềm. Tôi tốt nghiệp từ Bưu Chính Viễn Thông và đã từng làm việc cho một số công ty công nghệ hàng đầu như FPT Software và VinGroup. Với chuyên môn chính là phát triển ứng dụng web, tôi đã làm việc với nhiều công nghệ như HTML, CSS, JavaScript, React cho front-end và Node.js, Express, MongoDB cho back-end. Không chỉ dừng lại ở việc viết mã, tôi còn yêu thích tìm hiểu sâu về thiết kế hệ thống và kiến trúc phần mềm. Tôi tin rằng quá trình học lập trình không chỉ đơn thuần là lý thuyết, mà còn là sự trải nghiệm thực tế và giải quyết vấn đề. Trong các khóa học của mình, tôi cố gắng cung cấp cho học viên những bài giảng thú vị và dễ hiểu, cùng với các bài tập thực hành giúp củng cố kiến thức. Tôi hy vọng rằng qua các khóa học của mình, bạn sẽ không chỉ học được cách viết mã, mà còn phát triển tư duy lập trình và kỹ năng giải quyết vấn đề. Hãy cùng nhau khám phá thế giới lập trình và biến ý tưởng của bạn thành hiện thực! Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại liên hệ với tôi. Tôi rất vui được hỗ trợ bạn trong hành trình học tập của mình!
View Details