Flutter 如何使用SharedReferences保存和加载对象

Flutter 如何使用SharedReferences保存和加载对象,flutter,sharedpreferences,Flutter,Sharedpreferences,因此,我一直在尝试使用共享首选项加载我最近的所有搜索历史对象。 它不起作用,它说“List不是List的子类型”,错误代码发生在我调用loadData函数时。我不知道为什么我的代码不起作用 这是我的共享首选项和方法代码: void _addLastSearch(String hospitalId,String hospitalName) { final lastSearching=SearchModel(hospitalId: hospitalId,hospitalName: hos

因此,我一直在尝试使用共享首选项加载我最近的所有搜索历史对象。 它不起作用,它说“List不是List的子类型”,错误代码发生在我调用loadData函数时。我不知道为什么我的代码不起作用

这是我的共享首选项和方法代码:

void _addLastSearch(String hospitalId,String hospitalName)
  {
    final lastSearching=SearchModel(hospitalId: hospitalId,hospitalName: hospitalName);
    setState(() {
      recentSearch.add(lastSearching);
    });
  }

  void savedData() async  {
    SharedPreferences prefs= await SharedPreferences.getInstance();
   
    prefs.setString('data',jsonEncode(recentSearch));
  }
  void loadData()async{
    SharedPreferences prefs= await SharedPreferences.getInstance();
    print("test masul load");
    
    recentSearch=jsonDecode(prefs.getString('data'));
  
      print(recentSearch.length);
  }

加载数据功能中的任何im更改为:


recentSearch=(jsonDecode(prefs.getString('data')).map((item)=>SearchModel.fromJson(item)).toList()

我认为这是因为recentSearch变量的类型是list。您可以在每个SearchModel上尝试JSONECODE并从中创建一个列表,然后可以使用prefs.setStringList(“key”,list);存储并优先选择getStringList(“键”);要从共享\u首选项检索用户名,我找到了解决方案:),