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

如何保留TextField中已输入的值 基于sqflite数据库存储场景

保留TextField已输入值的实现方案

核心逻辑:你目前只完成了「把TextField输入值写入sqflite数据库」的流程,要保留输入值分两种场景处理:

  • 场景1:点击保存按钮后,当前页不跳转的前提下保留输入值
    你现有代码不需要做大调整,只要不在onPressed回调的末尾执行_datecontroller.clear()、_datecontroller1.clear()、_quantitecontroller.clear()这类清空控制器的操作,输入框里的内容会默认保留。注意你注释掉的setState不影响输入值留存,只有需要同步刷新页面其他关联状态时再放开即可。
  • 场景2:退出页面再重新进入、或者页面重建(如横竖屏切换)时保留之前输入的值
    需要补充「页面初始化时从sqflite读取已存数据,回写到TextField对应的控制器」的逻辑,具体实现如下:
  1. 首先确保你的三个输入控制器_datecontroller、_datecontroller1、_quantitecontroller是在State类中初始化,不要放在build方法里,避免每次页面重建都生成新的控制器导致值丢失,示例:
class _YourPageState extends State<YourPage> {
  // 控制器在State类中定义初始化
  final _datecontroller = TextEditingController();
  final _datecontroller1 = TextEditingController();
  final _quantitecontroller = TextEditingController();

  @override
  void initState() {
    super.initState();
    // 页面初始化时加载已存的数据
    _loadSavedTodoData();
  }

  // 从sqflite查询已存数据,回写到控制器
  _loadSavedTodoData() async {
    var _todoService = TodoService();
    // 按你的业务逻辑查询对应的数据,比如查最新保存的todo、或者指定id的todo
    Todo? savedTodo = await _todoService.getLatestTodo();
    if (savedTodo != null) {
      _datecontroller.text = savedTodo.datedebut ?? '';
      _datecontroller1.text = savedTodo.datefin ?? '';
      _quantitecontroller.text = savedTodo.quantite ?? '';
      // 刷新页面渲染输入值
      setState(() {});
    }
  }

  // 你的build方法、其他逻辑省略
  @override
  void dispose() {
    // 页面销毁时释放控制器,规范写法
    _datecontroller.dispose();
    _datecontroller1.dispose();
    _quantitecontroller.dispose();
    super.dispose();
  }
}
  1. 你现有保存按钮的代码可以保留,不需要调整,已经能正确把输入值写入数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:42:03