Flutter Floor 数据库。无法生成楼层数据库

Flutter Floor Database. Failed to generate the floor database

提问人:Gaël CHEYROUSE 提问时间:9/25/2023 最后编辑:Gaël CHEYROUSE 更新时间:9/30/2023 访问量:98

问:

我一步一步地遵循地板文档。 实体、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;
}

我试图解决这个问题已经太久了。 有人可以帮我吗? 提前致谢。

数据库 Flutter Generator Floor

评论

0赞 Moïse Rajesearison 9/25/2023
您是否有一个类,您可以在 rmodel 中声明此“late final StreamController<String> changeListener;”?
0赞 Gaël CHEYROUSE 9/25/2023
你好 Moïse Rajesearaison,谢谢你。完全没有。我没有在任何地方声明这个 streamcontroler。

答:

0赞 Gaël CHEYROUSE 9/25/2023 #1

我试图注释掉类中的注释,但有关changeListener的错误消失了。@JsonSerializable()AppDatabase

还有第二个:

没有向数据库注释添加任何实体。

但是,模型似乎还可以。

例如:

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赞 Gaël CHEYROUSE 9/29/2023 #2

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

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

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

希望这可以帮助一些人。

日安!