在 Flutter 中使用 moor 时使用关键字时出错
Posted
技术标签:
【中文标题】在 Flutter 中使用 moor 时使用关键字时出错【英文标题】:Error in using keywords while using moor in Flutter 【发布时间】:2020-01-14 07:19:29 【问题描述】:在moor flutter中,关键字select, into, update, delete
显示错误如下-
错误:无法推断类型参数“R”。试图推断“列表” 'R' 不起作用:类型参数 'R' 声明为扩展 '数据类'。 'Lists' 类型推断自:参数 'table' 声明为“TableInfo”,但参数为“$ListsTable”。考虑 将显式类型参数传递给泛型。
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】:您在这些函数中使用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);
这是与moor 表相关的类。您应该使用List
类。但是我建议重命名你的表,因为 Dart 已经有一个 List
类。
从docs,你可以看到Todos
getter 带有一个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();
【讨论】:
以上是关于在 Flutter 中使用 moor 时使用关键字时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQFLite 或 Moor 库将 JSON 数据存储到颤振中的数据库表中
无法分别构建 Flutter Web 和 Flutter Mobile 应用