Класс внутри класса в Dart
Класс можно объявить внутри другого класса. Такой вложенный класс не видит поля внешнего объекта. К нему обращаются через имя внешнего типа:
class Log {
class Line {
String text;
Line(this.text);
}
}
Создадим объект и выведем его:
var line = Log.Line("ok");
print(line.text);
Если вложенному классу нужны данные конкретного внешнего объекта, их передают через конструктор. Создадим заказ и строку с номером заказа и заголовком:
class Order {
int id;
Order(this.id);
class Line {
int orderId;
String title;
Line(this.orderId, this.title);
String label() {
return "$orderId $title";
}
}
}
Создадим объект и вызовем метод:
var line = Order.Line(7, "pen");
print(line.label());
Когда поле внутреннего класса называется так же, как поле внешнего, значение снаружи передают отдельным параметром конструктора:
class Box {
String name;
Box(this.name);
class Item {
String boxName;
String name;
Item(this.boxName, this.name);
String both() {
return "$boxName $name";
}
}
}
Сделайте класс Catalog с вложенным классом
Item: название и цена. Создайте Item
через имя Catalog и выведите название.
Сделайте класс Cart с названием и класс
Row с полем title. Передайте
название корзины в конструктор Row.
Метод Row.tag() возвращает название корзины
и title. Создайте корзину "main",
строку "pen" и выведите tag().