Флаттер: общие настройки - PullRequest
0 голосов
/ 16 октября 2018

У меня есть эта функция:

  Future<String> load(SharedPreferences prefs, String fileName) async {
    prefs = await SharedPreferences.getInstance();
    String jsonString = prefs.getString(fileName) ?? "";
    if (jsonString.isNotEmpty) {
      return jsonString;
    }else{
      return ...
    }
  }

Что я должен вернуть в другом случае?Я пытался с "", но это не работает.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Shared Preferences

В Flutter Shared Preferences используются для хранения примитивных данных (int, double, bool, string и stringList).Эти данные связаны с приложением, поэтому, когда пользователь удаляет ваше приложение, данные также будут удалены.

Получить плагин

Плагин shared_preferences из пабаобертка вокруг Android SharedPreferences и iOS NSUserDefaults.Вы можете получить этот плагин, добавив строку shared_preferences в свой файл pubspec.yaml в разделе зависимостей.

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^0.4.3

Измените номер версии на любой текущий one is.

Импорт пакета

В любой файл, в котором вам нужны общие настройки, добавьте следующий импорт:

import 'package:shared_preferences/shared_preferences.dart';

Чтение и запись данных

Чтобы получить объект общих предпочтений, вы можете сделать следующее:

final prefs = await SharedPreferences.getInstance();

Это будет использоваться для всех следующих примеров.

int

  • читать: final myInt = prefs.getInt('my_int_key') ?? 0;
  • писать: prefs.setInt('my_int_key', 42);

double

  • читать: final myDouble = prefs.getDouble('my_double_key') ?? 0.0;
  • писать: prefs.setDouble('my_double_key', 3.14);

bool

  • чтение: final myBool = prefs.getBool('my_bool_key') ?? false;
  • запись: prefs.setBool('my_bool_key', true);

строка

  • чтение: final myString = prefs.getString('my_string_key') ?? '';
  • запись: prefs.setString('my_string_key', 'hello');

stringList

  • чтение: final myStringList = prefs.getStringList('my_string_list_key') ?? [];
  • запись: prefs.setStringList('my_string_list_key', ['horse', 'cow', 'sheep']);

См. Также

0 голосов
/ 02 ноября 2018

Ответ "это зависит".А именно, это зависит от того, что именно вы делаете с результатом этой функции, и что означает хорошее пустое значение по умолчанию в этом контексте.

Предполагая, что вы декодируете возвращенную строку JSONв Map<String, dynamic>, тогда хорошим значением по умолчанию может быть пустая карта.В этом случае вы можете переформулировать свою функцию следующим образом:

Future<String> loadJSON(final String fileName) async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  final String jsonString = prefs.getString(fileName);
  if (jsonString != null && jsonString.isNotEmpty) {
    return jsonString;
  }
  return "{}"; // default value
}

final String jsonString = await loadJSON("test.json");

final Map<String, dynamic> jsonData = json.decode(jsonString);

Однако, вероятно, имеет смысл переформулировать эту процедуру как функцию более высокого уровня, возвращающую фактические значения карты:

Future<Map<String, dynamic>> loadData(final String fileName) async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  final String jsonString = prefs.getString(fileName);
  if (jsonString != null && jsonString.isNotEmpty) {
    return json.decode(jsonString);
  }
  return Map(); // default value
}

final Map<String, dynamic> jsonData = await loadData("test.json");
...