Flutter中Isar数据库如何根据手机号获取用户对象属性
解决Isar数据库查询后无法访问User属性的问题
首先你要注意:findAll()是异步方法,返回的是Future<List<User>>,如果不等待异步操作完成,你拿到的只是一个Future对象,而非实际的用户列表,这会导致无法直接访问属性。
正确操作步骤:
- 异步获取用户列表:把查询代码放在异步函数里,用
await等待结果返回:
// 确保这段代码在async修饰的函数内部 final List<User> users = await widget.isar.users.where() .phoneEqualTo(phone) .findAll();
- 提取用户姓名:因为你给手机号加了索引,匹配结果应该最多只有一个用户,直接取列表第一个元素的
name属性即可:
if (users.isNotEmpty) { String targetUserName = users.first.name; // 这里就可以使用targetUserName做后续操作,比如显示在UI上 } else { // 没有找到对应手机号的用户,做相应提示或处理 }
调试小技巧:
如果想打印时直接看到User的具体属性值,给User类重写toString()方法就行:
@Collection() class User{ Id? id; late String name; late String email; @Index() late String phone; @override String toString() { return 'User{id: $id, name: $name, email: $email, phone: $phone}'; } }
之后打印users就能看到每个实例的具体属性,方便调试。
内容的提问来源于stack exchange,提问作者Sharvan Kumaran
相关产品推荐
相关产品推荐

