Flutter Floor数据库生成失败:无法生成database.g.dart求助
解决Floor未生成database.g.dart及相关错误的方案
错误1:要求为StreamController创建JsonConverter
这个问题是因为FloorDatabase类的changeListener字段被Floor误判为需要持久化的字段,而StreamController本身不需要被序列化。解决方法:
- 在你的数据库类(继承
FloorDatabase的抽象类)中,给changeListener字段添加@ignore注解,明确告诉Floor忽略该字段:@ignore final StreamController<String> changeListener = StreamController.broadcast(); - 若实体类中误用了StreamController类型字段,同样给对应字段加上
@ignore注解。
错误2:提示数据库注解未添加实体,但已配置实体列表
这类问题大多是实体类的注解或配置不规范,导致Floor无法识别实体,进而无法生成database.g.dart:
- 检查所有实体类是否正确添加
@Entity()注解,且实体类文件名符合命名规范(比如user.dart对应生成user.g.dart)。 - 确认
@Database注解中的实体列表引用正确,无拼写错误或未导入的情况,示例:@Database(version: 1, entities: [User, Post]) abstract class AppDatabase extends FloorDatabase { UserDao get userDao; PostDao get postDao; } - 确保每个实体类都配置了主键,这是Floor实体的强制要求,示例:
@Entity() class User { @PrimaryKey(autoGenerate: true) final int? id; final String name; User({this.id, required this.name}); }
修复后重新生成database.g.dart的步骤
解决上述错误后,执行以下操作确保构建正常:
- 在项目根目录运行构建命令:
flutter packages pub run build_runner build - 若存在构建缓存冲突,先清理再构建:
flutter packages pub run build_runner clean flutter packages pub run build_runner build --delete-conflicting-outputs - 检查
pubspec.yaml依赖版本,确保floor和floor_generator版本匹配,示例:dependencies: floor: ^1.4.2 dev_dependencies: floor_generator: ^1.4.2 build_runner: ^2.4.4
内容的提问来源于stack exchange,提问作者Gaël CHEYROUSE
相关产品推荐
相关产品推荐

