当我尝试从Sqflite数据库中获取数据时,我遇到了这个问题:类型'int'不是类型'String'的子类型
这是我的数据库模型:导入'dart:convert';
User userFromJson(String str) => User.fromJson(json.decode(str));
String userToJson(User data) => json.encode(data.toJson());
class User {
int id;
String arname;
String sname;
String spath;
String imgur;
String surl;
User({
this.id, this.arname, this.sname, this.spath, this.imgur, this.surl,
});
factory User.fromJson(Map<String, dynamic> json) => User(
id: json["id"],
arname: json["arname"],
sname: json["sname"],
spath: json["spath"],
imgur: json["imgur"],
surl: json["surl"],
);
Map<String, dynamic> toJson() => {
"id": id, "arname": arname, "sname": sname, "spath": spath, "imgur": imgur, "surl": surl,
};
}
和我的Databae文件看起来像这样:
import 'package:sqflite/sqflite.dart';
import 'package:sqflite/sqlite_api.dart';
import 'package:path/path.dart';
import 'package:music/dbmodel.dart';
class DBProvider {
DBProvider._();
static final DBProvider db = DBProvider._();
static Database _database;
Future<Database> get database async {
if (_database != null) return _database;
_database = await initDB();
return _database;
}
initDB() async {
return await openDatabase(join(await getDatabasesPath(), 'records.db'),
onCreate: (db, version) async {
await db.execute('''
CREATE TABLE files (
id INTEGER PRIMARY KEY, arname TEXT, sname TEXT, spath TEXT, imgur TEXT, surl TEXT
)
''');
}, version: 1);
}
//
newUser(User newUser) async {
final db = await database;
var res = await db.rawInsert('''
INSERT INTO files (
id, arname, sname, spath, imgur, surl
) VALUES (?, ?, ?, ?, ?, ?)
''', [
newUser.id,
newUser.arname,
newUser.sname,
newUser.spath,
newUser.imgur,
newUser.surl
]);
return res;
}
Future<dynamic> getUser() async {
final db = await database;
var res = await db.query("files");
if (res.length == 0) {
return null;
} else {
var resMap = res[0];
return resMap.isNotEmpty ? resMap : Null;
}
}
}
并且我使用这个未来的构建器来获取数据:
body: FutureBuilder(
future: _userFuture,
builder: (_, userData) {
switch (userData.connectionState) {
case ConnectionState.none:
return Container();
case ConnectionState.waiting:
return Container();
case ConnectionState.active:
case ConnectionState.done:
//if (!newUser.containsKey("sname")) {
//}
newUser = Map<String, String>.from(userData.data);
return Column(children: <Widget>[
Text(
newUser['spath'],
),
Text(
newUser['imgur'],
)
]);
}
return Container();
},
),
如果您还可以帮助我检索该数据库中的所有数据,而不仅仅是一行的话,我也非常感激:)
谢谢你们,在研究了这个问题之后,终于想出了解决的办法,解决方案是更改
Map<String, String>
到
Map<dynamic, dynamic>