为什么Flutter应用中ListView无法显示用户在新增页输入的文本内容
问题修复方案
你代码一共存在5个核心错误,逐个修复即可:
- 首页Provider监听配置错误
首页build方法中获取Storage实例时设置了listen: false,意味着Storage数据变化时不会触发首页重建,ListView自然不会更新。需要把listen改为true,或者直接通过watch方法监听数据变化。
修复代码:
// 替换首页build方法内原来获取provider的两行代码 final storageaccess = context.watch<Storage>().storage;
- 新增页未正确获取输入框内容
你声明了title变量和TextEditingController,但没有做输入同步,提交时取的title永远是初始的空字符串。直接在提交时读取controller的文本即可解决:
// 保存按钮的onPressed逻辑中,创建Things实例时改为取controller的内容 final accessthing = Things( title: titleController.text, titlediary: DateTime.now(), );
- notifyListeners()调用位置错误
你把notifyListeners()写在了add方法外面,添加数据后根本不会通知监听者刷新。要把它移到add方法内部:
void add(Things variablethings) { storage.add(variablethings); notifyListeners(); }
- 提交后页面跳转逻辑错误
保存完成后你调用push跳转新的MyHomePage,相当于在路由栈上叠加了新页面,原来的首页还在栈里,直接pop返回上一页即可:
// 替换原来的push跳转逻辑 Navigator.of(context).pop();
- 表单验证逻辑错误
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
相关产品推荐
相关产品推荐

