未处理的异常:类型'List <dynamic>'不是类型转换中类型'List <String>'的子类型

时间:2020-03-24 22:07:11

标签: flutter dart

此异常在行myList = results['users'];中引发。我也尝试过myList = results['users'] as List<String>;results['users']的类型为List<dynamic>。实际上它包含字符串,为什么不能将其转换?

List<String> myList = List<String>();
results = await ApiService.searchUser();
setState(() {
  myList = results['users'];
}

1 个答案:

答案 0 :(得分:1)

您可以建立一个新列表

myList = new List<string>.from(results['users']);

或使用强制转换:

myList = results['users'].cast<string>();

请注意,myList.runtimeType会有所不同:

  • List<string>(如果有新列表)
  • CastList<dynamic, string>(如果有演员表)

请参阅有关Effective Dart: When to use "as", ".retype", ".cast"

的讨论

我建议您几乎不要使用强制转换或重新输入。

  • 重新输入类型包装列表,对是否需要每次访问都强制执行T检验。
  • cast可以选择包装列表,避免在不需要时进行as T检查,但这是以使返回的对象变为多态(原始类型或CastList)为代价的,这会干扰可以生成。

如果您要触摸列表中的每个元素,则最好使用

进行复制
 new List<T>.from(original)

因此,仅当我的访问模式稀疏或需要更新原始格式时,才使用强制转换或重新键入。

请注意,上面的讨论引用了retype方法,该方法已从Dart 2中删除,但其他要点仍然有效。