dart - 共享偏好学习。如何保存和加载

标签 dart flutter

我找到了这个,我正在尝试重新创建它。

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  runApp(new MaterialApp(
    home: new Scaffold(
      body: new Center(
        child: new RaisedButton(
          onPressed: _save,
          child: new Text('Save my list of int'),
        ),
      ),
    ),
  ));
}

_save() async {

  List<int> myListOfIntegers = [1,2,3,4];
  List<String> myListOfStrings=  myListOfIntegers.map((i)=>i.toString()).toList();

  SharedPreferences prefs = await SharedPreferences.getInstance();
  List<String> myList = (prefs.getStringList('mylist') ?? List<String>()) ;
  List<int> myOriginaList = myList.map((i)=> int.parse(i)).toList();
  print('Your list  $myOriginaList');
  await prefs.setStringList('mylist', myListOfStrings);
}

我在作为选项导入的外部文件中有一个名为 timerValuesList 的列表。现在我不明白 SharedPreferences pref = ... 之后的那一行,为什么还有另一个字符串列表?这可能是为了创建一个列表以防它不存在吗? 这是我的文件。我也会做负载。

现在我已经尝试这样做了。我注意到这一切都很好,但是当我在某些小部件中使用值时,例如 timerValuesList[0],它显示 30.0 而不是我在其他函数中修改的值,然后将其保存到 sharedpref。但是,如果我随后编辑值,例如 +1,它不会从显示的 30.0 开始,而是从我上次编辑并更新的值开始。所以它是正确的值,但在我更新屏幕之前它不会显示给我。你知道为什么吗?问题只在我第一次启动应用程序时出现,之后就没问题了,这就是为什么我虽然将 loadSharedPreferences 放在 initState 但仍然出现的原因。

List<double> timersValuesList = [30.0, 60.0, 90.0, 120.0, 150.0, 180.0];

void saveSharedPreferences() async {
  // from List of double to a List of String
  List<String> convertedTimerValues = timersValuesList.map((i) => i.toString()).toList();
  // getting the instance of sharedPreferences as Object prefs
  SharedPreferences prefs = await SharedPreferences.getInstance();
  // taking my List as key of "mylist", if it doesn't exist create empty List, this is List of String
  List<String> myList = (prefs.getStringList('mylist') ?? List<String>());
  //saving the List of String as key"mylist"
  await prefs.setStringList('mylist', convertedTimerValues);
}

void loadSharedPreferences() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  List<String> myList = (prefs.getStringList('mylist') ?? List<String>());
  List<double> myOriginalList = myList.map((i)=> double.parse(i)).toList();
  timersValuesList = myOriginalList;
//    print('Your list  $myOriginalList');
}

最佳答案

但不能 100% 确定您不理解的内容:

SharedPreferences prefs = await SharedPreferences.getInstance();

很明显,上面是获取 SharedPreferences 实例。

List<String> myList = (prefs.getStringList('mylist') ?? List<String>());

上面说得到 myList 和“??”如果为 null,则创建一个空列表。

关于dart - 共享偏好学习。如何保存和加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56092291/

相关文章:

发生 Flutter 错误 : The position being added ($position) has a smaller timestamp ($time) than its predecessor: $previousPoint

android - 我可以使用agora_rtc在Flutter中实现一对一语音通话(VOIP)吗?

dart - Flutter:如何向本地通知添加按钮

flutter - 库比蒂诺导航栏的问题

flutter - ListView 在抖动中显示空白屏幕

jquery - 将 jqte(JQuery 文本编辑器)绑定(bind)到 dart 中的 div

Flutter 设置文本字段光标在更改 Controller 文本时启动

flutter - 如何使用flutter_blue获取flutter BLE中的血糖仪数据

listview - 我可以使用最初未声明的itemCount定义ListView Builder吗

android-studio - E/AccessibilityBridge : VirtualView node must not be the root node.( flutter )