Flutter中如何从List提取字符串并存储到Firebase?
解决Flutter中无类型List转String列表的类型不匹配问题
问题核心:你定义的pickedItemsFromChips是无类型的List<dynamic>,调用map后返回的是Iterable<dynamic>,转成List后仍为List<dynamic>,无法直接赋值给List<String>变量,导致类型不匹配错误。
下面是几种可行的解决方法:
1. 从根源修复:给pickedItemsFromChips指定正确类型
这是最推荐的方案,直接在父页面把变量声明为List<Skills>类型,避免后续类型转换的麻烦:
// 父页面中修改变量定义 List<Skills> pickedItemsFromChips = []; // 之后直接提取name字段即可,不会有类型问题 final List<String> pickedItemsFromChipsNames = pickedItemsFromChips.map((skill) => skill.name).toList();
2. 对无类型List做类型转换后再处理
如果暂时没法修改变量类型,可以先把List<dynamic>转成List<Skills>,再提取name字段:
// 先转换类型 final List<Skills> typedSkills = pickedItemsFromChips.cast<Skills>(); // 提取name字段 final List<String> pickedItemsFromChipsNames = typedSkills.map((skill) => skill.name).toList(); // 或者一步完成 final List<String> pickedItemsFromChipsNames = (pickedItemsFromChips.cast<Skills>()).map((skill) => skill.name).toList();
3. 用类型断言确保map中的元素类型
在map操作时,显式断言每个元素是Skills类型,同时可以加判断避免非Skills类型元素导致崩溃:
final List<String> pickedItemsFromChipsNames = pickedItemsFromChips .where((item) => item is Skills) // 过滤非Skills类型的元素 .map((item) => (item as Skills).name) .toList();
内容的提问来源于stack exchange,提问作者Jeanette Z
相关产品推荐
相关产品推荐

