Flutter中根据服务端返回的[null]数组与空数组[]正确设置Checkbox状态的问题
解决数组判断逻辑问题:区分
[null]与[] 我懂你的困扰——你需要精准区分两种数组状态:当字段值是[null]时勾选Checkbox,而空数组[]则不做任何操作,但原来的判断逻辑把两种情况都当成了符合条件的情况,导致触发了错误的操作。
问题根源
你用的widget.initialValues!.every((e) => e == null)在空数组[]时会返回true,这是JavaScript的特性:空数组调用every()方法时,因为没有元素需要验证,会默认返回true。所以不管是[null]还是[],这个条件都会成立,自然不符合你的预期。
正确的判断逻辑
我们需要先排除空数组的情况,再验证数组元素是否全为null,或者直接针对[null]的结构做精准判断,这里提供两种方案:
方案1:兼容多null元素的情况
如果服务端可能返回包含多个null的数组(比如[null, null]),可以先判断数组长度大于0,再验证所有元素都是null:
if (widget.initialValues.length > 0 && widget.initialValues.every((e) => e === null)) { _isClosed.trigger(true); }
方案2:精准匹配[null]的情况
如果确定服务端返回的目标数组只会是[null](单个null元素),可以直接判断数组长度和第一个元素:
if (widget.initialValues.length === 1 && widget.initialValues[0] === null) { _isClosed.trigger(true); }
验证你的数据示例
用你的服务端返回数据测试:
FRI: [null]:两种方案都会触发_isClosed.trigger(true),符合需求;WED: []:两种方案的条件都不成立,不会执行操作;SUN: [{"to": "16:27", "from": "15:27"}]:元素不是null,条件不成立,不会执行操作。
内容的提问来源于stack exchange,提问作者user16966204
相关产品推荐
相关产品推荐

