You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 3.10.6 iOS端RangeError(length)注册崩溃问题排查求助

问题原因及解决方案

根因分析

你遇到的RangeError (length): Invalid value: Only valid value is 0: 1错误,确实由isUSA的判断代码导致。

当部分iOS设备的系统Locale为单段格式(比如"en"、"fr")时,Intl.systemLocale.split('_')返回长度为1的数组,此时直接访问索引[1]会触发数组越界错误。这个错误会在创建MyModel.empty()实例时触发——因为初始化temperatureScale时会调用TemperatureScale.defaultValue,而defaultValue依赖isUSA的计算结果。

修复方案

修改isUSA的判断逻辑,先检查分割后的数组长度,再访问对应索引:

static bool isUSA = () {
  final localeParts = Intl.systemLocale.split('_');
  // 先判断是否存在第二部分,再检查是否为US
  if (localeParts.length >= 2) {
    return localeParts[1].toUpperCase() == 'US';
  }
  // 处理单段Locale的情况
  final platformLocaleParts = Platform.localeName.split('_');
  return platformLocaleParts.length == 1;
}();

或者更简洁的写法:

static bool isUSA = 
    (Intl.systemLocale.split('_').length >= 2 && 
     Intl.systemLocale.split('_')[1].toUpperCase() == 'US') ||
    Platform.localeName.split('_').length == 1;

额外优化建议

后续处理数组索引访问时,建议先判断数组长度是否足够,避免类似越界问题。比如处理Locale相关逻辑时,始终先确认分割后的数组长度再访问对应位置。

内容的提问来源于stack exchange,提问作者Ryan Heitner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:00:05