Builders Academy
Dart — Le langage de Flutter
2 of 3

Chapitre 1 · Leçon 2

POO en Dart

Classes, héritage, mixins et interfaces

Section 1

Classes et constructeurs

Step 1

Définir une classe

Dart a un système de classes classique avec des constructeurs, des getters/setters et une syntaxe très concise pour initialiser les propriétés.

snippet.dart

dart
1class Tutorial {
2  // Propriétés finales (immuables après construction)
3  final String id;
4  final String title;
5  final String slug;
6  final int duration; // en minutes
7
8  // Propriété mutable
9  bool isCompleted;
10
11  // Constructeur avec initialisation courte
12  Tutorial({
13    required this.id,
14    required this.title,
15    required this.slug,
16    required this.duration,
17    this.isCompleted = false,
18  });
19
20  // Constructeur factory — peut retourner une instance existante
21  factory Tutorial.fromJson(Map<String, dynamic> json) {
22    return Tutorial(
23      id: json['id'] as String,
24      title: json['title'] as String,
25      slug: json['slug'] as String,
26      duration: json['duration'] as int,
27      isCompleted: json['isCompleted'] as bool? ?? false,
28    );
29  }
30
31  // Getter calculé
32  String get displayDuration {
33    if (duration < 60) return '$duration min';
34    final hours = duration ~/ 60;
35    final mins = duration % 60;
36    return '${hours}h${mins > 0 ? ' ${mins}min' : ''}';
37  }
38
39  // Conversion en JSON
40  Map<String, dynamic> toJson() => {
41    'id': id,
42    'title': title,
43    'slug': slug,
44    'duration': duration,
45    'isCompleted': isCompleted,
46  };
47
48  
49  String toString() => 'Tutorial($title, $displayDuration)';
50}

Step 2

Mixins — composition horizontale

Les mixins permettent de partager du comportement entre des classes sans héritage. C'est l'alternative à l'héritage multiple.

snippet.dart

dart
1class Tutorial {
2  // Propriétés finales (immuables après construction)
3  final String id;
4  final String title;
5  final String slug;
6  final int duration; // en minutes
7
8  // Propriété mutable
9  bool isCompleted;
10
11  // Constructeur avec initialisation courte
12  Tutorial({
13    required this.id,
14    required this.title,
15    required this.slug,
16    required this.duration,
17    this.isCompleted = false,
18  });
19
20  // Constructeur factory — peut retourner une instance existante
21  factory Tutorial.fromJson(Map<String, dynamic> json) {
22    return Tutorial(
23      id: json['id'] as String,
24      title: json['title'] as String,
25      slug: json['slug'] as String,
26      duration: json['duration'] as int,
27      isCompleted: json['isCompleted'] as bool? ?? false,
28    );
29  }
30
31  // Getter calculé
32  String get displayDuration {
33    if (duration < 60) return '$duration min';
34    final hours = duration ~/ 60;
35    final mins = duration % 60;
36    return '${hours}h${mins > 0 ? ' ${mins}min' : ''}';
37  }
38
39  // Conversion en JSON
40  Map<String, dynamic> toJson() => {
41    'id': id,
42    'title': title,
43    'slug': slug,
44    'duration': duration,
45    'isCompleted': isCompleted,
46  };
47
48  
49  String toString() => 'Tutorial($title, $displayDuration)';
50}

Topics and skills covered

  • Dart
  • OOP
  • Classes
  • Mixins
  • Interfaces