其实,当数据更新时,每次Build时拿到的值是正确的值,那为什么,显示出来的值确实错乱的呢?
因为,TextField中的值,显示的其实是_controller
中的Text,而因为使用了State,而initState
方法只会执行一次,所以当组件中value
变化时候,实际上,_controller
中的数据并没有变化。所以显示的会错乱。
针对问题:关于设置textfield输入框的问题,请问为什么我的输入框无法设置?
解决方案:
从段落0可以了解到,textfield输入框的监听事件包括:FocusListener,ActionListener和MouseMotionListener,不可以添加WindowsListener,可以检查一下代码中是否添加了WindowsListener。
从段落1的“善良版”可以了解到,在组件调用didChangeDependence时,应该重新取widget的值给_controller赋值上。或者在didUpdateWidget时,将新的值拿到,与旧的值对比,并替换,因此可以检查一下是否调用了这两个方法。
从段落2可以了解到,数据共享使用的Provider+ChangeNotifier的形式,所以第一步判断,值是否传递到了自己封装的组件中,因此可以检查一下值是否成功传递。
从段落4的“粗暴版”可以了解到,直接每次都创建新的controller,因为这个controller在整个组件中,没有主动用到,因此也可以采取这种办法解决问题。
因为问题描述不够具体,可能存在其他问题,具体可以结合以上代码和方式进行排查,找到问题所在并解决。