- 01Setting up (what you'll need)
- 02Your first output (print)
- 03Variables and types (var and annotations)
- 04Null safety (? and !)
- 05Branching (the if statement)
- 06Repeating (the for loop)
- 07Writing your own function
- 08Repeating (the while loop)
- 09Working with lists (List)
- 10Working with maps (Map)
- 11Classes (object orientation)
- 12Constructors
- 13Inheritance
- 14Named arguments
- 15Asynchronous work (Future, async, await)
- 16Working with strings
- 17The switch statement
- 18The ternary operator
- 19Extension methods
- 20[Project] Build a small inventory system
Null safety (? and !)
This lesson covers null safety, one of Dart's defining features.
Dart distinguishes in the type itself whether a variable may be null (may hold no value at all). Adding ? after a type, as in String?, makes it a "might be null" type, and restricts the methods you can call on it directly.
The sample code declares String? nickname and displays it safely with nickname ?? 'No nickname' — the operator that supplies a substitute value when something is null.
A common early stumble is choosing between ? (might be null) and ! (I promise this is never null). Reaching for ! casually causes a runtime error whenever the value really is null, so prefer handling it safely with ?? or an if check.
In professional work, null safety turns most "crashed because the value was missing" bugs into compile-time errors.
๐งช This site can't compile or run Dart directly, so it checks on the spot whether what you typed matches the reference code (scoring happens entirely in your browser โ nothing is sent anywhere).
