从Dart / Flutter中的Set转换为List?

时间:2018-12-11 04:24:59

标签: dart flutter sharedpreferences flutter-dependencies

我有一个private void setupEqualizer(){ mEqualizer = new Equalizer(0, mediaPlayer.getAudioSessionId()); final short lowerEqualizerBandLevel = mEqualizer.getBandLevelRange()[0]; final short upperEqualizerBandLevel = mEqualizer.getBandLevelRange()[1]; for (short i = 0; i < 5; i++){ final short equalizerBandIndex = i; int freq_range = mEqualizer.getCenterFreq(equalizerBandIndex); verticalSeekbar[i].setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel); verticalSeekbar[i].setProgress(mEqualizer.getBandLevel(equalizerBandIndex)); verticalSeekbar[i].setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { mEqualizer.setBandLevel(equalizerBandIndex, (short) (progress + lowerEqualizerBandLevel )); slider_value[equalizerBandIndex].setText(String.valueOf((progress + lowerEqualizerBandLevel) / 100 + " dB")); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); slider_labels[i].setText(formatBandLabel(freq_range)); float scale2 = getResources().getDisplayMetrics().density; int dpAsPixels2 = (int) (8*scale2 + 0.5f); } setupEqSpinner(); } 类型的Set,我想将其转换为Set<WordPair>类型的List,因为我想在Flutter中使用List<String> API来保存它

当前,我的状态看起来像

SharedPreferences

现在我想将final Set<WordPair> _saved = Set<WordPair>(); 变量保存到_saved

如果这样做,SharedPreferences会给我类似的编译错误

  

[dart]无法将参数类型“ Set”分配给参数类型“ List”。 [argument_type_not_assignable]

如何在prefs.setStringList('saved', _saved.toList());中存储完整的_saved变量?

1 个答案:

答案 0 :(得分:1)

即使将其转换为列表后,也无法将其保存在“首选项”中的原因是,您试图保存StringListprefs.setStringList),而您的集合的类型为{{1} }

可能的解决方法是

WordPair

即将每个项目转换为String,然后将其另存为StringList

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

  

如何在prefs.setStringList('saved', _saved.map((WordPair wordPairItem) => wordPairItem.toString()).toList()); 中将List<String>转换为Set<WordPair>?由于没有initState,并且包装程序需要2个arg,因此Idk怎么做?

根据文档,.toWordPair()WordPair。因此,您可以将String分成两个子字符串,然后在相应的参数位置传递这两个子字符串。

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

找到解决方案