Flutter Provider中ChangeNotifier类回调函数不生效问题求助
问题分析与解决
你的代码核心问题在于回调函数的嵌套定义错误,导致onChanged触发时并没有执行实际的赋值逻辑:
问题原因
abcInputs中的每个元素定义为(newValue) => () { ... },这是一个返回无参函数的函数(类型是Function(String) => void Function()),但TextFormField的onChanged需要的是直接接收String参数的函数(类型是void Function(String))。当输入变化时,onChanged只会调用外层的(newValue),得到内层的函数,但并没有执行这个内层函数,所以abc1的值根本不会被修改。
解决方案
直接将回调写成接收String参数并执行赋值+通知的函数,去掉多余的嵌套:
修正后的AbcClass代码
class AbcClass with ChangeNotifier { String abc1 = '111'; String abc2 = '222'; List<void Function(String)> get abcInputs { return [ (newValue) { abc1 = newValue; notifyListeners(); }, (newValue) { abc2 = newValue; notifyListeners(); } ]; } }
优化后的UI代码
另外,context.watch<AbcClass>()已经可以获取到监听状态的实例,无需再用context.read(),同时abc1本身就是字符串,不需要toString():
Widget build(BuildContext context) { final abcClass = context.watch<AbcClass>(); return TextFormField( onChanged: abcClass.abcInputs[0], initialValue: abcClass.abc1, ); }
这样修改后,输入值变化时会直接触发回调中的赋值逻辑,abc1的值会更新,同时notifyListeners()会通知UI刷新。
内容的提问来源于stack exchange,提问作者Buddhika
相关产品推荐
相关产品推荐

