我要打印所有共享的偏好内容(键,值)
键和值由用户提供
我尝试使用getKeys()方法将所有Key放入Set中,然后循环Set并检索这样的元素:
_favoritePlaces() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
// prefKeys declared as static Set<String>
prefKeys=prefs.getKeys();
if (prefKeys.isNotEmpty) {
for (int i = 0; i < prefKeys.length; i++) {
// this is another function expects to find key given as parameter
_drawerItem(prefKeys.elementAt(i).toString());
// expected output should come below
}
}
}
预期输出: Key0 => Value0
答案 0 :(得分:2)
我需要Map
个共享首选项键值对,如果有人需要则共享。
Future<Map<String, String>> getAllPrefs() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return <String, String>{
for (String key in prefs.getKeys()) ...{key: prefs.get(key).toString()}
};
}
答案 1 :(得分:1)
我担心没有这样的API(公开)可以通过shared_preferences插件一次性获取所有偏好。
您需要自己做。这对我有用:
class MainPage extends StatelessWidget {
Future<List<Widget>> getAllPrefs() async {
final SharedPreferences prefs = await PrefStore().prefs;
return prefs
.getKeys()
.map<Widget>((key) => ListTile(
title: Text(key),
subtitle: Text(prefs.get(key).toString()),
))
.toList(growable: false);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<List<Widget>>(
future: getAllPrefs(),
builder: (context, snapshot) {
if (!snapshot.hasData) return Container();
return ListView(
children: snapshot.data,
);
}),
);
}
}
答案 2 :(得分:0)
我挖掘了shared_preferences的代码,发现它们可以通过直接调用methodChannel上的方法来一次获取所有首选项(我不建议这样做,因此也保留了原来的答案)。
这是您可以做到的
const MethodChannel _kChannel =
MethodChannel('plugins.flutter.io/shared_preferences');
final Map<Object, Object> fromSystem =
await _kChannel.invokeMethod('getAll');
print(fromSystem);
fromSystem
是具有所有值的Map
。
注意:要注意的一件事是所有键的前缀都为“ flutter。”,例如“ user_id”将变为“ flutter.user_id”。