Ошибка использования ключевых слов при использовании moor во Flutter - PullRequest
0 голосов
/ 14 января 2020

В трепетании мавров ключевые слова select, into, update, delete показывают ошибку, как показано ниже -

ошибка: не удалось определить тип параметра 'R'. Попытка вывести «Списки» для «R», который не работает: введите параметр «R», объявленный для расширения «DataClass». Тип 'Lists' был выведен из: Параметр 'table', объявленный как 'TableInfo', но аргумент '$ ListsTable'. Рассмотрите возможность передачи аргументов явного типа в шаблон c.

import 'package:moor_flutter/moor_flutter.dart';
import 'package:moor/moor.dart';

part 'List.g.dart';    
@DataClassName('Lists')    
class Lists extends Table{    
  IntColumn get id => integer().autoIncrement()();    
  TextColumn get name => text().withLength(min:1, max: 50)();    
  DateTimeColumn get date => dateTime().nullable()();     
 BoolColumn get strikeThrough => boolean().withDefault(Constant(false))();    
}

@UseMoor(tables: [Lists])    
class AppDatabase extends _$AppDatabase {   
AppDatabase(): super((FlutterQueryExecutor.inDatabaseFolder(path:'db.sqlite',logStatements:true)));

@override    
int get schemaVersion => 1;    
 Future<List<Lists>> getAllLists() => select(lists).get();    
  Stream<List<Lists>> watchAllLists() => select(lists).watch();    
  Future insertLists(Lists list) => into(lists).insert(list);    
  Future updateLists(Lists list) => update(lists).replace(list);    
  Future deleteLists(Lists list) => delete(lists).delete(list);    
}

1 Ответ

0 голосов
/ 14 января 2020

Вы используете Lists класс в этих функциях

Future<List<Lists>> getAllLists() => select(lists).get();    
Stream<List<Lists>> watchAllLists() => select(lists).watch();    
Future insertLists(Lists list) => into(lists).insert(list);    
Future updateLists(Lists list) => update(lists).replace(list);    
Future deleteLists(Lists list) => delete(lists).delete(list);    

, который является классом, связанным с таблицами мавров. Вы должны использовать List класс. Однако я бы посоветовал переименовать вашу таблицу, потому что у Dart уже есть класс List.

Из документов видно, что геттер Todos поставляется с Todo (единственное число ) класс:

// inside the database class, the `todos` getter has been created by moor.
@UseMoor(tables: [Todos, Categories])                           // Todos getter
class MyDatabase extends _$MyDatabase {  

  Future<List<Todo>> get allTodoEntries => select(todos).get(); // Todo class
  //             ^ no "s" here
  Stream<List<TodoEntry>> watchEntriesInCategory(Category c) {
    return (select(todos)..where((t) => t.category.equals(c.id))).watch();
  }
}
...