如何使用 SharedPreferences 从 Flutter 中的列表中保存多个布尔值
Posted
技术标签:
【中文标题】如何使用 SharedPreferences 从 Flutter 中的列表中保存多个布尔值【英文标题】:How to save multiple bool from list in Flutter with SharedPreferences 【发布时间】:2021-04-20 23:10:15 【问题描述】:我创建了一个 bool 列表:
List<bool> switchbool = [true, true, true, true];
在切换开关时,值会发生变化(非常明显......)。但我想将这些信息完全存储在列表中,因为我是这样使用它们的:
Switch(
value: switchbool[index],
onChanged: (value)
_saveBoolFromSharedPref(value, app[index]);
setState(()
switchbool[index] = value;
);
,
)
但是这样它不会加载存储在我保存的 sharedPreferences 中的 true 或 false ...
Future<void> _getBoolFromSharedPref() async
final prefs = await SharedPreferences.getInstance();
switchbool.length = app.length;
for (var i = 0; i < app.length; i += 1)
final myBool = prefs.getBool(app[i]) ?? false;
这是 _saveBoolFromSharedPref
Future<bool> _saveBoolFromSharedPref(bool value, String appName) async
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(appName, value);
//print(switchbool);
任何建议都会很棒,非常感谢! 如果我可以从开关上的 value 字段中检索数据,但我在任何地方都没有看到任何答案......
【问题讨论】:
你也可以添加你的 _saveBoolFromSharedPref 方法吗? @zeus 应该没问题吧? 检查我的答案@Malopieds。 【参考方案1】:也许将您的值存储在地图中,然后对其进行解码/编码。如下:
var jsn = prefs.getString('Map');
Map = json.decode(jsn);
var jsn = json.encode(Map);
prefs.setString('Map', jsn);
如果有帮助,请告诉我。
【讨论】:
首先感谢您的回复,但我不明白我应该如何使用地图,我还没有看到将 bool 存储在其中的可能性,但我必须将其转换为细绳?抱歉,我是 Flutter 新手,但非常感谢! 反编码和编码提供了将它存储在 sharedPreferences 中的可能性......也许你可以对列表做同样的事情,我不确定 我适应this 网站和evertyhting 工作谢谢!【参考方案2】:试试这个_getBoolFromSharedPref
方法。
Future<void> _getBoolFromSharedPref() async
final prefs = await SharedPreferences.getInstance();
switchbool.length = app.length;
for (var i = 0; i < app.length; i += 1)
switchbool[i] = prefs.getBool(app[i]) ?? false;
【讨论】:
我已经尝试过了,但是谢谢,看起来 List switchbool 是第一个,而 _getBoolFromSharedPref 甚至没有被监听:/ @Malopieds 抱歉,我不明白您所说的“先采取,甚至没有听 _getBoolFromSharedPref”的意思 是的,我的意思不是很清楚,就像列表对未来的虚空具有优先权,因此它始终存储为“假”。但是 rottler35 的回答就像一个魅力,但感谢您的帮助!以上是关于如何使用 SharedPreferences 从 Flutter 中的列表中保存多个布尔值的主要内容,如果未能解决你的问题,请参考以下文章
如何在改变sharedpreferences数据后自动改变android menuItem数据?