import 'dart:async';
import 'package:moor_flutter/moor_flutter.dart';
part 'tables.g.dart';
//Adds a Categorys table...
class Categorys extends Table {
IntColumn get cid => integer().named('cid').autoIncrement()();
TextColumn get ctitle => text().named('ctitle')();
DateTimeColumn get ctimestamp => dateTime().named('ctimestamp')();
TextColumn get mategorymtitle =>
text().nullable().customConstraint('NULL REFERENCES mategorys(mtitle)')();
}
//Adds a Mategory table...
class Mategorys extends Table {
//IntColumn get mid => integer().named('mid').autoIncrement()();
TextColumn get mtitle => text().named('mtitle')();
DateTimeColumn get mtimestamp => dateTime().named('mtimestamp')();
//IntColumn get cid => integer().named('cid')();
@override
Set<Column> get primaryKey => {mtitle};
}
//Adds a CategorywithMategory class...
class CategoryWithMategory {
final Category category;
final Mategory mategory;
CategoryWithMategory({
@required this.category,
@required this.mategory,
});
}
//Adds a MyDatabase class...
@UseMoor(tables: [Categorys, Mategorys], daos: [CategorysDao, MategorysDao])
class MyDatabase extends _$MyDatabase {
MyDatabase()
: super(FlutterQueryExecutor.inDatabaseFolder(
path: 'db.sqlite',
));
@override
int get schemaVersion => 1;
}
//Adds a CategorysDao name...
@UseDao(tables: [Categorys,Mategorys])
class CategorysDao extends DatabaseAccessor<MyDatabase>
with _$CategorysDaoMixin {
CategorysDao(MyDatabase db) : super(db);
Stream<List<CategoryWithMategory>> watchAllCategorys() {
return (select(categorys)
..orderBy(
[
(t) => OrderingTerm(expression: t.cid, mode: OrderingMode.asc),
(t) => OrderingTerm(expression: t.mategorymtitle),
],
))
.join(
[
leftOuterJoin(mategorys,
mategorys.mtitle.equalsExp(categorys.mategorymtitle)),
],
)
.watch()
.map((rows) => rows.map(
(row) {
return CategoryWithMategory(
category: row.readTable(categorys),
mategory: row.readTable(mategorys),
);
},
).toList());
}
Future<List<Category>> get allWatchingCategorys => select(categorys).get();
//Adds a category name...
void addCategory({String ctitle, DateTime ctimestamp}) {
final _entry = CategorysCompanion(
ctitle: Value(ctitle),
ctimestamp: Value(ctimestamp),
);
into(categorys).insert(_entry);
}
//Updates a category name...
void updateCategory({String ctitle, DateTime ctimestamp}) {
final _entry = CategorysCompanion(
ctitle: Value(ctitle),
ctimestamp: Value(ctimestamp),
);
update(categorys).write(_entry);
}
}
//Adds a MategoryDao name...
class MategorysDao extends DatabaseAccessor<MyDatabase>
with _$MategorysDaoMixin {
MategorysDao(MyDatabase db) : super(db);
Future<List<Mategory>> get allWatchingMategorys => select(mategorys).get();
Stream<List<Mategory>> get watchAllMategorys => select(mategorys).watch();
//Adds a mategory name...
void addMategory({String mtitle, DateTime mtimestamp}) {
final _entry = MategorysCompanion(
mtitle: Value(mtitle),
mtimestamp: Value(mtimestamp),
);
into(mategorys).insert(_entry);
}
//Updates a mategory name...
void updateMategory({String mtitle, DateTime mtimestamp}) {
final _entry = MategorysCompanion(
mtitle: Value(mtitle),
mtimestamp: Value(mtimestamp),
);
update(mategorys).write(_entry);
}
}
** Я сделал эту программу в дротике в android студии. Он имеет две таблицы категорий и категорий. Mategorys это не что иное, как подсписок категорий. Приведенная выше программа во флаттере показывает ошибку в классе CatgorysDao, в leftouterjoin внутри метода watchAllCategorys из-за mategorys. Не мог понять почему. Кто-нибудь может узнать ошибку, пожалуйста? Я не могу написать правильную программу с двумя или более таблицами, используя библиотеку moor во флаттере. Пожалуйста, помогите ...