此异常在行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'];
}
答案 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中删除,但其他要点仍然有效。