【问题标题】:Unhandled Exception: RangeError (index): Invalid value: Valid value range is empty: 0未处理的异常:RangeError(索引):无效值:有效值范围为空:0
【发布时间】:2023-03-16 22:17:01
【问题描述】:

此方法始终运行。我检查了API。如果 API 值更改,我将删除我的数据库并再次插入。这是像这种情况下使用的正确方法吗? (可以使用streamWidget还是FutureWidget?如果可以怎么办?)

错误信息:

[错误:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常: RangeError(索引):无效值:有效值范围为空:0

 checkQuick(String url, String token) async {
    result =
        (await HelperDatabase1().displayGetUserPreference()).elementAt(0)?.data;
    final response = await http.get(
      '$url/nativeapi/v1.0/User/GetUserPreference',
      headers: {'Authorization': 'Bearer $token'},
    );
    final jsonResponse = json.decode(response.body);
    GetUserPreference model = GetUserPreference.fromJson(jsonResponse);
    var data = GetUserPreference(data: model.data);

    if (result != data.data) {
      await HelperDatabase1().deleteGetUserPreference();
      await HelperDatabase1().storeGetUserPreference(url, token);
    }
  }

【问题讨论】:

  • 看起来displayGetUserPreference 正在返回一个空列表
  • 是的。你说的对。如何正确处理空值?

标签: flutter dart


【解决方案1】:

错误是因为displayGetUserPreference返回一个空列表,所以为了解决您的问题,您应该在获取项目之前检查列表是否不为空。

final list =  (await HelperDatabase1().displayGetUserPreference());
if (list.isNotEmpty)
    result = list.elementAt(0).data;

【讨论】:

  • 新错误:Unhandled Exception: FormatException: Unexpected end of input (at character 1)
  • 来自这里,final jsonResponse = json.decode(response.body);
  • 在解码前打印 response.body 以检查结果
  • 我打印了.. 结果是null
  • 我添加了if (response.body.isNotEmpty) {} 现在可以正常工作
猜你喜欢
  • 1970-01-01
  • 2020-06-06
  • 2021-06-16
  • 2019-07-25
  • 1970-01-01
  • 2021-10-06
  • 2021-11-13
  • 2021-01-01
  • 2020-10-07
相关资源
最近更新 更多