Flutter Floor 数据库。生成楼层数据库失败

问题描述 投票:0回答:2

我按照楼层文档一步步进行。 实体、Dao、转换器和数据库已创建。 Build_generator 生成 model.g.dart 文件类型,但不生成 database.g.dart 文件。

我遇到两个错误:

Could not generate `fromJson` code for `changeListener`.
To support the type `StreamController` you can:
* Use `JsonConverter`
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonConverter-class.html
* Use `JsonKey` fields `fromJson` and `toJson`
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/fromJson.html
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/toJson.html
package:floor/src/database.dart:11:39
  ╷
11 │   late final StreamController<String> changeListener;

我觉得很奇怪的错误,因为它要求我为 FloorDatabase 类的侦听器创建一个转换器...

还有:

没有实体添加到数据库注释中。 包:sirusmobile/database/database.dart:93:16 ╷ 93 │ 抽象类 AppDatabase 扩展 FloorDatabase {

但是,各实体消息灵通。

part 'database.g.dart';

@JsonSerializable()
@Database(version: 2, entities: [
  AccesToken,
  Account,
  Chauffeur,
  Coordonnees,
  FilsDiscussion,
  LieuIntervention,
  Mission,
  Permanence,
  PositionGps,
  Secteur,
  Societe,
  Transmission,
  Vehicule,
  Delai,
  Destination,
  Motifs,
  Raison,
  Synchro
])
@TypeConverters([
  StringListConverter,
  ChauffeurConverter,
  DegresUrgenceConverter,
  DelaiConverter,
  DestinationConverter,
  EquipementConverter,
  FilsDiscussionConverter,
  MotifsAnnulationConverter,
  MotifsRefusConverter,
  MotifsSortieBlancheConverter,
  RaisonConverter,
  SocieteConverter,
  VehiculeConverter
])
abstract class AppDatabase extends FloorDatabase {
  AccesTokenDao get accesTokenDao;

  AccountDao get accountTokenDao;

  ChauffeurDao get chauffeurDao;

  CoordonneesDao get coordoneesDao;

  FilsDiscussionDao get filsDiscussionDao;

  LieuInterventionDao get lieuInterventionDao;

  MissionDao get missionDao;

  PermanenceDao get permanenceDao;

  PositionGpsDao get positionGps;

  SecteurDao get secteurDao;

  SocieteDao get societeDao;

  TransmissionDao get transmissionDao;

  VehiculeDao get vehiculeDao;

  DelaiDao get delaiDao;

  DestinationDao get destinationDao;

  MotifsDao get motifsDao;

  RaisonDao get raisonDao;

  SynchroDao get synchroDao;
}

我已经尝试解决这个问题太久了。 有人可以帮我吗? 预先感谢。

database flutter generator floor
2个回答
0
投票

我尝试注释掉 ApDatabase 类中的 @JsonSerialized() 注释,并且有关 changeListener 的错误消失了。

还有第二个: “没有实体添加到数据库注释中。”

不过模型看起来还不错。

例如:

part 'Transmission.g.dart';

@JsonSerializable(includeIfNull: false)
@entity
class Transmission {
  @primaryKey
  int? idPrim;
  int? id;
  String? codeSociete;
  String? codeVehicule;
  int? delaiCalcule;
  bool? negocie;
  int? delaiNegocie;
  int? delaiMax;
  String? etat;

  Transmission(
      {this.id,
        this.codeSociete,
        this.codeVehicule,
        this.delaiCalcule,
        this.negocie,
        this.delaiNegocie,
        this.delaiMax,
        this.etat});

  Transmission.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    codeSociete = json['codeSociete'];
    codeVehicule = json['codeVehicule'];
    delaiCalcule = json['delaiCalcule'];
    negocie = json['negocie'];
    delaiNegocie = json['delaiNegocie'];
    delaiMax = json['delaiMax'];
    etat = json['etat'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['codeSociete'] = this.codeSociete;
    data['codeVehicule'] = this.codeVehicule;
    data['delaiCalcule'] = this.delaiCalcule;
    data['negocie'] = this.negocie;
    data['delaiNegocie'] = this.delaiNegocie;
    data['delaiMax'] = this.delaiMax;
    data['etat'] = this.etat;
    return data;
  }
}

将实体导入 AppDatabase 类似乎也可以。

import 'package:sirusmobile/models/transmission.dart';

0
投票

我回答我的问题是因为我解决了问题。 为此我做了两件事。

  • 在 DAO 中,查询中的类名称不正确。

  • 在实体中我没有 fromMap 和 toMap 方法,只有 json 方法 fromJson 和 toJson。

希望这可以帮助一些人。

美好的一天!

© www.soinside.com 2019 - 2024. All rights reserved.