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

为什么Flutter应用中ListView无法显示用户在新增页输入的文本内容

问题修复方案

你代码一共存在5个核心错误,逐个修复即可:

  1. 首页Provider监听配置错误
    首页build方法中获取Storage实例时设置了listen: false,意味着Storage数据变化时不会触发首页重建,ListView自然不会更新。需要把listen改为true,或者直接通过watch方法监听数据变化。
    修复代码:
// 替换首页build方法内原来获取provider的两行代码
final storageaccess = context.watch<Storage>().storage;
  1. 新增页未正确获取输入框内容
    你声明了title变量和TextEditingController,但没有做输入同步,提交时取的title永远是初始的空字符串。直接在提交时读取controller的文本即可解决:
// 保存按钮的onPressed逻辑中,创建Things实例时改为取controller的内容
final accessthing = Things(
  title: titleController.text,
  titlediary: DateTime.now(),
);
  1. notifyListeners()调用位置错误
    你把notifyListeners()写在了add方法外面,添加数据后根本不会通知监听者刷新。要把它移到add方法内部:
void add(Things variablethings) {
  storage.add(variablethings);
  notifyListeners();
}
  1. 提交后页面跳转逻辑错误
    保存完成后你调用push跳转新的MyHomePage,相当于在路由栈上叠加了新页面,原来的首页还在栈里,直接pop返回上一页即可:
// 替换原来的push跳转逻辑
Navigator.of(context).pop();
  1. 表单验证逻辑错误
    validator里判断title!.length < 0永远不成立,字符串长度最小为0,应该改为判断是否为空:
validator: (title) {
  if (title?.isEmpty ?? true) {
    return '请输入标题';
  } else {
    return null;
  }
}

可选优化

把addpage里的TextEditingController和GlobalKey改为State类的成员变量,不要在build方法中创建,避免重复初始化和潜在的状态丢失问题:

class _addpageState extends State<addpage> {
  final TextEditingController titleController = TextEditingController();
  final formKey = GlobalKey<FormState>();

  // 剩余原有代码
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 20:09:03