The Complete Dart Developer Guide

Learn Dart Programming in depth. Includes basic to advanced topics, exercises, and projects. Last updated to Dart 2.15 (Note: Dart 3 features like records and patterns are not included).

--

Completed

--

Lessons completed

to track your course
progress

Module 1

Course Introduction

A brief introduction to the Dart language and the Dartpad editor.

01 - Making the most of this course
3:35
02 - Join Code With Andrea on Discord
03 - Introduction to Dart
4:13
04 - Introduction to Dartpad
2:05

Module 2

Dart Basics

Write your first hello world program and get familiar with all the basics, including: basic variables and types, working with strings, initialization vs assignment, Dart operators.

01 - Section Intro
0:55
02 - The main method
1:21
03 - Hello world
1:55
04 - Variable declaration and initialization
3:24
05 - Basic types
2:47
06 - Exercise: printing variables
1:13
07 - String Concatenation & Interpolation
5:06
08 - Exercise: String interpolation
1:46
09 - String Escaping
4:00
10 - Multi-line strings
1:34
11 - Basic String operations: uppercase and lowercase
3:33
12 - Initialization vs Assignment
1:55
13 - Exercise: Lowercase and uppercase strings
0:58
14 - Finding and replacing strings
4:24
15 - Conversions between types
4:29
16 - Arithmetic operators
3:31
17 - Exercise: temperature conversion
2:25
18 - Increment & decrement operators
3:16
19 - Logical & Relational operators
3:34
20 - Ternary conditional operator
2:24
21 - Hex format, bitwise & shifting operators
4:17
22 - Comments
4:12
23 - Expressions & statements
1:55

Module 3

Dart Type System

Learn about statically and dynamically typed languages. Understand how type inference works in Dart, and how and when to use the var, final, const, and dynamic keywords.

01 - Section Intro
0:49
02 - Static vs Dynamic Languages
3:41
03 - Type inference with var
1:11
04 - The final keyword
2:26
05 - The const keyword
2:20
06 - Exercise: var, final and const
2:31
07 - The dynamic keyword
2:17

Module 4

Control Flow

Learn how to write programs that make decisions and run code based on some conditions using if/else statements, while and for loops, break and continue keywords, switch statements, and enums.

01 - Section Intro
0:37
02 - If/else statements
3:31
03 - Exercise: if/else statements
2:43
04 - while loops
2:55
05 - for loops
2:48
06 - Exercise: fizz buzz
3:20
07 - break and continue
3:50
08 - switch statements
3:37
09 - enumerations
5:19
10 - Exercise: simple calculator
2:36

Module 5

Project: Build a Command Line App

Install Visual Studio Code and the Dart SDK, and learn to build a simple command line app to play rock, paper, and scissors.

01 - Section Intro
1:48
02 - Installing the Dart SDK
6:54
03 - Installing and configuring VS Code
4:06
04 - Project Brief: Rock, Paper & Scissors
2:10
05 - Creating a command line app
1:59
06 - Pseudocode for the game logic
1:50
07 - Getting user input with stdin from dart:io
4:03
08 - Implementing the game loop
2:43
09 - Implementing the game logic
8:55

Module 6

Collections

Learn how to work with lists, sets, and maps Dart. Also included: collection-if, collection-for, and the spread operator.

01 - Section Intro
0:48
02 - Lists
4:01
03 - Exercise: Sum of the items in a list
1:02
04 - List methods
3:36
05 - Type annotations with lists
1:53
06 - Using var, final, const with lists
2:26
07 - Sets
3:47
08 - Exercise: Sets
2:09
09 - Maps
4:56
10 - The as operator
1:32
11 - The null value
1:24
12 - Iterating on maps
2:56
13 - Exercise: Pizza Ordering
2:26
14 - Nested Collections
1:40
15 - Exercise: Restaurant ratings
1:48
16 - Collection-if
2:48
17 - Collection-for
1:33
18 - Spreads
3:04
19 - Exercise: Shopping List
2:13
20 - Copying collections
4:54

Module 7

Project: Data Processing in Dart

Build a useful command line app to process CSV files in Dart, do some number crunching, and generate a report.

01 - Section Intro
2:29
02 - Parsing command line arguments
3:22
03 - Reading files line by line
3:31
04 - Pseudocode for the processing logic
2:25
05 - Implementing the processing logic
6:13

Module 8

Null Safety

Learn about all the most important Null Safety features: nullable & non nullable types, flow analysis, the assertion, if-null, and conditional access operators.

01 - Introduction to Null Safety
2:27
02 - Nullable and non-nullable variables
2:56
03 - Flow Analysis: Promotion and Definite Assignment
3:28
04 - The assertion operator
2:08
05 - The if-null operator
2:28
06 - Null Safety with type inference
1:25
07 - Null Safety with collections
2:23
08 - The conditional access operator
3:17

Module 9

Functions: Basics

Learn how to work with functions as essential building blocks to better organize your code and make it more reusable. Included: how to declare and use functions, named vs positional arguments, default values and required arguments, the arrow notation, the lexical scope, inner functions.

01 - Section Intro
0:58
02 - Intro to functions
1:30
03 - Function arguments
4:30
04 - Return values
1:59
05 - Exercise: Sum of a list of numbers
2:25
06 - Named and positional arguments
2:35
07 - Required and default values
5:02
08 - Default positional arguments
2:16
09 - Exercise: Pizza ordering with functions
2:36
10 - Fat arrow notation
1:29
11 - The global and local scope
2:22
12 - Inner Functions
2:00
13 - Global mutable state and functions with side effects
4:05

Module 10

Functions: Advanced

Learn about advanced and effective ways of using functions to write better code: anonymous functions and closures, passing functions as arguments to other functions, function types, functional operators such as forEach, map, where, and reduce, functions with generic arguments.

01 - Section Intro
0:43
02 - Anonymous functions
2:51
03 - Functions as first class objects
2:45
04 - Function types
3:37
05 - Closures
2:10
06 - The forEach method
3:44
07 - The map method
1:36
08 - Iterable and toList()
2:37
09 - Code reuse with anonymous functions and generics
7:49
10 - The where and firstWhere methods
3:10
11 - Exercise: Implement the where function
2:43
12 - Exercise: Implement the firstWhere function
3:35
13 - The reduce method
2:46
14 - Combining functional operators
6:01

Module 11

Classes: Basics

Learn how to work with classes as the foundation of object oriented programming, including: how to create classes, regular, named, and const constructors, initializer lists, instance variables and methods, getters and setters, static class variables and methods, how to make things private.

01 - Section Intro
0:42
02 - Introduction to classes
3:52
03 - Instance methods
3:32
04 - Class constructors and the this keyword
1:59
05 - Initializer lists and the shorthand syntax
4:46
06 - Classes with immutable members
1:51
07 - Exercise: Creating a Person class
2:58
08 - Type safety with classes
2:01
09 - const constructors
2:35
10 - Named constructors
3:49
11 - Named constructors: temperature example
2:51
12 - Getters and setters
3:05
13 - Exercise: Restaurant ratings with classes
2:58
14 - Static methods and variables
3:14
15 - Private variables and methods
5:28
16 - Wrap up
1:13

Module 12

Classes: Advanced

Learn about class inheritance and other advanced concepts that you'll need when building complex apps: subclassing, super constructors, overriding methods, abstract classes, implements vs extends, the base Object class, equality & hashCode operators, the toString method, generics, the difference between composition & inheritance, factory constructors, copying objects with copyWith, the cascade operator.

01 - Section Intro
1:24
02 - VS Code Dart Setup with Null Safety
7:30
03 - Introduction to inheritance / subclassing
4:17
04 - The super constructor
3:43
05 - Overriding methods
3:07
06 - Abstract classes
6:30
07 - Exercise: Area and Perimeter
2:36
08 - Interfaces and the difference between implements and extends
5:31
09 - The base Object class
2:00
10 - The toString() method
2:51
11 - The equality operator and the covariant keyword
4:22
12 - Exercise: Implement the + and * operators
1:49
13 - Overriding hashCode and the Equatable package
5:43
14 - Using classes with generics
3:16
15 - Composition vs inheritance: Flutter widget hierarchy example
3:49
16 - Factory constructors and reading JSON data
10:21
17 - Exercise: JSON Serialization
3:03
18 - Copying objects with copyWith
3:57
19 - The cascade operator
4:15

Module 13

Project: Simple eCommerce

Use classes & functions to build a simple command line app that implements the business logic for an eCommerce flow: add items to a cart, view items & checkout.

01 - Simple eCommerce store: Overview
3:04
02 - Creating the Product, Item, Cart classes
2:27
03 - Adding the interactive prompt
7:07
04 - Adding items to the cart
5:53
05 - Checkout functionality
4:23
06 - Project structure and wrap-up
3:29

Module 14

Mixins and Extensions

Learn how to use mixins and extensions more easily extend the functionality of existing types.

01 - Section Intro
1:27
02 - Creating and using mixins
4:42
03 - Mixins: Drawbacks
2:35
04 - Extensions
2:59
05 - Extensions with generic type constraints
4:10
06 - Exercise: Range extension
2:20

Module 15

Error Handling & Exceptions

Learn how to deal with errors in your Dart programs: assertions, built-in errors and exceptions in the Dart SDK, the try, catch, finally, throw, and rethrow keywords.

01 - Section Intro
1:15
02 - Errors vs Exceptions
1:35
03 - Assertions
5:29
04 - Exceptions: throw, try, catch, finally, rethrow
7:45
05 - Exercise: Email validation
3:23

Module 16

Asynchronous Programming

Learn how to deal with asynchronous operations in Dart: one-time asynchronous operations with Futures, async and await, multiple asynchronous events with Streams, async* and yield, common Future and Stream-based APIs.

01 - Section Intro
1:44
02 - Futures, then, catchError, whenComplete
5:04
03 - async and await
4:12
04 - Future.value and Future.error
2:36
05 - Exercise: Countdown with Futures
3:10
06 - Streams
4:44
07 - Stream generators: async* and yield
3:51
08 - Exercise: Fizz-buzz with streams
2:15
09 - Stream constructors
2:06
10 - Stream methods
3:40
11 - Single / multiple subscription streams
1:45

Module 17

Project: Weather App

Build a simple command line app to fetch weather data using the MetaWeather API: basic intro to REST APIs, how to create a weather API client with the Dart http package, how to parse JSON data, how to add robust error handling and deal gracefully with connection and API errors.

01 - Weather App Overview
1:49
02 - REST API Basics
2:35
03 - Creating the command-line app
1:32
04 - Creating a Weather API Client with the Dart http package
5:48
05 - Reading the response status code and data
3:50
06 - Completing the Weather API client
4:14
07 - Parsing JSON Data
6:37
08 - Error Handling and Wrap up
7:30
09 - BONUS Content: Free Dart eBook & Next Steps
1:37