Flutter 无法将参数类型“GeneratedIntColumn”分配给参数类型“int”:摩尔颤振
当连接两个表时,我试图设置一个外键与moorflatter的关系,我在VS代码中得到下面的错误 无法将参数类型“GeneratedIntColumn”分配给参数类型“int” 起初我认为这是因为我使用了一个自动递增字段作为外键,但现在我不太确定,因为当我更改代码时仍然会出现错误 这是我的密码。比较时join语句发生错误;tasks.id.equalscategories.taskIdFlutter 无法将参数类型“GeneratedIntColumn”分配给参数类型“int”:摩尔颤振,flutter,flutter-moor,Flutter,Flutter Moor,当连接两个表时,我试图设置一个外键与moorflatter的关系,我在VS代码中得到下面的错误 无法将参数类型“GeneratedIntColumn”分配给参数类型“int” 起初我认为这是因为我使用了一个自动递增字段作为外键,但现在我不太确定,因为当我更改代码时仍然会出现错误 这是我的密码。比较时join语句发生错误;tasks.id.equalscategories.taskId import 'package:moor/moor.dart'; import 'package:moor_fl
import 'package:moor/moor.dart';
import 'package:moor_flutter/moor_flutter.dart';
part 'moor_database.g.dart';
@DataClassName("Category")
class Categories extends Table {
IntColumn get id => integer().autoIncrement()();
IntColumn get taskId =>
integer().nullable().customConstraint('NULL REFERENCES tasks(id)')();
TextColumn get name => text().withLength(min: 1, max: 100)();
TextColumn get icon => text()();
TextColumn get color => text()();
}
class Tasks extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text().withLength(min: 1, max: 200)();
BoolColumn get completed => boolean().withDefault(Constant(false))();
}
@UseMoor(tables: [Categories, Tasks], daos: [CategoryDao])
class AppDatabase extends _$AppDatabase {
AppDatabase()
: super((FlutterQueryExecutor.inDatabaseFolder(
path: 'todo.sqlite',
logStatements: true,
)));
@override
int get schemaVersion => 1;
@override
MigrationStrategy get migration =>
MigrationStrategy(beforeOpen: (details) async {
await customStatement('PRAGMA foreign_keys = ON');
});
}
class CategoryWithTask {
final Category category;
final Task task;
CategoryWithTask({@required this.category, @required this.task});
}
@UseDao(tables: [Categories, Tasks])
class CategoryDao extends DatabaseAccessor<AppDatabase>
with _$CategoryDaoMixin {
final AppDatabase db;
CategoryDao(this.db) : super(db);
Stream<List<CategoryWithTask>> watchAllCategories() {
return (select(categories)
..orderBy(([
(c) => OrderingTerm(expression: c.name),
])))
.join([leftOuterJoin(tasks, tasks.id.equals(categories.taskId))])
.watch()
.map((rows) => rows.map((row) {
return CategoryWithTask(
category: row.readTable(categories),
task: row.readTable(tasks));
}));
}
}
通过查看来自的代码示例,我意识到了我的错误 而不是tasks.id.equalscategories.taskId
如果要从类别表中检索任务表中的名称并将其显示在列表中,则联接中的表达式应为tasks.id.equalsExpcategories.taskIdHi。你打算怎么办?