这个异常在 lins 中抛出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'];
}
Run Code Online (Sandbox Code Playgroud)
您可以建立一个新列表
myList = new List<String>.from(results['users']);
Run Code Online (Sandbox Code Playgroud)
或者,使用演员表:
myList = results['users'].cast<String>();
Run Code Online (Sandbox Code Playgroud)
请注意,这myList.runtimeType将有所不同:
List<String> 如果是新列表CastList<dynamic, String> 在演员的情况下参见关于Effective Dart 的讨论:何时使用“as”、“.retype”、“.cast”
我建议您几乎不要使用强制转换或重新输入。
- retype 包装列表,强制对每次访问进行 as T 检查,无论是否需要。
- cast 可选地包装列表,避免在不需要时进行 as T 检查,但这样做的代价是使返回的对象多态(原始类型或 CastList),这会干扰可以生成的代码的质量。
如果你要触及列表的每一个元素,你不妨复制它
Run Code Online (Sandbox Code Playgroud)new List<T>.from(original)因此,如果我的访问模式稀疏或需要更新原始模式,我只会使用强制转换或重新键入。
请注意,上面的讨论指的retype是从 Dart 2 中删除的方法,但其他点仍然有效。
| 归档时间: |
|
| 查看次数: |
4583 次 |
| 最近记录: |