我找到了这个,我正在尝试重新创建它。
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/