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

Flutter中提交表单时无法将user_id存入flowerbook表的问题

问题根源与解决步骤

核心问题是你传递的User对象从登录环节开始就没有正确获取/赋值user_id,导致后续菜单页面、表单页面拿到的user.user_id都是NULL,最终插入flowerbook表时违反NOT NULL约束。

以下是具体排查和修复步骤:

1. 验证登录环节的User对象是否正确赋值user_id

登录时从数据库查询用户信息后,必须确保把user表中的user_id字段正确赋值给User对象。示例代码:

// 登录后从数据库结果实例化User对象
Map<String, dynamic> userData = await db.query('user', where: 'username = ?', whereArgs: [username]);
User loggedInUser = User(
  user_id: userData['user_id'], // 关键:必须正确提取数据库中的user_id
  username: userData['username'],
  password: userData['password'],
  f_name: userData['f_name'],
  l_name: userData['l_name'],
  email: userData['email'],
  phone: userData['phone'],
);
// 打印确认,此处必须输出非NULL的数字
print("登录用户ID: ${loggedInUser.user_id}");

如果这里打印的user_id是NULL,说明登录查询逻辑有问题,比如查询结果未包含user_id,或者字段名拼写错误。

2. 检查菜单页面接收的User对象是否有效

在菜单页面的初始化阶段打印widget.user.user_id,确认传递到菜单页面的User对象已经有正确的user_id:

@override
void initState() {
  super.initState();
  print("菜单页面用户ID: ${widget.user.user_id}");
}

如果这里也是NULL,说明登录后跳转到菜单页面时,传递的User对象本身就有问题,需要检查跳转时的传值代码(比如Navigator.push的参数)。

3. 确认表单页面的传值是否正常

在FormPage的初始化阶段打印widget.user.user_id,确认接收到的User对象包含有效ID:

@override
void initState() {
  super.initState();
  print("表单页面用户ID: ${widget.user.user_id}");
}

如果这里还是NULL,说明菜单页面传递给FormPage的User对象丢失了user_id,需要检查User类的定义是否正确(比如字段名是否和数据库一致,是否是可空类型导致赋值丢失)。

4. 检查Flowerbook的数据库插入逻辑

确认Flowerbook.register方法在插入时,正确使用了flowerbook对象的user_id:

  • 检查Flowerbook类的toMap方法,确保包含user_id字段:
Map<String, dynamic> toMap() {
  return {
    'deliver_date': deliver_date,
    'arrangement': arrangement,
    'flower_type': flower_type,
    'user_id': user_id, // 此处不能遗漏,且值必须非空
  };
}
  • 检查register方法的插入逻辑,确保调用toMap()时没有覆盖user_id:
static Future<void> register(Flowerbook flowerbook) async {
  final db = await DatabaseHelper.instance.database;
  await db.insert(
    'flowerbook',
    flowerbook.toMap(),
    conflictAlgorithm: ConflictAlgorithm.replace,
  );
}

关键总结

所有问题的源头都是User对象的user_id字段没有被正确初始化或传递,只要确保从登录查询开始,user_id就被正确赋值并在页面间传递,后续插入数据库时就不会出现NULL的情况。

内容的提问来源于stack exchange,提问作者Nad Ham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:25:14