Создание значения по умолчанию .Метод toString()

#dart #tostring

Вопрос:

У меня есть много моделей JSON в моем проекте dart, которые я хотел бы иметь строковое представление. Я знаю, что могу переопределить .toString() метод для каждого класса, но мне кажется, что много работы, чтобы писать в основном одно и то же несколько раз. Есть ли способ, которым я могу создать микс или расширение для переопределения toString? Или лучше использовать генерацию кода? (Я нашел этот пакет, но, похоже, он больше не поддерживается)

Строковое представление, которое я ищу, — это просто список всех параметров, например:

 @JsonSerializable()
class User {
  UserOver(
    this.userId,
    this.name,
  );

  int userId;

  /// The full name of the user.
  String name;

  factory UserOverview.fromJson(Map<String, dynamic> json) => _$UserOverviewFromJson(json);
  Map<String, dynamic> toJson() => _$UserOverviewToJson(this);
}
 

должно иметь следующее строковое представление:

User(userId: 1, name: "Name")

Ответ №1:

Ты сам ответил на свой вопрос, приятель. Просто создайте базовый класс и передайте его на аутсорсинг. Это просто.

Например:

 @JsonSerializable()
class User extends BaseModel {
    User({
       required this.userId,
       required this.name,
    });

    int userId;

    /// The full name of the user.
    String name;

    factory User.fromJson(Map<String, dynamic> json) =>
    _$UserOverviewFromJson(json);

    @override
    Map<String, dynamic> toJson() => _$UserOverviewToJson(this);
}
 

Создайте класс базовой модели

 abstract class BaseModel {
    Map<String, dynamic> toJson();

    @override
    String toString() {
        return toJson().toString();
    }
}
 

Не забывай об этом

 User _$UserOverviewFromJson(Map<String, dynamic> json) => User(name: json['name'] as String, userId: json['userId'] as int);

Map<String, dynamic> _$UserOverviewToJson(User instance) => <String, dynamic>{
  'name': instance.name,
  'userId': instance.userId,
};
 

Теперь, чтобы использовать:

 final cool = User(userId: 1, name: "Name"); 
print(cool.toString()); //{name: Name, userId: 1}
 

Комментарии:

1. О, ух ты. Я и не подозревал, что был так близок к ответу. Спасибо!