SharedPreference — это небольшое хранилище данных в нашем телефоне, где мы можем хранить данные в виде пар ключей и значений. Мы можем хранить целое число, строку, список строк, логическое значение и двойное значение в SharedPreferences. Теперь давайте обсудим, где мы можем их реализовать. Во-первых, нужно сохранить информацию о пользователе, вошел он в систему или нет, любой идентификатор или некоторые основные сведения о пользователе, чтобы пользователям не приходилось снова входить в систему всякий раз, когда пользователь открывает это приложение.
Библиотека shared_preferences во Flutter
1. Добавьте пакет в файл pubspec.yaml.
2. Определите строки в файле констант, чтобы установить и получить значение для этого конкретного ключа (этот шаг не является обязательным, вы можете пропустить его и можете напрямую добавить туда, где вам это нужно).
const String key="myKey";
3. Во-первых, вам нужно создать экземпляр общего предпочтения и сохранить его в переменной.
final prefs = await SharedPreferences.getInstance();
4. Используя префы, вы можете получить доступ ко многим функциям для установки и получения данных в разных типах данных.
E.g. prefs.getBool(key), prefs.getInt(key) ,etc.
5. Ключ должен быть одинаковым как в геттере, так и в сеттере, чтобы получить значение для этого конкретного ключа. как ниже
5.1 Логический тип данных
Getter:- prefs.getBool(key) ?? false,
Setter:- prefs.setBool(key, value)
Value — true,false
Код:
const boolSharedPreference = "bool shared preferences"; static Future getBool() async { final prefs = await SharedPreferences.getInstance(); prefs.setBool(boolSharedPreference, true); } static Future<bool> setBool() async { final prefs = await SharedPreferences.getInstance(); return prefs.getBool(boolSharedPreference) ?? false; }
5.2 Тип данных Int
Getter:- prefs.getInt(key) ?? 0,
Setter:- prefs.setInt(key, value)
value -integer value 1,4566,8423235,
Код:
const intSharedPreference = "integer shared preferences"; static Future setInt() async { final prefs = await SharedPreferences.getInstance(); return prefs.setInt(intSharedPreference, 1); } static Future<int> getInt() async { final prefs = await SharedPreferences.getInstance(); return prefs.getInt(intSharedPreference) ?? 0; }
5.3 Двойной тип данных
Getter:- prefs.getDouble(key) ?? 0.0,
Setter:- prefs.setDouble(key, value)
value any double value like 2.0,6.7,12344.8
Код:
const doubleSharedPreference = "double shared preferences"; static Future setDouble() async { final prefs = await SharedPreferences.getInstance(); return prefs.setDouble(doubleSharedPreference, 0.0); } static Future<double> getDouble() async { final prefs = await SharedPreferences.getInstance(); return prefs.getDouble(doubleSharedPreference) ?? 0.0; }
5.4 Строковый тип данных
Getter:- prefs.getString(key) ?? “”,
Setter:- prefs.setString(key, value)
Value -this can be anything under invertedComma .
Код:
const stringSharedPreference = "string shared preferences"; static Future<String> getString() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString(listSharedPreference) ?? ""; } static Future setString() async { final prefs = await SharedPreferences.getInstance(); return prefs.setString(stringSharedPreference, ""); }
5.5 Список строковых типов данных
Getter:- prefs.getStringList(key) ?? [],
Setter:- prefs.setStringList(key, value)
Value -List of strings (anything under inverted comma)
Код:
const listSharedPreference = "list shared preferences"; static Future setListString( {required String id, required String token}) async { final prefs = await SharedPreferences.getInstance(); prefs.setStringList(listSharedPreference, [id, token]); } static Future<List<String>> getListString() async { final prefs = await SharedPreferences.getInstance(); return prefs.getStringList(listSharedPreference) ?? []; }
5.6 Json или тип данных карты
Getter:- json.decode(prefs.getString(key).toString()),
Setter:- prefs.setString(key, jsonEncode(value))
to use its value.// Map myData= jsonDecode(value);
value :- {“name”:”risheeta”,
“experince”:1.5,
“age”:21,
“skills”:[“flutter”,”Html”]}
Код:
const mapSharedPreference = "map shared preferences"; static Future setMap() async { final prefs = await SharedPreferences.getInstance(); return prefs.setString( mapSharedPreference, jsonEncode({ "name": "", })); } static Future<Map> getMap() async { final prefs = await SharedPreferences.getInstance(); return jsonDecode(prefs.getString(mapSharedPreference) ?? "") ?? {}; }
Эта функция очистит полные общие настройки, т. е. удалит все пары ключ-значение, хранящиеся в памяти. Вы можете очистить эту память с помощью этой функции. Вы можете очистить это, удалив приложение и переустановив его или очистив данные этого конкретного приложения.
Код:
static Future clearSharedPref() async { final prefs = await SharedPreferences.getInstance(); await prefs.clear(); }
Dart
import
'dart:convert'
;
import
'package:shared_preferences/shared_preferences.dart'
;
import
'package:shared_preferences_flutter/constants/value.dart'
;
class
SharedPref {
static
Future setBool() async {
final prefs = await SharedPreferences.getInstance();
prefs.setBool(boolSharedPreference,
true
);
}
static
Future<
bool
> getBool(
bool
value) async {
final prefs = await SharedPreferences.getInstance();
return
prefs.getBool(boolSharedPreference) ??
false
;
}
static
Future setListString(
{required String id, required String token}) async {
final prefs = await SharedPreferences.getInstance();
prefs.setStringList(listSharedPreference, [id, token]);
}
static
Future<List<String>> getListString() async {
final prefs = await SharedPreferences.getInstance();
return
prefs.getStringList(listSharedPreference) ?? [];
}
static
Future<String> getString() async {
final prefs = await SharedPreferences.getInstance();
return
prefs.getString(listSharedPreference) ??
""
;
}
static
Future setString(String value) async {
final prefs = await SharedPreferences.getInstance();
return
prefs.setString(stringSharedPreference, value);
}
static
Future setInt(
int
val) async {
final prefs = await SharedPreferences.getInstance();
return
prefs.setInt(intSharedPreference, val);
}
static
Future<
int
> getInt() async {
final prefs = await SharedPreferences.getInstance();
return
prefs.getInt(intSharedPreference) ?? 0;
}
static
Future setDouble(
double
val) async {
final prefs = await SharedPreferences.getInstance();
return
prefs.setDouble(doubleSharedPreference, val);
}
static
Future<
double
> getDouble() async {
final prefs = await SharedPreferences.getInstance();
return
prefs.getDouble(doubleSharedPreference) ?? 0.0;
}
static
Future setMap(Map value) async {
final prefs = await SharedPreferences.getInstance();
return
prefs.setString(mapSharedPreference, jsonEncode(value));
}
static
Future<Map> getMap() async {
final prefs = await SharedPreferences.getInstance();
return
jsonDecode(prefs.getString(mapSharedPreference) ??
""
) ?? {};
}
static
Future clearSharedPref() async {
final prefs = await SharedPreferences.getInstance();
await prefs.clear();
}
}
Как использовать эту функцию?
Например, мы хотим получить значение getInt
1. Чтобы получить ценность
SharedPref.getInt().then((value) { print(value); // value will be your data stored in that key });
2. Установить значение
SharedPref.setInt(1);
Dart
const
intSharedPreference =
"integer shared preferences"
;
const
doubleSharedPreference =
"double shared preferences"
;
const
stringSharedPreference =
"string shared preferences"
;
const
mapSharedPreference =
"map shared preferences"
;
const
listSharedPreference =
"list shared preferences"
;
const
boolSharedPreference =
"bool shared preferences"
;
Дополнительные советы
Вы можете хранить более одной пары ключ-значение с одним и тем же типом данных, но они должны иметь разные ключи. Если вы установите 2 значения с одинаковым значением ключей, оно будет перезаписано.
Например:
Мы установили мой номер мобильного телефона в ключе с именем «данные клиента».
prefs.setString(customerData, 1234567890) then somewhere else I set my age in the same key prefs.setInt(customerData, 21)
Условия ошибки
Ошибка 1: необработанное исключение: тип «Первый тип данных» не является подтипом типа «Второй тип данных» в typecast.prefs.getString(customerData); это даст вам 1234567890. но prefs.getInt(customerData); это даст вам такую ошибку. Вы можете установить множество пар ключ-значение в общих настройках. Но имя ключей должно быть уникальным в каждой паре. Чтобы получить доступ к значению, которое вы уже установили. Вы должны использовать тот же ключ, чтобы снова получить это значение из общих настроек.
Решение: Попытка изменить тип данных.
Ошибка 2: необработанное исключение: MissingPluginException (не найдена реализация для метода getAll на канале plugins.flutter.io/shared_preferences)
Решение: Удалите приложение и переустановите его.
Ошибка 3: MissingPluginException (не найдена реализация для запуска метода на канале plugins.flutter.io/url_launcher)
Решение: очистите Flutter или перезапустите проект.