sqflite:类型'int'不是类型'String'的子类型

问题描述 投票:1回答:1

当我尝试从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();
    },
  ),

如果您还可以帮助我检索该数据库中的所有数据,而不仅仅是一行的话,我也非常感激:)

flutter flutter-layout flutter-test
1个回答
0
投票

谢谢你们,在研究了这个问题之后,终于想出了解决的办法,解决方案是更改

Map<String, String>

Map<dynamic, dynamic>
© www.soinside.com 2019 - 2024. All rights reserved.