将List.toString()转换为flutter中的列表

时间:2019-07-30 11:37:12

标签: flutter dart

我正在尝试使用flutter中的共享首选项包保存和加载列表。

由于共享的首选项不支持将List<String>以外的列表保存为setStringList()(在我的情况下,List<String>不能满足我的需要),因此我选择了使用.toString()将我的列表转换为字符串,并使用setString()将其保存。

保存该文件就可以了,但是现在我无法加载列表了。

我看到其他人建议将String作为JSON加载,但是看来.toString()并没有提供有效的JSON,所以这是不可能的。

我还尝试过将String强制转换为列表...不足为奇,这也不起作用。

我似乎找不到任何将List转换为JSON的方法,所以我只能以这种方式保存和加载它,而且似乎也找不到任何方法来加载.toString()列表。好吧,一个列表。

我不确定现在该怎么办,因为我似乎找不到找到此列表的方法。

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:3)

您可以使用jsonEncodejsonDecode

import 'dart:convert';

void main() {
  var list = [1, 2, 3, 4];
  String json = jsonEncode(list);
  print(json);

  List list2 = jsonDecode(json);
  print(list2);
}

这里是文档this official Python doc

答案 1 :(得分:1)

我认为.toString()不会有任何帮助。您需要远离Shared_Preferences并找到一种以支持您正在使用的数据类型的方式持久化数据的方法。 (您正在使用哪种数据类型?)

以下是Flutter提供的有关使用SQFlite创建持久性的指南:https://flutter.dev/docs/cookbook/persistence/sqlite

根据您的需求,Firebase也可能是您的解决方案。

答案 2 :(得分:1)

要将^ asserts position at start of a line \. matches the character . literally (case sensitive) .+ matches any character (except for line terminators) + Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy) $ asserts position at the end of a line 转换为json字符串,可以执行以下操作:

List<String>

然后,您可以使用import 'dart:convert'; List<String> myList = ...; String json = jsonEncode(myList);

保存它

要将其转换回列表,请使用setString()

答案 3 :(得分:0)

我不明白为什么它对您不起作用,也许您错过了一些东西。 您应该使用setString()方法将json保存为字符串,并且要获取它们时,请使用getString()方法。而且也不支持boolean类型,因此对于它们,您也需要这样做。 看一下这个例子,这是完美的工作。我这样保存我的List

void _saveList() async {
  List<dynamic> list = ['1','2','3','4'];
  prefs = await SharedPreferences.getInstance();
  prefs.setString('list', json.encode(list));
  List<dynamic> stringList = json.decode(prefs.getString('list'));
  print(stringList.runtimeType);
  print(stringList);
}

输出:

List<dynamic>

[1, 2, 3, 4]

您所需要的只是将List转换为JSON并使用setString()方法保存,当需要时,使用getString()方法并在解码后JSON。 另外,您还需要将List的通用类型设置为<dynamic>,因为在获得列表后,它将变为List<dynamic>

希望它会起作用。