在 Dart / Flutter 中从集合转换为列表?

Convert from Set to List in Dart / Flutter?

我有一个 Set<WordPair> 类型的集合,我想将它转换为 List<String> 类型的列表,因为我想在 Flutter 中使用 SharedPreferences API 保存它

目前我的状态是

final Set<WordPair> _saved = Set<WordPair>();

现在我想将 _saved 变量保存到 SharedPreferences

如果我这样做,prefs.setStringList('saved', _saved.toList()); 它会给我编译错误,如

[dart] The argument type 'Set' can't be assigned to the parameter type 'List'. [argument_type_not_assignable]

如何在 SharedPreferences 中存储完整的 _saved 变量?

即使将其转换为列表后仍无法将其保存在首选项中的原因是您试图保存 StringList (prefs.setStringList) 而您的集合类型为 WordPair

解决方法可能是,

prefs.setStringList('saved', _saved.map((WordPair wordPairItem) => wordPairItem.toString()).toList());

即把每一项转换成字符串,然后保存为StringList

对于您在评论中的后续问题:

how do I convert from List<String> to Set<WordPair> in initState? As there is no .toWordPair() & wrapping up takes 2 args so Idk how to do it?

根据文档,WordPairRepresentation of a combination of 2 words, first and second。因此,您可以将 String 分成两个子字符串,并将这 2 个子字符串传递到各自的参数位置。

[更新](后续问题作者提出的解决方案) 可以在

找到解决方案