Flutter SQLlite 参数类型“Future<String>”无法分配给参数类型“String”错误
Posted
技术标签:
【中文标题】Flutter SQLlite 参数类型“Future<String>”无法分配给参数类型“String”错误【英文标题】:Flutter SQLlite the argument type 'Future<String>' can't be assigned to the parameter type 'String' error 【发布时间】:2020-10-22 01:31:01 【问题描述】:我已经复制并修改了这个官方教程中的代码:https://flutter.dev/docs/cookbook/persistence/sqlite 我的插入版本如下所示:
final Future<Database> database = openDatabase(
join(await getDatabasesPath(), 'user_database.db'),
onCreate: (db, version)
return db.execute(
"CREATE TABLE users(uid INTEGER PRIMARY KEY, display name TEXT, email TEXT)",
);
,
version: 1,
);
Future<void> insertUser(User user) async
final Database db = await database;
await db.insert(
'users',
user.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
final u = User("_displayName", "_email", "_ownerOfClub", "_password", "_id");
await insertUser(u);
但它显示了 await getDatabasesPath() 部分的错误:对于 await 它说:意外的文本 'await',对于 getDatabasesPath():参数类型 'Future' 不能分配给参数类型'字符串'。
【问题讨论】:
【参考方案1】:试试这个方法
Future<Database> database ;
void openDBFunction() async
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'demo.db');
// open the database
database = await openDatabase(path, version: 1,
onCreate: (Database db, int version) async
// When creating the db, create the table
await db.execute(
'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
);
或
void openDBFunction() async
// open the database
database = await openDatabase(join(await getDatabasesPath(), 'demo.db'), version: 1,
onCreate: (Database db, int version) async
// When creating the db, create the table
await db.execute(
'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
);
【讨论】:
现在它为 getDatabasesPath() 的等待、openDatabase 和 openDataBase() 的第一个参数给出了一个错误,它表示只能在初始化程序中访问静态成员。 你需要将它嵌套在一个异步函数中以上是关于Flutter SQLlite 参数类型“Future<String>”无法分配给参数类型“String”错误的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 错误:参数类型'String/*1*/'不能分配给参数类型'String/*2*/'
Flutter:参数类型“String”不能分配给参数类型“Uri”[重复]
Flutter - 参数类型“String”不能分配给参数类型“Uri”[重复]
flutter-web:通过 Location 插件获取 web 上的位置