Mô tả

If you're tired of spinning your wheels learning Swift or Android, this is the course for you.

Animations? You will learn it.  Architectural Patterns? Included.  Navigation? Of course!

Flutter is a newcomer to the mobile development scene.  Strongly supported by Google, it is already viewed as an ideal platform for replacing native Swift and Android development.  Thanks to its amazing standard library of widgets, fast compile times, and amazing documentation, developers are falling in love with Flutter!  

This course supports MacOS and Windows - develop Android and iOS apps easily!

Flutter apps are created using the language Dart.  No problem if you're not already familiar with Dart; this course includes a lightning fast introduction to Dart at the beginning, along with hours of bonus lectures at the end of the course solely focused on Dart and its advanced features.  If you come from a background working with Java, Ruby, or Javascript, you'll feel right at home with Dart - the syntax is nearly identical, only a few core concepts need to be learned.  Dart is a strongly typed language - but don't be discouraged if you're not a fan of strong types!  I spend special time in this course to make it extra clear why developing with a strongly typed language is a breeze!

One of the greatest challenges around developing Flutter applications right now is understanding how to design and architect apps.  Flutter is still in rapid development, and the community at large is still trying to find out the best techniques.  With this in mind, special attention is paid in the course to making sure you understand the primary design patterns advocated by Google's Flutter team, including both the 'Stateful Widget' pattern and the 'BLOC' pattern.  The 'BLOC' pattern makes heavy use of Reactive Programming techniques, which you'll learn about in this course as well.  These techniques can be easily applied to other languages and frameworks as well - talk about a bonus!

Of course, no mobile app is complete without some nice looking animations.  You'll learn how to build animations using Flutter's standard library of tools, which can be easily used to make interactions that your users will love.  You should plan to complete the course with knowledge of how to reference Flutter's standard library of widgets to assemble complex animations.

Sign up today and you will:

  • Understand the Dart language and its primary features
  • Store information for long periods of time on the user's device with offline storage
  • Learn how to optimize network requests for improved performance on mobile networks
  • Delight your users with complex animations
  • Expose the functionality of your apps with multi-screen navigation
  • Steer through the incredible amount of Flutter documentation
  • Master Reactive Programming with streams by using RxDart
  • Implement advanced design patterns advocated by Google's official Flutter team
  • Handle user input with form validation
  • Learn to build open source Dart packages and distribute them to other developers

I've built the course that I would have wanted to take when I was learning Flutter. A course that explains the concepts and how they're implemented in the best order for you to learn and deeply understand them.


Bạn sẽ học được gì

Yêu cầu

Nội dung khoá học

26 sections

Let's Dive In!

4 lectures
How to Get Help
01:03
Course Resources
00:38
Join Our Community!
00:07
Course Organization
03:29

A Dart Introduction

13 lectures
Dart Overview
02:43
The Dartpad Editor
02:18
Our First Program
02:32
Pulling the Pieces Apart
02:44
Functions in Dart
03:36
Introduction to Types
08:36
Why Use Types?
05:36
String Interpolation
03:19
Object Oriented Programming in Dart
03:12
Creating Classes
04:33
Creating Class Instances
03:57
Constructor Functions
07:26
Review on Constructors
03:41

Staying on Target with Dart

19 lectures
App Overview
01:12
OOP Design Flow
03:19
Adding Fields to Classes
05:59
Associated Methods
01:22
More Initialization with Constructors
02:52
For Loops
03:08
Adding Elements to Lists
03:56
More on Variable Initialization
04:46
Customizing Print Statements
03:35
ToString on Cards
04:30
Shuffling a List
06:11
Annotating Argument Types
04:42
Filtering Lists
03:46
Shorthand Function Syntax
02:39
Reference Lists
05:49
Dividing Lists with SubList
07:14
Removing Individual Records
02:45
RemoveCard Implementation
06:08
Named Parameters
04:00

Flutter Environment Setup - MacOS

5 lectures
Flutter Setup on MacOS
02:01
SDK Extraction
02:02
Editing the PATH Variable
07:46
XCode License
01:24
Generating Flutter Projects
01:20

MacOS Setup - Android

7 lectures
Android Setup on MacOS
01:57
Android Dependencies
01:17
Android Project Setup
01:13
More Android Dependencies!
01:25
Android Emulator Creation
01:51
Flutter Startup
01:27
Finished Android Setup
00:23

MacOS Setup - iOS

4 lectures
iOS on Mac Setup
01:06
XCode Setup
00:36
iOS Simulator Startup
01:44
App Startup
00:23

Flutter Setup on PC

8 lectures
Flutter Install
03:39
More Flutter Installation
02:47
Android Install
00:47
Additional Dependencies
01:03
Generating a Project
00:53
Selecting an Image
01:49
Starting the Emulator
03:18
Finishing Android Setup
00:23

App Building Time!

14 lectures
Code Editor Setup
00:41
What's Flutter About, Anyways?
05:53
App Overview
02:07
The Four Step Design Process
04:14
Import Statements
04:36
Creating Widgets
04:56
Displaying Content on Screen
02:30
Showing a Scaffold
06:09
Customizing the App Bar
03:57
Named Parameter Clarification
05:02
Required Parameters
03:19
Child Parameters
02:17
Displaying Icons
05:48
Adding Custom Widgets
03:49

State Design with Flutter Apps

6 lectures
Stateless vs Stateful Widgets
04:15
The Build Method
04:00
Local Import Statements
05:34
Quick Breather and Review
03:17
Refactoring Stateless to Stateful
05:41
More Refactoring to Stateful Widgets
08:38

High-Level Dart

2 lectures
Generics in Dart
06:33
Why Two Classes?
06:24

HTTP Requests with Flutter

22 lectures
Photos API
03:06
Working with JSON
05:25
Casting JSON to Model Instances
04:02
Named Constructors
06:36
Adding an Image Model
05:44
Function References
03:41
The HTTP Package
04:08
Issuing HTTP Requests
02:54
Handling Dart Futures
07:50
Parsing Future Responses into a Model
04:17
Updating the AppState Widget
03:41
Building Lists of Widgets
04:57
Sending Images to the ImageList
03:35
The Final Keyword
05:32
Building Lists with ListView
05:55
Listing URL's
01:38
Text to Images
03:56
Containers for Positioning
08:07
Adding Border Style
07:18
Column Widgets for Layout
09:18
Selective Padding
05:05
App Review
04:47

Forms and Validation with Flutter

21 lectures
App Overview
05:26
Boilerplate App Code
04:50
Creating the Login Screen
06:32
More Container Styling
04:30
Labels and Hint Text
08:45
Customizing Keyboard Type
03:21
Handling Password Inputs
05:09
Displaying Buttons with RaisedButton
04:11
Changing Widget Colors
01:35
Layout Control
08:05
Form Validation
03:44
Referencing Widgets with Global Keys
04:24
The Form Widget and FormState
05:18
Creating a Global Key
02:09
Referencing FormState with Global Keys
04:30
Validating via FormState
05:55
Triggering Validation
06:37
Retrieving Form Values
06:31
Final Form Submittal
04:02
Code Reuse with Mixins
03:53
Mixin Validator Implementation
05:10

Reactive Programming with Dart

15 lectures
A Quick Detour
01:00
Streams by Analogy
05:59
Characteristics of Streams
04:08
StreamControllers and Sinks
05:18
Mapping a Stream
02:39
Adding a StreamTransformer
04:25
Implementing the Listener
03:27
Stream Review
07:51
Let's Build a Game
05:35
Why Streams?
09:46
Word Guessing
05:32
Stream's 'Take' and 'Where' Functions
06:08
Validation with Streams
05:56
Email Validation
04:19
Wiring up the Error
04:35

Advanced Flutter Architecture - The Bloc Pattern

17 lectures
BLOC's vs Stateful Widgets
06:42
The Purpose of Streams with Blocs
07:39
Generating a New Project
00:55
App Boilerplate
03:05
Second Time on LoginScreen
03:13
TextFields with RaisedButtons
07:48
How to Use TextFields
03:17
BLOC Design for TextFields
04:03
Annotating Stream Types
05:01
Issues with Bloc Access
06:26
Shortcut Access with Getters
08:40
Public vs Private Fields
07:32
Improving the BLOC Api
04:07
Validation Transformers
06:52
A Technicality Around Mixins
04:25
Cleaning Up Controllers
03:18
Bloc Application
06:49

Consuming BLOC Data

11 lectures
The StreamBuilder Widget
11:26
Streambuilder for Password Fields
04:18
Scoped Bloc Approach
03:08
Provider Implementation
05:37
The Provider's 'of' Function
07:33
The Provider's Constructor
02:16
The Provider in Action
03:19
Accessing the Bloc
05:32
Breather and Review
05:37
Enabling Form Submission
05:16
Stream Merging Possibilities
04:07

RxDart for Reactive Programming

10 lectures
Introducing RxDart
04:13
More on RxDart
05:52
The CombineLatest Function
10:06
CombineLatest in Action
06:38
More on StreamBuilder
03:38
Interpreting Stream Values
05:57
Broadcast Streams
04:41
Disabled by Default
03:13
Replacing Controllers with Subjects
08:20
Review of BLOCs
03:23

Building Delightful Animations

38 lectures
App Overview
02:52
Animation Library Classes
10:37
App Boilerplate
02:47
StatefulWidgets for Animations
04:19
Widget Structure
02:26
Displaying a Cat
03:44
The InitState Method
03:54
Declaring the TickerProvider
05:45
Tweens with Curves
05:43
Performance Savings with AnimatedBuilder
05:02
Nature of Animation
07:01
Starting the Animation
01:47
Watching for Taps with GestureDetector
04:59
Reversing Animation States
06:34
Building the Box
03:26
Layouts with the Stack Widget
02:43
Order of Drawing Widgets
02:51
Add Center Widget
03:32
Positioned Widgets
11:06
Expanding Stack Dimensions
06:57
Three Reasons for Strange Layouts
07:16
Positioned Constraints
03:57
Negative Offsets
03:56
Stack Clip Settings
03:45
Adjusting Tween Ranges
02:18
Adding Box Flaps
03:28
Rotating Widgets
06:13
Rotation by Radians
06:14
Changing Rotation Point
03:37
A Touch of Positioning
05:18
BoxAnimation Controller
06:59
Adding Animated Builders
06:27
Resetting Animations
04:09
Constraining Animation Range
04:20
Adding the Right Flap
03:14
Negative Rotation Values
04:05
Toggling Animation State
02:36
Animation Wrapup
02:49

Performant Data Fetching

8 lectures
App Overview
03:08
Hacker News API
08:50
More API Challenges
08:03
API Performance Strategy
08:27
Creating the ItemModel Class
08:38
A Few More ItemModel Properties
05:24
API Provider Implementation
06:45
Fetching Individual Items
08:32

Testing with Flutter and Dart

6 lectures
Testing with Dart
04:43
A Few Imports
05:09
Writing Expectations
05:22
Mocking HTTP Requests
05:52
Returning JSON
05:42
Testing FetchItem
05:17

Offline Data Storage

14 lectures
SQLite DB Provider
04:03
Database Imports
04:27
Async Constructors
02:21
Creating a DB Connection
05:09
Creating Tables with SQLite
03:41
Adding Table Columns
04:22
Issuing Queries
07:55
Multiple Named Constructors
04:31
Massaging DB Return Maps
04:30
Turning Class Instances to Maps
08:41
Implementing the Repository
04:05
More on the Repository
07:08
Type Annotations
06:12
Casting Lists
03:31

Type Design

13 lectures
More on the Repository
02:45
Abstract Classes
07:02
The Need for Abstract Classes
04:27
Why Abstract Classes?
07:34
More on Abstract Classes
07:02
Repository Interface Design
07:16
Defining the Source
05:52
Cache Definitions
02:08
Lists of Sources and Caches
03:30
Ultimate Reusability
04:05
Quick Gotcha
02:18
Another Quick Gotcha!
01:07
FetchTopIds Implementation
02:28

On Demand Widget Rendering

42 lectures
App Setup
02:45
A Touch of Boilerplate
02:45
Data Fetching Concerns
10:12
Solution Outline
03:21
FutureBuilder in Action
12:04
The Stories Provider
06:02
Bloc Design
06:49
Exposing Bloc Getters
03:32
Wiring up the Stories Provider
03:19
Bloc Testing
07:51
Type Annotations Solve Problems
03:22
Circular Progress Indicator
03:20
Item Fetching Architecture
07:01
Giant Gotcha with StreamBuilder
08:33
Giant Gotcha Solution
07:16
Implementing ScanStreamTransformer
05:38
Finishing the ScanStreamTransformer
02:27
Adding the Items Controller
03:49
A Gotcha Around Streams? Impossible!
03:28
Single Transformer Application
03:46
The ListView Tile
04:07
StreamBuilder Setup
03:27
Wrapping Up the FutureBuilder
03:56
Double Gotcha!
03:56
Stream Subscriptions
10:01
Stream Subscription Fix
01:13
Additional Streams
02:37
A Laborious Refactor
08:42
Result of Refactor
02:28
Quick Debug Session
03:57
Resolving Database Conflicts
09:00
Building Story Tiles
05:18
Comments Icon
04:43
Applying Dividers with Height
05:36
Loading Container Stand-in
03:23
Building the Loading Container
04:20
Showing the Loading Container
02:55
Long-Lived Cache Values
02:35
Swipe to Refresh Indicator
02:54
Implementing a Refresh Widget
04:33
Clearing Database Tables
07:51
Communicating a Future to onRefresh
08:22

Navigation with Flutter

34 lectures
Navigation in Flutter
04:05
Map Based Routing
05:56
OnGenerateRoute-Based Navigation
03:39
OnGenerateRoute Implementation
06:34
Navigating in Style!
10:05
A PageRoute for NewsDetail
07:25
A Scaffold in NewsDetail
03:41
Parsing Route Settings
04:42
The Comments Bloc Provider
06:04
Comments Bloc Design
05:11
More on Comments Bloc
07:35
Recursive Data Fetching
12:46
Quick Fix
00:17
Connecting the Comments Provider
03:42
Testing Recursive Fetching
03:22
Consuming the Item Map
05:15
Displaying the Story Title
05:48
Text Styling
06:14
Container Alignment
05:31
Building the Comments List
07:29
More Logic Extraction
04:38
The Comment Widget
05:01
Comment's FutureBuilder
03:21
Showing Individual COmments
06:34
Recursive Rendering
05:50
Styling the Comment List
04:26
Defaulting Null Values
03:37
Handling Deleted Comments
02:56
Nested Comments
03:26
ListTile's ContentPadding Property
05:24
Replacing Placeholder Characters
05:14
Loading Containers for Comments
02:56
App Wrapup
06:10
Last Fix!
01:41

Appendix One: Building Open Source with Dart

49 lectures
Dart Local Installation
02:38
Dart Install on Mac
03:23
Editor Setup for Dart
03:43
App Overview
02:38
Folder and File Structure
06:43
The PubSpec File
03:08
Running Dart Files
03:58
Program Design Methodology
08:15
Class Creation
02:38
Terminal Design
03:15
Terminal Implementation
02:14
Stdout and Stdin
05:17
Import Statements
06:24
Stdout Instance
04:35
More on Import Statements
09:54
Testing the Import Class
03:22
Checking Operating System
03:51
Clearing Windows Terminal
02:23
Clearing Other Terminals
01:07
Testing ClearScreen
01:22
Collecting Input Over Stdin
07:11
Option Class FIelds
07:07
Adding Dynamic Fields
02:14
Printing Individual Options
06:58
Testing Option Printing
04:36
List Shortcomings
04:35
Maps in Dart
11:35
Refactor to Maps
03:43
The Prompter Class
04:00
Testing the Prompter
03:54
Extracting the Terminal
04:29
Var vs Final for Variables
07:01
Final's Affect on Values
06:01
Const's Dual Nature
06:22
Const's Behavior by Type
12:02
Marking Terminal as Const
02:12
Private Variables
07:22
Finishing Prompter
05:35
Error Handling
03:25
Asking Binary Questions
04:04
Testing Binary Inputs
04:20
Code Similarities
04:33
Refactor for Code Reuse
05:00
More on Private
05:15
Central Lib File
02:44
A Single Export Point
03:09
A Relevant Example File
03:16
Outstanding Project Config
02:53
Uploading the Prompter Lib
05:40

Appendix Two: Building a Dart CLI

19 lectures
App Overview
02:51
Project Setup
04:05
Importing Library Code
05:37
Forcibly Exiting a Program
04:09
Prompting for File Type
03:27
Implementation Flow
04:13
Working with the Current Directory
05:07
Filtering Non-Files
07:13
Filtering Non-Images
03:29
Building Options from Images
06:03
Testing Image Selection
02:29
Converting Images
06:06
The ConvertImage Function
03:03
Reading File Contents
03:40
Encoding to JPG or PNG
03:39
Writing Files to the Hard Drive
05:33
Returning the Image Name
01:42
Testing Image Conversion
02:37
Opening the Image
03:23

Extras

1 lectures
Bonus!
00:36

Đánh giá của học viên

Chưa có đánh giá
Course Rating
5
0%
4
0%
3
0%
2
0%
1
0%

Bình luận khách hàng

Viết Bình Luận

Bạn đánh giá khoá học này thế nào?

image

Đăng ký get khoá học Udemy - Unica - Gitiho giá chỉ 50k!

Get khoá học giá rẻ ngay trước khi bị fix.