在 Firebase (json_annotation.dart 上设置嵌套地图的模型



我的Firebase数据库模型如下所示:

dbRef
|___userId
|____Cars
|____Alfa_Romeo
|             |____Year: 1992
|             |____Price: 10000
|__________Audi
|             |____Year: 1998
|             |____Price: 3000
|___________BMW
|____Year: 2001
|____Price: 7000

然后我有一辆看起来像

import 'package:json_annotation/json_annotation.dart';

part 'car.g.dart';
/// An annotation for the code generator to know that this class needs the
/// JSON serialization logic to be generated.
@JsonSerializable()
class Car {
Carta(this.model, this.details);
String model;
List details;
factory Car.fromJson(Map<String, dynamic> json) => _$CarFromJson(json);
Map<String, dynamic> toJson() => _$CarToJson(this);
}

现在,当我将数据设置为Firebase时,我得到:

dbRef
|___userId
|____Cars
|____Alfa_Romeo
|____Year: 1992
|____Price: 10000

。我希望它像第一个图中的模型一样。 如何将细节嵌套在"模型"子项中? 请问谁能帮我解决这个问题?

编辑:只是为了确保我清楚我想要什么。 此代码来自 Flutter Team 文档示例:

import 'address.dart';
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable(explicitToJson: true)
class User {
String firstName;
Address address;
User(this.firstName, this.address);
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}

此代码生成以下输出:

name: John, address: {street: My st., city: New York}}

我想要实现的是约翰成为子密钥和嵌套在里面的地址,因为可能有多个地址数组。地址字段应该成为一个键(它将是唯一的(,然后它将有一个项目地图,每个项目只有 2 个字段描述和价格。

我建议将细节分解到他们自己的类中,就像这个例子一样,https://flutter.dev/docs/development/data-and-backend/json#generating-code-for-nested-classes。

编辑

尝试手动映射模型并将其余属性复制到另一个 Map,而不是使用 JsonSerializable。

class Car {
Car({this.model, this.details});
String model;
Map<String, dynamic> details;
factory Car.fromJson(Map<String, dynamic> json) {
Map<String, dynamic> details = Map<String, dynamic>.from(json);
details.remove('model');
return new Car(
model: json['model'],
details: details
);
}
Map<String, dynamic> toJson() {
Map<String, dynamic> json = Map<String, dynamic>.from(details);
json['model'] = model;
return json;
}
}

最新更新