代码之家  ›  专栏  ›  技术社区  ›  SOS video

如何将列表保存到共享首选项

  •  1
  • SOS video  · 技术社区  · 2 年前

    我想将列表保存到共享首选项中,但它不起作用…目标是将数据添加到变量中并保存它。

    这是我要保存的变量:

        var savedData = [
          {'date': 0, 'testNumber': 0},
        ];
    

    这是我尝试保存和接收变量的代码:

     Future<void> saveDataTest() async {
        final prefs = await SharedPreferences.getInstance();
        await prefs.setStringList(
            'dataTest', savedData.map((i) => i.toString()).toList());
      }
        
     Future<String> getDataStringTest() async {
        final prefs = await SharedPreferences.getInstance();
        savedData =
         prefs.getStringList('dataTest').map((i) => int.parse(i)).toList();
        setState(() {});
      }
    

    这是我得到的错误:

    A value of type 'List<int>' can't be assigned to a variable of type 'List<Map<String, int>>'.
    Try changing the type of the variable, or casting the right-hand type to 'List<Map<String, int>>'.
    
    0 回复  |  直到 2 年前
        1
  •  2
  •   Siloé Bezerra Bispo    2 年前

    在列表中使用具有基本体类型的Map对象时,可以使用 jsonEncode 并转换为可以保存在sharedPreferences中的字符串,然后使用 jsonDecoder 当想要恢复时。

    这样地:

    String toBeSaved = jsonEncode(savedData);
    prefs.setString('dataTest', toBeSaved);
    
        2
  •  1
  •   Josteve Adekanbi    2 年前

    尝试使用 jsonEncode jsonDecode 从…起 import 'dart:convert';

    就像这样:

    
     Future<void> saveDataTest() async {
        final prefs = await SharedPreferences.getInstance();
        await prefs.setString("dataTest ", jsonEncode(savedData));
      }
        
     Future<String> getDataStringTest() async {
        final prefs = await SharedPreferences.getInstance();
        savedData = List.from(jsonDecode(prefs.getString("dataTest")));
        setState(() {});
      }