Flutter中Laragon数据库查询结果转List<User>报错求助
解决mysql1查询结果转List的问题
首先,你混淆了HTTP请求的响应结构和mysql1库的查询结果结构——mysql1执行查询后返回的是Results类型对象,没有body属性,这就是你出错的根源。以下是正确的转换方案:
1. 确认User类结构
假设你的User类是这样的(可根据实际字段调整):
class User { final int id; final String name; final String email; User({required this.id, required this.name, required this.email}); // 从mysql1的Row对象转换为User的工厂方法 factory User.fromRow(Row row) { return User( id: row['id'] as int, name: row['name'] as String, email: row['email'] as String, ); } }
2. 正确的查询与转换代码
使用mysql1执行查询后,遍历Results中的Row对象,通过User.fromRow完成转换:
import 'package:mysql1/mysql1.dart'; Future<List<User>> fetchUsers() async { // 建立数据库连接(替换为你的Laragon数据库配置) final conn = await MySqlConnection.connect(ConnectionSettings( host: 'localhost', port: 3306, user: 'root', password: '', // Laragon默认root无密码 db: 'your_database_name', )); // 执行查询 final results = await conn.query('SELECT id, name, email FROM users'); // 转换为List<User> final users = results.map((row) => User.fromRow(row)).toList(); // 关闭连接 await conn.close(); return users; }
常见问题排查
- 确保查询语句的字段名和User类属性完全匹配(大小写敏感,取决于数据库配置)
- 如果数据库字段允许为空,转换时需处理null值,比如
row['name'] as String? ?? '' - 确认mysql1库为最新版本,避免兼容性问题
内容的提问来源于stack exchange,提问作者Rafael Reis
相关产品推荐
相关产品推荐

