Как использовать Sqlite во Flutter'e со сложными типами моделей
Всем доброго времени суток! Есть такая проблема:
Имеется модель пользователя
class UserModel {
String name;
String email;
String phone;
bool phoneConfirmed;
bool emailConfirmed;
SettingsModel notificationSettings;
List<TripModel> trips;
}
Имеются функции toMap() и fromMap(), которые работают с данной моделью:
factory UserModel.fromMap(Map<String, dynamic> json) {
return new UserModel(
name: json["name"],
email: json["email"],
phone: json["phone"].toString(),
phoneConfirmed: json["phoneConfirmed"] == 1,
emailConfirmed: json["emailConfirmed"] == 1,
**notificationSettings: SettingsModel.fromJson(json["notificationSettings"] as Map<String, dynamic>),**
*// trips: json["trips"]*
);
}
Map<String, dynamic> toMap() {
Map<String, dynamic> map = {
"name": name,
"email": email,
"phone": phone,
"phoneConfirmed": phoneConfirmed,
"emailConfirmed": emailConfirmed,
"notificationSettings": notificationSettings,
};
return map;
}
Есть вспомогательные модели, которые содержит в себе юзер, одна из них - настройки:
class SettingsModel {
@JsonKey(name: 'TRIP_RECIEVED')
bool tripItinenaryReceived;
@JsonKey(name: 'PRE_TRIP_UPDATES')
bool preTripUpdates;
@JsonKey(name: 'IDENTITY_UPDATE')
bool identityRelatedUpdates;
@JsonKey(name: 'PROMOTIONS')
bool promotionsAndOffers;
}
factory SettingsModel.fromMap(Map<String, dynamic> json) => new SettingsModel(
tripItinenaryReceived: json["TRIP_RECIEVED"] == 1,
preTripUpdates: json["PRE_TRIP_UPDATES"] == 1,
identityRelatedUpdates: json["IDENTITY_UPDATE"] == 1,
promotionsAndOffers: json["PROMOTIONS"] == 1
);
Map<String, dynamic> toMap() => {
"TRIP_RECIEVED": tripItinenaryReceived,
"PRE_TRIP_UPDATES": preTripUpdates,
"IDENTITY_UPDATE": identityRelatedUpdates,
"PROMOTIONS": promotionsAndOffers
};
И есть связанная бд sqlite, которая работает с моделью юзера. Проблема в том, что после получения модели юзера от сервера, я не знаю, как работать с полями, которые являются моделями (в случае юзера - это настройки).
Код БД:
static void onCreate(Database db, int version) async {
await db.execute(
"CREATE TABLE User("
"name STRING,"
"email STRING,"
"phone STRING,"
"phoneConfirmed BOOL,"
"emailConfirmed BOOL,"
**"notificationSettings STRING)"**
);
await db.execute(
"CREATE TABLE Settings("
"TRIP_RECIEVED BOOL,"
"PRE_TRIP_UPDATES BOOL,"
"IDENTITY_UPDATE BOOL,"
"PROMOTIONS BOOL)"
);
}
Как указывать поле notificationSettings для юзера, чтобы оно хранилось в БД? Как String? Массив string'ов? Не смог найти примера или гайда, где бы использовались сложные модели при работе с sqlite, поэтому прошу помочь, кто уже работал с этим.