如何与 moor 一起实施 Change Notifier?
How to implement Change Notifier along with moor?
我正在尝试制作一个具有数据库的应用程序,它有一个 table Students
class Students extends Table{
IntColumn get RollNumber=>integer().autoIncrement()();
TextColumn get Name => text().withLength(min: 3,max:32)();
Students( String name){
Name==name;
}
@UseMoor(tables: [Students])
class myDatabase extends _$myDatabase {
myDatabase() : super(_openConnection());
@override
int get schemaVersion => 1;
// loads all student entries
Future<List<Student>> getAllStudents() => select(students).get();
//Watches all entries in Students and automatically
//emits new data when data changes
Stream<List<Student>> watchAllStudents()=> select(students).watch();
Future insertStudent(Student student )=>into(students).insert(student);
//Future UpdateStudent(Student student )=>update(students).replace(student);
//Future DeleteStudent(Student student )=>into(students).insert(student);
}
现在我尝试将更改通知程序与 myDatabase 一起使用,但在这里我无法扩展它,所以我尝试这样做
class myDatabase extends _$myDatabase with ChangeNotifier{
..
}
但是学生class显示错误。现在不知道怎么办了。
更好的方法是为数据库操作创建服务,例如
class DatabaseService with ChangeNotifier {
Future<List<Students>> getListOfStudents() async {
// fetch list of students here and return it to the function that calls the DB service
}
}
然后创建一个 ViewModel,它为 Screen/Widget 或您打算供学生使用的视图实现 ChangeNotifier。ViewModel 将调用 DatabaseService 和 return 来自数据库的值。例如
class StudentViewModel with ChangeNotifier {
setState() {
notifyListeners();
}
Future<void> getStudents() async {
// get students list from db service and call setState() to notifyListeners
}
}
注意:数据库实例有点昂贵,因此您应该创建数据库和数据库服务的单例实例。如果您尝试打开数据库的多个实例,moor 将抛出一个异常来提醒您。
我正在尝试制作一个具有数据库的应用程序,它有一个 table Students
class Students extends Table{
IntColumn get RollNumber=>integer().autoIncrement()();
TextColumn get Name => text().withLength(min: 3,max:32)();
Students( String name){
Name==name;
}
@UseMoor(tables: [Students])
class myDatabase extends _$myDatabase {
myDatabase() : super(_openConnection());
@override
int get schemaVersion => 1;
// loads all student entries
Future<List<Student>> getAllStudents() => select(students).get();
//Watches all entries in Students and automatically
//emits new data when data changes
Stream<List<Student>> watchAllStudents()=> select(students).watch();
Future insertStudent(Student student )=>into(students).insert(student);
//Future UpdateStudent(Student student )=>update(students).replace(student);
//Future DeleteStudent(Student student )=>into(students).insert(student);
}
现在我尝试将更改通知程序与 myDatabase 一起使用,但在这里我无法扩展它,所以我尝试这样做
class myDatabase extends _$myDatabase with ChangeNotifier{
..
}
但是学生class显示错误。现在不知道怎么办了。
更好的方法是为数据库操作创建服务,例如
class DatabaseService with ChangeNotifier {
Future<List<Students>> getListOfStudents() async {
// fetch list of students here and return it to the function that calls the DB service
}
}
然后创建一个 ViewModel,它为 Screen/Widget 或您打算供学生使用的视图实现 ChangeNotifier。ViewModel 将调用 DatabaseService 和 return 来自数据库的值。例如
class StudentViewModel with ChangeNotifier {
setState() {
notifyListeners();
}
Future<void> getStudents() async {
// get students list from db service and call setState() to notifyListeners
}
}
注意:数据库实例有点昂贵,因此您应该创建数据库和数据库服务的单例实例。如果您尝试打开数据库的多个实例,moor 将抛出一个异常来提醒您。