Bỏ qua để đến nội dung

Switch-Case Statement

🎯 Mục tiêu: Pattern matching với switch-case trong Dart 3.


String day = "Monday";
switch (day) {
case "Monday":
case "Tuesday":
case "Wednesday":
case "Thursday":
case "Friday":
print("Weekday");
break;
case "Saturday":
case "Sunday":
print("Weekend");
break;
default:
print("Unknown");
}

String day = "Monday";
String type = switch (day) {
"Monday" || "Tuesday" || "Wednesday" || "Thursday" || "Friday" => "Weekday",
"Saturday" || "Sunday" => "Weekend",
_ => "Unknown"
};

// Type patterns
Object value = 42;
String result = switch (value) {
int i when i < 0 => "Negative",
int i when i > 0 => "Positive",
int() => "Zero",
String s => "String: $s",
_ => "Unknown"
};
// Record patterns
var point = (x: 10, y: 20);
var description = switch (point) {
(x: 0, y: 0) => "Origin",
(x: var x, y: 0) => "On x-axis at $x",
(x: 0, y: var y) => "On y-axis at $y",
(x: var x, y: var y) => "Point($x, $y)"
};

sealed class UiState {}
class Loading extends UiState {}
class Success extends UiState {
final String data;
Success(this.data);
}
class Error extends UiState {
final String message;
Error(this.message);
}
Widget build(BuildContext context) {
return switch (state) {
Loading() => CircularProgressIndicator(),
Success(:var data) => Text(data),
Error(:var message) => Text("Error: $message"),
};
}

  • Dùng break trong switch cổ điển
  • Dùng switch expression cho Dart 3+
  • Sử dụng pattern matching với sealed classes