You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:40:01