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

Flutter中TextField向sqflite插入数据生成多行而非单行的问题求助

问题根源

你当前的代码会生成三条独立记录,核心原因是在_onSubmitted方法中连续三次调用了widget.onSubmitted,每次单独传入一个字段值。这相当于触发三次sqflite插入操作,自然会生成三条记录,而非合并成一条。

解决方案

需要将三个字段打包成一个整体(Map或自定义模型类),一次性传给widget.onSubmitted,再在父组件中执行单条记录的插入操作。

方式1:使用Map打包字段

1. 修改_onSubmitted方法

将三个字段合并为一个Map,只调用一次widget.onSubmitted:

void _onSubmitted(String text, String qnt, String um) {
  if (text.isEmpty || qnt.isEmpty || um.isEmpty) return;

  // 把三个字段打包成一个Map
  widget.onSubmitted({
    'name': text,
    'qnt': qnt,
    'um': um,
  });
  
  _controller.clear();
  _controller1.clear();
  _controller2.clear();
  _focusNode.requestFocus();
}

2. 父组件中处理插入

确保父组件的onSubmitted回调接收Map,并执行单条插入:

// 父组件中的回调示例
Future<void> handleSubmitted(Map<String, String> itemData) async {
  await yourDatabase.insert(
    'your_table_name', // 替换为你的表名
    itemData,
    conflictAlgorithm: ConflictAlgorithm.replace,
  );
}

方式2:使用自定义模型类(更规范)

1. 定义Item模型类

先创建一个对应表结构的模型类,方便数据管理:

class Item {
  final String name;
  final String qnt;
  final String um;

  Item({required this.name, required this.qnt, required this.um});

  // 转换为sqflite可识别的Map格式
  Map<String, dynamic> toMap() {
    return {
      'name': name,
      'qnt': qnt,
      'um': um,
    };
  }
}

2. 修改_onSubmitted方法

创建Item实例并传递给回调:

void _onSubmitted(String text, String qnt, String um) {
  if (text.isEmpty || qnt.isEmpty || um.isEmpty) return;

  final newItem = Item(name: text, qnt: qnt, um: um);
  widget.onSubmitted(newItem);
  
  _controller.clear();
  _controller1.clear();
  _controller2.clear();
  _focusNode.requestFocus();
}

3. 父组件中处理插入

接收Item实例并转换为Map插入:

// 父组件中的回调示例
Future<void> handleSubmitted(Item item) async {
  await yourDatabase.insert(
    'your_table_name', // 替换为你的表名
    item.toMap(),
    conflictAlgorithm: ConflictAlgorithm.replace,
  );
}

完成以上修改后,三个TextField的内容就会被合并成一条记录插入sqflite,后续显示Text(item.name + item.qnt + item.um)就能得到期望的"1 2 3"效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:42:52