如何将Iterable<WordPair>类型转换为Iterable<String>类型?
处理english_words库中WordPair转String的实用方案
最近在用english_words库生成英文词对时碰到个小坑:WordPair类并不是String的子类,所以没法直接用Iterable的cast<String>()、retype<String>()这类方法转成String类型,就连lambda表达式直接返回也不行。折腾了一下,写了个getWords()函数完美解决,分享给大家。
第一步:配置依赖
先确保你的pubspec.yaml里已经正确引入english_words库,版本用^3.1.0就好:
dependencies: flutter: sdk: flutter # 包含数千个常用英文单词及工具函数 english_words: ^3.1.0
配置完记得执行flutter pub get拉取依赖哦。
问题根源
为啥直接转换行不通?因为generateWordPairs()返回的是Iterable<WordPair>,而WordPair是库的自定义类,并非String的子类,那些针对String子类的转换方法自然失效,必须手动做显式转换。
解决方案:实现getWords()函数
我在Model.dart里封装了这个函数,专门用来把WordPair转换成String列表:
import 'package:english_words/english_words.dart'; class WordGenerator { // 生成指定数量的英文词对并转为String列表 List<String> getWords(int wordCount) { // 生成指定数量的WordPair实例 final wordPairs = generateWordPairs().take(wordCount); // 显式转换:用asString得到驼峰式组合,比如"sunsetBeach" return wordPairs.map((pair) => pair.asString).toList(); // 如果需要空格分隔的词对,改成下面这行即可: // return wordPairs.map((pair) => "${pair.first} ${pair.second}").toList(); } }
核心就是通过map遍历每个WordPair,要么调用它自带的asString属性得到驼峰式组合,要么自己拼接出空格分隔的格式,最后转成List
内容的提问来源于stack exchange,提问作者Drawn
相关产品推荐
相关产品推荐

