📖 Guide
Dart — Complete Reference
Dart language cheat sheet covering syntax, types, OOP, null safety, and async patterns.
85 commands across 10 categories
BasicsVariables & TypesStringsCollectionsFunctionsClasses & OOPNull SafetyAsync/AwaitError HandlingCommon Patterns
Basics
| Command | Description |
|---|---|
void main() { ... } | Entry point of a Dart program |
print('Hello, world!'); | Print to console |
// single line comment | Single-line comment |
/* multi-line comment */ | Multi-line comment |
/// Documentation comment | Doc comment (used by dartdoc) |
import 'dart:math'; | Import a core library |
import 'package:http/http.dart' as http; | Import a package with alias |
Variables & Types
| Command | Description |
|---|---|
var name = 'Dart'; | Type-inferred variable |
String name = 'Dart'; | Explicitly typed variable |
final x = 42; | Runtime constant (set once) |
const pi = 3.14; | Compile-time constant |
int age = 28; | Integer type |
double price = 9.99; | Double (floating-point) type |
bool isActive = true; | Boolean type |
dynamic value = 'anything'; | Dynamic type — can hold any value |
late String desc; | Late initialization — assigned before first use |
Strings
| Command | Description |
|---|---|
'Hello $name' | String interpolation with variable |
'Result: ${a + b}' | String interpolation with expression |
'''multi\nline''' | Multi-line string with triple quotes |
r'raw \n string' | Raw string — backslashes are literal |
str.toUpperCase() / str.toLowerCase() | Case conversion |
str.trim() | Remove leading/trailing whitespace |
str.split(',') | Split string into list |
str.contains('pattern') | Check if string contains substring |
str.replaceAll('old', 'new') | Replace all occurrences |
str.padLeft(5, '0')e.g. '42'.padLeft(5, '0') → '00042' | Pad string on the left |
Collections
| Command | Description |
|---|---|
var list = [1, 2, 3]; | Create a List (array) |
list.add(4); | Add element to end of list |
list.where((e) => e > 1).toList() | Filter list elements |
list.map((e) => e * 2).toList() | Transform each element |
var set = {1, 2, 3}; | Create a Set (unique values) |
var map = {'key': 'value'}; | Create a Map (key-value pairs) |
map['key'] | Access map value by key |
map.entries | Iterable of MapEntry(key, value) pairs |
list.fold(0, (sum, e) => sum + e) | Reduce list to single value |
[...list1, ...list2] | Spread operator — merge lists |
Functions
| Command | Description |
|---|---|
int add(int a, int b) => a + b; | Arrow function (single expression) |
int add(int a, int b) { return a + b; } | Block function |
void greet({required String name}) | Named required parameter |
void greet({String name = 'World'}) | Named parameter with default value |
void greet([String name = 'World']) | Positional optional parameter with default |
var multiply = (int a, int b) => a * b; | Anonymous function / lambda |
list.forEach((e) => print(e)); | Pass function as argument |
typedef Compare = int Function(int, int); | Define function type alias |
Classes & OOP
| Command | Description |
|---|---|
class Dog { String name; Dog(this.name); } | Class with constructor shorthand |
class Dog { Dog.unnamed() : name = 'Rex'; } | Named constructor |
class Cat extends Animal { ... } | Inheritance with extends |
abstract class Shape { double area(); } | Abstract class with abstract method |
class A with Mixin1, Mixin2 { ... } | Apply mixins |
class Api implements Service { ... } | Implement an interface |
dog.name // getter | Access instance property |
int get count => _items.length; | Custom getter |
set count(int v) => _count = v; | Custom setter |
@override String toString() => 'Dog($name)'; | Override method |
Null Safety
| Command | Description |
|---|---|
String? name; | Nullable type — can be null |
String name = value!; | Null assertion — throws if null |
name ?? 'default' | If-null operator — fallback if null |
name ??= 'default'; | Assign only if currently null |
obj?.method() | Null-aware method call — skip if null |
list?.length ?? 0 | Chain null-aware access with fallback |
late final String name; | Late final — initialized once, before first read |
Async/Await
| Command | Description |
|---|---|
Future<String> fetchData() async { ... } | Async function returning a Future |
var data = await fetchData(); | Await a Future |
Future.delayed(Duration(seconds: 2)) | Create a delayed Future |
await Future.wait([f1, f2, f3]); | Wait for multiple Futures in parallel |
Stream<int> count() async* { yield 1; } | Async generator — yields stream values |
await for (var val in stream) { ... } | Listen to stream values |
stream.listen((data) { ... }); | Subscribe to a stream |
Future.value(42) | Create an already-completed Future |
Error Handling
| Command | Description |
|---|---|
try { ... } catch (e) { ... } | Catch any exception |
try { ... } on FormatException catch (e) { ... } | Catch specific exception type |
try { ... } catch (e, stackTrace) { ... } | Catch with stack trace |
finally { ... } | Always executes after try/catch |
throw FormatException('Bad input'); | Throw an exception |
throw 'Error message'; | Throw a string (any object can be thrown) |
assert(value > 0, 'Must be positive'); | Debug assertion (disabled in production) |
Common Patterns
| Command | Description |
|---|---|
for (var item in list) { ... } | For-in loop |
if (obj is String) { ... } | Type check with automatic cast |
var result = condition ? 'yes' : 'no'; | Ternary operator |
switch (value) { case 1: ...; break; } | Switch statement |
enum Color { red, green, blue } | Define an enum |
extension on String { ... } | Extension methods on existing types |
class Box<T> { T value; Box(this.value); } | Generic class |
List<int>.generate(5, (i) => i * i)e.g. [0, 1, 4, 9, 16] | Generate list from function |
record = (1, 'hello', true); | Record type (Dart 3+) |
📖 Free, searchable command reference. Bookmark this page for quick access.