ZetCode

Dart Data Types

last modified June 4, 2025

Dart is a statically typed language with a rich set of built-in data types. These types help organize and manipulate data in programs efficiently.

The fundamental Dart data types include numbers, strings, booleans, lists, maps, and more. Each type has specific characteristics and operations defined for it.

Numbers: int and double

Dart provides two types for numbers: int for integers and double for floating-point numbers. Both types are subclasses of num.

main.dart
void main() {
  int age = 30;
  double price = 19.99;
  num temperature = 23.5; // Can hold both int and double
  
  print('Age: $age');
  print('Price: $price');
  print('Temperature: $temperature');
  
  // Number operations
  print('Sum: ${age + price}');
  print('Difference: ${price - age}');
}

This example shows basic number type usage. We declare variables of different numeric types and perform arithmetic operations. The num type is flexible.

$ dart main.dart
Age: 30
Price: 19.99
Temperature: 23.5
Sum: 49.99
Difference: -10.01

Strings

Strings represent sequences of characters in Dart. They are immutable and can be created using single or double quotes. String interpolation is supported.

main.dart
void main() {
  String greeting = 'Hello';
  String name = "Alice";
  String message = '$greeting, $name! How are you?';
  
  print(message);
  print('Length: ${message.length}');
  print('Uppercase: ${message.toUpperCase()}');
  print('Contains "Alice": ${message.contains('Alice')}');
  
  // Multi-line string
  String multiLine = '''
  This is a
  multi-line
  string''';
  print(multiLine);
}

We demonstrate string creation, interpolation, and common operations. Triple quotes create multi-line strings. String methods provide useful functionality.

$ dart main.dart
Hello, Alice! How are you?
Length: 23
Uppercase: HELLO, ALICE! HOW ARE YOU?
Contains "Alice": true
This is a
multi-line
string

Booleans

The bool type represents boolean values true and false. It's used in conditional expressions and logical operations. Dart requires explicit boolean values.

main.dart
void main() {
  bool isRaining = true;
  bool isSunny = false;
  int temperature = 25;
  
  print('Is raining: $isRaining');
  print('Is sunny: $isSunny');
  
  // Logical operations
  bool niceWeather = !isRaining && temperature > 20;
  print('Nice weather: $niceWeather');
  
  // Conditional expression
  String weatherMessage = isRaining ? 'Bring umbrella' : 'Enjoy the day';
  print(weatherMessage);
}

This shows boolean variable declaration and usage in logical operations. The ternary operator provides concise conditional expressions based on booleans.

$ dart main.dart
Is raining: true
Is sunny: false
Nice weather: false
Bring umbrella

Lists

Lists are ordered collections of objects in Dart. They are similar to arrays in other languages. Lists can be fixed-length or growable.

main.dart
void main() {
  // Growable list
  List<String> fruits = ['apple', 'banana', 'orange'];
  fruits.add('mango');
  
  // Fixed-length list
  List<int> fixedList = List.filled(3, 0);
  fixedList[1] = 42;
  
  print('Fruits: $fruits');
  print('Fixed list: $fixedList');
  
  // List operations
  print('First fruit: ${fruits.first}');
  print('Last fruit: ${fruits.last}');
  print('Sublist: ${fruits.sublist(1, 3)}');
  
  // List mapping
  var lengths = fruits.map((fruit) => fruit.length);
  print('Fruit lengths: $lengths');
}

We create both growable and fixed-length lists. Various list operations are demonstrated including mapping elements to new values.

$ dart main.dart
Fruits: [apple, banana, orange, mango]
Fixed list: [0, 42, 0]
First fruit: apple
Last fruit: mango
Sublist: [banana, orange]
Fruit lengths: (5, 6, 6, 5)

Maps

Maps are collections of key-value pairs in Dart. Each key must be unique, and keys and values can be of any type. Maps are unordered by default.

main.dart
void main() {
  // Map literal
  Map<String, int> ages = {
    'Alice': 30,
    'Bob': 25,
    'Charlie': 35
  };
  
  // Adding entries
  ages['David'] = 28;
  
  print('Ages: $ages');
  print('Alice\'s age: ${ages['Alice']}');
  
  // Map operations
  print('Keys: ${ages.keys}');
  print('Values: ${ages.values}');
  print('Contains key "Bob": ${ages.containsKey('Bob')}');
  
  // Iterating
  ages.forEach((name, age) => print('$name is $age years old'));
}

This example demonstrates map creation, modification, and common operations. We show how to iterate through map entries using forEach.

$ dart main.dart
Ages: {Alice: 30, Bob: 25, Charlie: 35, David: 28}
Alice's age: 30
Keys: (Alice, Bob, Charlie, David)
Values: (30, 25, 35, 28)
Contains key "Bob": true
Alice is 30 years old
Bob is 25 years old
Charlie is 35 years old
David is 28 years old

Best Practices

Source

Dart Built-in Types Documentation

This tutorial covered Dart's fundamental data types with practical examples demonstrating their usage and common operations.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Dart tutorials.