Dart空安全下List声明废弃报错修复,适配pin验证码输入组件
问题原因
Dart 2.12+ 空安全版本后,默认的List(长度)构造函数已被废弃移除,不能再通过该方式创建指定长度的列表。
正确修改方案
你对_pin的修改是正确的,其余两个列表不能直接用List.filled,因为List.filled会给所有位置填充同一个对象实例,会导致多个输入框共用同一个控制器/焦点节点,出现逻辑异常,应该用List.generate为每个位置生成独立的实例:
// 以下写法和原废弃构造函数行为完全一致,生成固定长度的列表 List<String> _pin = List<String>.filled(widget.fields, '', growable: false); List<FocusNode> _focusNodes = List.generate(widget.fields, (index) => FocusNode(), growable: false); List<TextEditingController> _textControllers = List.generate(widget.fields, (index) => TextEditingController(), growable: false);
额外注意项
记得在组件销毁时手动释放资源,避免内存泄漏:
@override void dispose() { // 销毁所有输入控制器 for (final controller in _textControllers) { controller.dispose(); } // 销毁所有焦点节点 for (final node in _focusNodes) { node.dispose(); } super.dispose(); }
内容的提问来源于stack exchange,提问作者Ugur
相关产品推荐
相关产品推荐

