Json sqflite+;flatter:map((e)=>;…返回[类的实例]

Json sqflite+;flatter:map((e)=>;…返回[类的实例],json,list,flutter,sqflite,Json,List,Flutter,Sqflite,我目前正在为一个正在开发的小应用程序使用带有颤振的Sqflite 我的用户模型类如下所示: class User { static const tblUser = 'users'; static const colUserId = 'id'; static const colUserName = 'name'; static const colUserMail = 'mail'; static const colUserPhone = 'phone'; User({th

我目前正在为一个正在开发的小应用程序使用带有颤振的Sqflite

我的用户模型类如下所示:

class User {
  static const tblUser = 'users';
  static const colUserId = 'id';
  static const colUserName = 'name';
  static const colUserMail = 'mail';
  static const colUserPhone = 'phone';

  User({this.id, this.name, this.mail, this.phone});

  int id;
  String name;
  String mail;
  String phone;

  User.fromMap(Map<String, dynamic> map) {
    this.id = map[colUserId];
    this.name = map[colUserName];
    this.mail = map[colUserMail];
    this.phone = map[colUserPhone];
  }

  Map<String, dynamic> toMap() {
    var map = <String, dynamic>{
      colUserName: name,
      colUserMail: mail,
      colUserPhone: phone
    };
    if (id != null) {
      map[colUserId] = id;
    }
    return map;
  }
}
  Future<List<User>> fetchAllUser() async {
    Database db = await database;
    List<Map> userslist = await db.query(User.tblUser);
    int count = userslist.length;
    print('Printing $userslist from DBHelper + Length: $count');
    return userslist.length == 0 ? [] : userslist.map((e) => User.fromMap(e)).toList();
  }
类用户{
静态常量tblUser='users';
静态常量colUserId='id';
静态常量colUserName='name';
静态常量colUserMail='mail';
静态常量colUserPhone='phone';
用户({this.id,this.name,this.mail,this.phone});
int-id;
字符串名;
字符串邮件;
字符串电话;
User.fromMap(地图地图){
this.id=map[colUserId];
this.name=map[colUserName];
this.mail=map[colUserMail];
this.phone=map[colUserPhone];
}
映射toMap(){
变量映射={
colUserName:name,
colUserMail:mail,
colUserPhone:phone
};
如果(id!=null){
map[colUserId]=id;
}
返回图;
}
}
在database_helper类中,我创建了正常工作的数据库和表:

class DatabaseHelper {
  static const _databaseName = 'FinmanDatabase.db';
  static const _databaseVersion = 1;

  DatabaseHelper._();

  static final DatabaseHelper instance = DatabaseHelper._();

  Database _database;

  Future<Database> get database async {
    if (_database != null) return _database;
    _database = await _initDatabase();
    return _database;
  }

  _initDatabase() async {
    Directory dbDirectory = await getApplicationDocumentsDirectory();
    String dbpath = join(dbDirectory.path, _databaseName);
    return await openDatabase(dbpath,
        version: _databaseVersion, onCreate: _onCreateDB);
  }

  Future _onCreateDB(Database db, int version) async {
    await db.execute(''' 
    CREATE TABLE ${User.tblUser} (
      ${User.colUserId} INTEGER PRIMARY KEY AUTOINCREMENT,
      ${User.colUserName} TEXT NOT NULL,
      ${User.colUserMail} TEXT NOT NULL,
      ${User.colUserPhone} TEXT NOT NULL
    )
    ''');
  }}
类数据库助手{
static const_databaseName='FinmanDatabase.db';
静态常量_databaseVersion=1;
数据库助手;
静态最终DatabaseHelper实例=DatabaseHelper.uz();
数据库(u)数据库;;
未来获取数据库异步{
如果(_database!=null)返回_database;
_数据库=等待_initDatabase();
返回数据库;
}
_initDatabase()异步{
Directory dbDirectory=等待getApplicationDocumentsDirectory();
字符串dbpath=join(dbDirectory.path,_databaseName);
返回等待openDatabase(dbpath,
版本:_databaseVersion,onCreate:_onCreateDB);
}
Future _onCreateDB(数据库数据库,int版本)异步{
等待数据库执行(“”)
创建表${User.tblUser}(
${User.colUserId}整数主键自动递增,
${User.colUserName}文本不为空,
${User.colUserMail}文本不为空,
${User.colUserPhone}文本不为空
)
''');
}}
但是,当我试图将用户提取到Flatter时,程序返回的是“用户实例”,而不是内容。提取用户的函数如下:

class User {
  static const tblUser = 'users';
  static const colUserId = 'id';
  static const colUserName = 'name';
  static const colUserMail = 'mail';
  static const colUserPhone = 'phone';

  User({this.id, this.name, this.mail, this.phone});

  int id;
  String name;
  String mail;
  String phone;

  User.fromMap(Map<String, dynamic> map) {
    this.id = map[colUserId];
    this.name = map[colUserName];
    this.mail = map[colUserMail];
    this.phone = map[colUserPhone];
  }

  Map<String, dynamic> toMap() {
    var map = <String, dynamic>{
      colUserName: name,
      colUserMail: mail,
      colUserPhone: phone
    };
    if (id != null) {
      map[colUserId] = id;
    }
    return map;
  }
}
  Future<List<User>> fetchAllUser() async {
    Database db = await database;
    List<Map> userslist = await db.query(User.tblUser);
    int count = userslist.length;
    print('Printing $userslist from DBHelper + Length: $count');
    return userslist.length == 0 ? [] : userslist.map((e) => User.fromMap(e)).toList();
  }
Future fetchAllUser()异步{
数据库db=等待数据库;
List userslist=await db.query(User.tblUser);
int count=userslist.length;
print('Printing$userslistfromDbHelper+Length:$count');
返回userslist.length==0?[]:userslist.map((e)=>User.fromMap(e)).toList();
}
下面是我在《颤栗》中的称呼:

class _HomeState extends State<Home> {
  User user = User();
  List<User> _users;
  String _dbExists;
  DatabaseHelper _dbhelper;
  int count = 0;

  @override
  void initState() {
    super.initState();
    setState(() {
      _dbhelper = DatabaseHelper.instance;
    });
    _refreshUserList();
  }

  _refreshUserList() async {
    List<User> x = await _dbhelper.fetchAllUser();
    setState(() {
      _users = x;
      print(_users);
      count = _users.length;
      print(count);
      if (count > 0) {
        _dbExists = 'Database exists';
      } else {
        _dbExists = 'Create a new Database';
      }
    });
  }}
class\u HomeState扩展状态{
User=User();
列出用户;
字符串dbu存在;
DatabaseHelper dbhelper;
整数计数=0;
@凌驾
void initState(){
super.initState();
设置状态(){
_dbhelper=DatabaseHelper.instance;
});
_刷新用户列表();
}
_refreshUserList()异步{
List x=await_dbhelper.fetchAllUser();
设置状态(){
_用户=x;
打印(用户);
count=_users.length;
打印(计数);
如果(计数>0){
_dbExists='数据库存在';
}否则{
_dbExists='创建一个新数据库';
}
});
}}
当print(count)返回1(即用户表中的记录数)时,print(_users)返回[用户实例]

感谢您的帮助

当我试图让用户颤振时,程序返回 “用户实例”而不是内容

因为x是
列表

要获取内容,可以使用for循环

for(var i in x){
   print(i.name); // it will print out the name
}