Флаттер: как распечатать общие настройки всего контента - PullRequest
1 голос
/ 16 апреля 2019

Я хочу напечатать все содержимое общих настроек (ключ, значение)
Ключи и значения даются пользователем

Я попытался поместить все ключи в набор с помощью метода getKeys (), а затем зациклитьУстановить и получить мои элементы так:

 _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

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Я беспокоюсь, что такой 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,
            );
          }),
    );
  }
}
0 голосов
/ 17 апреля 2019

Я выкопал код для 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».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...