Как использовать 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, поэтому прошу помочь, кто уже работал с этим.


Ответы (0 шт):