Класс-значение в карте в Dart
Карта связывает ключ и значение - как в уроке про карты объектов, только значением часто служит запись класса-значения с несколькими полями. Литерал карты связывает ключ с готовым объектом:
class Post {
final String title;
final int likes;
const Post(this.title, this.likes);
@override
String toString() => "Post($title, $likes)";
}
Поместим объекты в карту:
var byId = {
1: Post("Ann", 25),
2: Post("Bob", 30),
};
print(byId[1]?.title);
Доступ по ключу возвращает nullable-ссылку: если
ключа нет, результат null. Поля записи
читают оператором ?. или после проверки
на null:
class Config {
final String host;
final int port;
Config(this.host, this.port);
@override
String toString() => "Config($host, $port)";
}
Поместим объекты в карту:
var env = {"prod": Config("api.app", 443)};
var cfg = env["prod"];
if (cfg != null) {
print(cfg.port);
}
Карту можно обойти в цикле: на каждой паре
key и value значение уже имеет
тип класса-значения и печатается или
сравнивается как отдельный объект:
class Stats {
final int views;
final int likes;
Stats(this.views, this.likes);
@override
String toString() => "Stats($views, $likes)";
}
Поместим объекты в карту:
var pages = {
"home": Stats(100, 4),
"blog": Stats(50, 2),
};
for (var entry in pages.entries) {
print("${entry.key} ${entry.value.views}");
}
Сделайте класс Phone с полями
model и year.
Дана карта:
var stock = {
"p1": Phone("X1", 2022),
"p2": Phone("Y2", 2024),
};
Выведите на экран модель телефона с ключом
"p2" из карты stock.
Сделайте класс Limit с полями
max и used.
Соберите карту из двух ключей "free"
и "pro" с разными лимитами.
Выведите на экран значение used для
тарифа "free".