Dart language cheatsheet

This cheatsheet is based on an internal document created by Googler Mehmet Fidanboylu to help Google engineers remember the syntax for some of Dart’s commonly used features. For an interactive guide to these features and more, see the Dart cheatsheet codelab.

Using literals

'Substitution ${val}'

Puts the value of val into a string literal. Equivalent: 'Substitution' + val

<type>[ ]

Creates an object of type List<type>.

const [1, 2, 3]

Creates a compile-time constant list.

= { }

Initializes a map. Equivalent: new Map<>();

Declaring fields

var Generic var with type inference
final Same as var but cannot be reassigned
const Compile-time constant

Checking types

as Typecast
is instanceof
is! !instanceof

Chaining method calls

a..b = true..c = 5;

Cascade used for chaining access to methods and other members. Equivalent: a.b = true; a.c = 5;

Dealing with null

b ??= val;

If b is null, assign the value of val to b; otherwise, b stays the same.

a = value ?? 0;

If value is null, set a to 0. Otherwise, set a to value.


Conditional access. Equivalent: a == null ? null : a.b

Implementing functions

fn({bool bold = false, bool hidden = false})

Named params with default values.

int incr(int a) => a + 1;

Single return statement can be abbreviated.

Handling exceptions

try {...}
on MyException {...}
catch (e) {...}
finally {...}

Use on to catch a type. Use catch to catch an instance.

Implementing constructors

Normal constructor

Point(this.x, this.y);

Factory constructor

factory Point(int x, int y) => ...;

Use factory when implementing a constructor that doesn’t always create a new instance.

Named constructor

Point.fromJson(Map json) {
    x = json['x'];
    y = json['y'];

Delegating constructor

Point.alongXAxis(num x) : this(x, 0);

Const constructor

const ImmutablePoint(this.x, this.y);

Produces an object that will never change. All fields have to be final.

Initializer list

Point.fromJson(Map jsonMap)
      : x = jsonMap['x'], y = jsonMap['y'];

Initializer lists are handy when setting up final fields.