Flutter:如何打印共享首选项的所有内容

时间:2019-04-16 16:35:48

标签: flutter set sharedpreferences

我要打印所有共享的偏好内容(键,值)
 键和值由用户提供

我尝试使用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

3 个答案:

答案 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”。