创建默认的 .toString() 方法

Creating a default .toString() method

我的 dart 项目中有很多 JSON 模型,我想用字符串表示。我知道我可以覆盖每个 class 的 .toString() 方法,但是多次编写基本相同的东西感觉就像很多工作。有没有一种方法可以创建混合或扩展来覆盖 toString?还是使用代码生成更好? (我找到了this package,不过好像没人维护了)

我要找的字符串表示只是所有参数的列表,例如:

@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")

你在那里回答了你自己的问题,伙计。只需创建一个基地 class 并将其外包。很简单。

例如:

@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);
}

创建基础模型class

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}