Dart and Flutter: The Complete Developer’s Guide

Dart and Flutter: The Complete Developer’s Guide

English | MP4 | AVC 1920×1080 | AAC 48KHz 2ch | 402 lectures (31h 14m) | 20.52 GB

Everything you need to know for building mobile apps with Flutter and Dart, including RxDart and Animations!

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.

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
Table of Contents

Lets Dive In
1 How to Get Help
2 Course Resources
3 Join Our Community
4 Course Organization

A Dart Introduction
5 Dart Overview
6 The Dartpad Editor
7 Our First Program
8 Pulling the Pieces Apart
9 Functions in Dart
10 Introduction to Types
11 Why Use Types
12 String Interpolation
13 Object Oriented Programming in Dart
14 Creating Classes
15 Creating Class Instances
16 Constructor Functions
17 Review on Constructors

Staying on Target with Dart
18 App Overview
19 OOP Design Flow
20 Adding Fields to Classes
21 Associated Methods
22 More Initialization with Constructors
23 For Loops
24 Adding Elements to Lists
25 More on Variable Initialization
26 Customizing Print Statements
27 ToString on Cards
28 Shuffling a List
29 Annotating Argument Types
30 Filtering Lists
31 Annotating Argument Types
32 Filtering Lists
33 Shorthand Function Syntax
34 Removing Individual Records
35 RemoveCard Implementation
36 Named Parameters

Flutter Environment Setup MacOS
37 Flutter Setup on MacOS
38 SDK Extraction
39 Editing the PATH Variable
40 XCode License
41 Generating Flutter Projects

MacOS Setup Android
42 Android Setup on MacOS
43 Android Dependencies
44 Android Project Setup
45 More Android Dependencies
46 Android Emulator Creation
47 Flutter Startup
48 Finished Android Setup

MacOS Setup iOS
49 iOS on Mac Setup
50 XCode Setup
51 iOS Simulator Startup
52 App Startup

Flutter Setup on PC
53 Flutter Install
54 More Flutter Installation
55 Android Install
56 Additional Dependencies
57 Generating a Project
58 Selecting an Image
59 Starting the Emulator
60 Finishing Android Setup

App Building Time
61 Code Editor Setup
62 Whats Flutter About Anyways
63 App Overview
64 The Four Step Design Process
65 Import Statements
66 Creating Widgets
67 Displaying Content on Screen
68 Showing a Scaffold
69 Customizing the App Bar
70 Named Parameter Clarification
71 Required Parameters
72 Child Parameters
73 Displaying Icons
74 Adding Custom Widgets

State Design with Flutter Apps
75 Stateless vs Stateful Widgets
76 The Build Method
77 Local Import Statements
78 Quick Breather and Review
79 Refactoring Stateless to Stateful
80 More Refactoring to Stateful Widgets

HighLevel Dart
81 Generics in Dart
82 Why Two Classes

HTTP Requests with Flutter
83 Photos API
84 Working with JSON
85 Casting JSON to Model Instances
86 Named Constructors
87 Adding an Image Model
88 Function References
89 The HTTP Package
90 Issuing HTTP Requests
91 Handling Dart Futures
92 Parsing Future Responses into a Model
93 Updating the AppState Widget
94 Building Lists of Widgets
95 Sending Images to the ImageList
96 The Final Keyword
97 Building Lists with ListView
98 Listing URLs
99 Text to Images
100 Containers for Positioning
101 Adding Border Style
102 Column Widgets for Layout
103 Selective Padding
104 App Review

Forms and Validation with Flutter
105 App Overview
106 Boilerplate App Code
107 Creating the Login Screen
108 More Container Styling
109 Labels and Hint Text
110 Customizing Keyboard Type
111 Handling Password Inputs
112 Displaying Buttons with RaisedButton
113 Changing Widget Colors
114 Layout Control
115 Form Validation
116 Referencing Widgets with Global Keys
117 The Form Widget and FormState
118 Creating a Global Key
119 Referencing FormState with Global Keys
120 Validating via FormState
121 Triggering Validation
122 Retrieving Form Values
123 Final Form Submittal
124 Code Reuse with Mixins
125 Mixin Validator Implementation

Reactive Programming with Dart
126 A Quick Detour
127 Streams by Analogy
128 Characteristics of Streams
129 StreamControllers and Sinks
130 Mapping a Stream
131 Adding a StreamTransformer
132 Implementing the Listener
133 Stream Review
134 Lets Build a Game
135 Why Streams
136 Word Guessing
137 Streams Take and Where Functions
138 Validation with Streams
139 Email Validation
140 Wiring up the Error

Advanced Flutter Architecture The Bloc Pattern
141 BLOCs vs Stateful Widgets
142 The Purpose of Streams with Blocs
143 Generating a New Project
144 App Boilerplate
145 Second Time on LoginScreen
146 TextFields with RaisedButtons
147 How to Use TextFields
148 BLOC Design for TextFields
149 Annotating Stream Types
150 Issues with Bloc Access
151 Shortcut Access with Getters
152 Public vs Private Fields
153 Improving the BLOC Api
154 Validation Transformers
155 A Technicality Around Mixins
156 Cleaning Up Controllers
157 Bloc Application

Consuming BLOC Data
158 The StreamBuilder Widget
159 Streambuilder for Password Fields
160 Scoped Bloc Approach
161 Provider Implementation
162 The Providers of Function
163 The Providers Constructor
164 The Provider in Action
165 Accessing the Bloc
166 Breather and Review
167 Enabling Form Submission
168 Stream Merging Possibilities

RxDart for Reactive Programming
169 Introducing RxDart
170 More on RxDart
171 The CombineLatest Function
172 CombineLatest in Action
173 More on StreamBuilder
174 Interpreting Stream Values
175 Broadcast Streams
176 Disabled by Default
177 Replacing Controllers with Subjects
178 Review of BLOCs

Building Delightful Animations
179 App Overview
180 Animation Library Classes
181 App Boilerplate
182 StatefulWidgets for Animations
183 Widget Structure
184 Displaying a Cat
185 The InitState Method
186 Declaring the TickerProvider
187 Tweens with Curves
188 Performance Savings with AnimatedBuilder
189 Nature of Animation
190 Starting the Animation
191 Watching for Taps with GestureDetector
192 Reversing Animation States
193 Building the Box
194 Layouts with the Stack Widget
195 Order of Drawing Widgets
196 Add Center Widget
197 Positioned Widgets
198 Expanding Stack Dimensions
199 Three Reasons for Strange Layouts
200 Positioned Constraints
201 Negative Offsets
202 Stack Clip Settings
203 Adjusting Tween Ranges
204 Adding Box Flaps
205 Rotating Widgets
206 Rotation by Radians
207 Changing Rotation Point
208 A Touch of Positioning
209 BoxAnimation Controller
210 Adding Animated Builders
211 Resetting Animations
212 Constraining Animation Range
213 Adding the Right Flap
214 Negative Rotation Values
215 Toggling Animation State
216 Animation Wrapup

Performant Data Fetching
217 App Overview
218 Hacker News API
219 More API Challenges
220 API Performance Strategy
221 Creating the ItemModel Class
222 A Few More ItemModel Properties
223 API Provider Implementation
224 Fetching Individual Items

Testing with Flutter and Dart
225 Testing with Dart
226 A Few Imports
227 Writing Expectations
228 Mocking HTTP Requests
229 Returning JSON
230 Testing FetchItem

Offline Data Storage
231 SQLite DB Provider
232 Database Imports
233 Async Constructors
234 Creating a DB Connection
235 Creating Tables with SQLite
236 Adding Table Columns
237 Issuing Queries
238 Multiple Named Constructors
239 Massaging DB Return Maps
240 Turning Class Instances to Maps
241 Implementing the Repository
242 More on the Repository
243 Type Annotations
244 Casting Lists

Type Design
245 More on the Repository
246 Abstract Classes
247 The Need for Abstract Classes
248 Why Abstract Classes
249 More on Abstract Classes
250 Repository Interface Design
251 Defining the Source
252 Cache Definitions
253 Lists of Sources and Caches
254 Ultimate Reusability
255 Quick Gotcha
256 Another Quick Gotcha
257 FetchTopIds Implementation

On Demand Widget Rendering
258 App Setup
259 A Touch of Boilerplate
260 Data Fetching Concerns
261 Solution Outline
262 FutureBuilder in Action
263 The Stories Provider
264 Bloc Design
265 Exposing Bloc Getters
266 Wiring up the Stories Provider
267 Bloc Testing
268 Type Annotations Solve Problems
269 Circular Progress Indicator
270 Item Fetching Architecture
271 Giant Gotcha with StreamBuilder
272 Giant Gotcha Solution
273 Implementing ScanStreamTransformer
274 Finishing the ScanStreamTransformer
275 Adding the Items Controller
276 A Gotcha Around Streams Impossible
277 Single Transformer Application
278 The ListView Tile
279 StreamBuilder Setup
280 Wrapping Up the FutureBuilder
281 Double Gotcha
282 Stream Subscriptions
283 Stream Subscription Fix
284 Additional Streams
285 A Laborious Refactor
286 Result of Refactor
287 Quick Debug Session
288 Resolving Database Conflicts
289 Building Story Tiles
290 Comments Icon
291 Applying Dividers with Height
292 Loading Container Standin
293 Building the Loading Container
294 Showing the Loading Container
295 LongLived Cache Values
296 Swipe to Refresh Indicator
297 Implementing a Refresh Widget
298 Clearing Database Tables
299 Communicating a Future to onRefresh

Navigation with Flutter
300 Navigation in Flutter
301 Map Based Routing
302 OnGenerateRouteBased Navigation
303 OnGenerateRoute Implementation
304 Navigating in Style
305 A PageRoute for NewsDetail
306 A Scaffold in NewsDetail
307 Parsing Route Settings
308 The Comments Bloc Provider
309 Comments Bloc Design
310 More on Comments Bloc
311 Recursive Data Fetching
312 Quick Fix
313 Connecting the Comments Provider
314 Testing Recursive Fetching
315 Consuming the Item Map
316 Displaying the Story Title
317 Text Styling
318 Container Alignment
319 Building the Comments List
320 More Logic Extraction
321 The Comment Widget
322 Comments FutureBuilder
323 Showing Individual COmments
324 Recursive Rendering
325 Styling the Comment List
326 Defaulting Null Values
327 Handling Deleted Comments
328 Nested Comments
329 ListTiles ContentPadding Property
330 Replacing Placeholder Characters
331 Loading Containers for Comments
332 App Wrapup
333 Last Fix

Appendix One Building Open Source with Dart
334 Dart Local Installation
335 Dart Install on Mac
336 Editor Setup for Dart
337 App Overview
338 Folder and File Structure
339 The PubSpec File
340 Running Dart Files
341 Program Design Methodology
342 Class Creation
343 Terminal Design
344 Terminal Implementation
345 Stdout and Stdin
346 Import Statements
347 Stdout Instance
348 More on Import Statements
349 Testing the Import Class
350 Checking Operating System
351 Clearing Windows Terminal
352 Clearing Other Terminals
353 Testing ClearScreen
354 Collecting Input Over Stdin
355 Option Class FIelds
356 Adding Dynamic Fields
357 Printing Individual Options
358 Testing Option Printing
359 List Shortcomings
360 Maps in Dart
361 Refactor to Maps
362 The Prompter Class
363 Testing the Prompter
364 Extracting the Terminal
365 Var vs Final for Variables
366 Finals Affect on Values
367 Consts Dual Nature
368 Consts Behavior by Type
369 Marking Terminal as Const
370 Private Variables
371 Finishing Prompter
372 Error Handling
373 Asking Binary Questions
374 Testing Binary Inputs
375 Code Similarities
376 Refactor for Code Reuse
377 More on Private
378 Central Lib File
379 A Single Export Point
380 A Relevant Example File
381 Outstanding Project Config
382 Uploading the Prompter Lib

Appendix Two Building a Dart CLI
383 App Overview
384 Project Setup
385 Importing Library Code
386 Forcibly Exiting a Program
387 Prompting for File Type
388 Implementation Flow
389 Working with the Current Directory
390 Filtering NonFiles
391 Filtering NonImages
392 Building Options from Images
393 Testing Image Selection
394 Converting Images
395 The ConvertImage Function
396 Reading File Contents
397 Encoding to JPG or PNG
398 Writing Files to the Hard Drive
399 Returning the Image Name
400 Testing Image Conversion
401 Opening the Image

Extras
402 Bonus

Homepage