Json sqflite+;flatter:map((e)=>;…返回[类的实例]
我目前正在为一个正在开发的小应用程序使用带有颤振的Sqflite 我的用户模型类如下所示: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
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
}