Преобразовать из набора в список в дротик / флаттер? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть набор типа Set<WordPair>, и я хочу преобразовать его в список типа List<String>, потому что я хочу сохранить его, используя SharedPreferences API во флаттере

В настоящее время мое состояние выглядит следующим образом

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

Теперь я хочу сохранить переменную _saved в SharedPreferences

Если я это сделаю, prefs.setStringList('saved', _saved.toList()); выдаст мне ошибку компиляции, такую ​​как

[dart] Тип аргумента «Set» не может быть назначен типу параметра «List».[arguments_type_not_assignable]

Как сохранить полную переменную _saved в SharedPreferences?

1 Ответ

0 голосов
/ 11 декабря 2018

Причина, по которой вы не можете сохранить ее в настройках даже после преобразования в список, заключается в том, что вы пытаетесь сохранить StringList (prefs.setStringList), тогда как ваш набор имеет тип WordPair

Обходным путем для этого может быть

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

, т. Е. Преобразование каждого элемента в строку и сохранение его как StringList

К вашему последующему вопросу в комментариях:

как конвертировать из List<String> в Set<WordPair> в initState?Так как .toWordPair() нет, а завершение занимает 2 аргумента, поэтому Idk, как это сделать?

Согласно документации, WordPair равно Representation of a combination of 2 words, first and second.Таким образом, вы можете разбить строку на две подстроки и передать эти две подстроки в соответствующих позициях аргумента.

[Обновить] (решение, предложенное автором последующего вопроса)решение можно найти на здесь

...