【问题标题】:How could i do to save Future<dynamic> with SharePreferences in Flutter?我该如何在 Flutter 中使用 SharedPreferences 保存 Future<dynamic>?
【发布时间】:2020-06-29 04:50:20
【问题描述】:

我有来自 json 解码的列表。我想在颤振中保存在本地或共享首选项中。

这可能发生还是有其他方式?

这是我的代码。我想将temporaryData 保存在sharepreferences 中。

_getTemp() async {
Map bodyFill = {'data': '$dataApi'};
DateTime start = DateTime.now().subtract(Duration(seconds: 5));
DateTime end = DateTime.now();
Map data = {'pass': '123456', 'startTime': '$start', 'endTime': '$end'};
var response = await http.post('$urlApiQr:8080/newFindRecords', body: data);
var jsonData = json.decode(response.body);
TempJson tempJson = TempJson.fromJson(jsonData);
var parse = json.decode(tempJson.config);

setState(() {
  dataList = parse;
  temporaryData = dataList.toSet().toList();
});

}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    既然Chetan Suri已经给出了答案,但想给出更生动的回应,告诉你如何通过你的方法调用来实现。

    重要提示:使用shared_preferencesflutter 包,如果你还不知道的话。

    所以为了创建一个方法,你必须传递参数,传递temporaryData,你应该没问题。

    // Here you create your sharepref instance to be used for further uses
    Future<SharedPreferences> storage(){
      return SharedPreferences.getInstance();
    }
    
    // Here where you save your data which accepts a dynamic list arguments
    void setTempData(List<String> temp) async{
      SharedPreferences sharedPref = await storage();
      sharedPref.setStringList("temp_list", temp);
    }
    

    现在从方法_getTemp通过上述方法将其保存到SharedPreferences中。 请确保您在通过之前制作 tempData 字符串,因为 SharedPreferences 到现在无法存储动态列表

    setState(() {
      dataList = parse;
      temporaryData = dataList.toSet().toList();
    
      //type casting the temporaryData before passing it to the SharePref, else you will get type mismatch error
      setTempData(temporaryData.toString());
    });
    

    希望有帮助:)

    【讨论】:

    • 是的,我的错,没看那个。感谢您选择这个:) 更正它
    • 我尝试获取它,但出现错误未处理的异常:类型'String'不是类型'List'的子类型并且当我设置temporaryData.toString()时显示红色下划线,参数类型“String”不能分配给参数类型“List”。
    • 你能不能试试,只通过temporaryData而不做temporaryData.toString(),让我知道?
    • 未处理的异常:'List' 类型不是 'List' 类型的子类型
    • 将您的temporaryDataList&lt;dynamic&gt; 转换为List&lt;String&gt;,如下所示:var data = List&lt;String&gt;.from(temporaryData);,然后将其传递给setTempData(data)。让我知道这是否适合你:)
    【解决方案2】:

    你可以试试这样的。

      SharedPreferences _prefs = await SharedPreferences.getInstance();
                        await _prefs.setString('pass', result['pass']);
                        await _prefs.setInt('startTime', result['startTime']);
                        await _prefs.setInt('endTime', result['endTime']);
    

    【讨论】:

    • 我做到了,但我得到的价值是'Future'的实例
    猜你喜欢
    • 2019-09-30
    • 2021-08-17
    • 2020-10-20
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2018-12-01
    相关资源
    最近更新 更多