Comments 5
Почему бы не сделать нормальную проверку?
@override
Future<void> set<T>(String key, T value) async {
if (value is bool) {
return _prefs.setBool(key, value);
}
...
throw Exception('Wrong type for saving to database');
}
Метод get
тоже не безопасный, из-за каста через as
. Понятно что там есть try
, но все же, раз вы сделали сохранение безопасным, то почему бы не сделать и получение безопасным?
Постараюсь аргументировать свой выбор. Функция sameTypes()
это "улучшенный" вариант value is bool
. Если вы попробуете сделать что-то такое value is List<String>
, то потерпите фиаско. Определение sameTypes()
в настоящее время тоже самое, что и взаимная подтипизация (mutual sub-typing). Повторюсь, как это выглядит:
bool sameTypes<S, V>() {
void func<X extends S>() {}
// В спецификации Dart говорится, что это верно только в том случае,
// если S и V одного типа.
return func is void Function<X extends V>();
}
По поводу get
. Так как всё завернуто в try-catch
, всё вполне безопасно. SP может выдать только известные заранее типы. Если мы укажем неправильный тип значения по-умолчанию (второй аргумент), то так или иначе получим ошибку (и вернем этот тип).
Замечу, что под капотом у SP все эти "безопасные" getBool
, getInt
и т.д. это тот же самый каст через as
.
Смотрите
Последний раз использовали SP в 2019 году, т.к. в одном из крупных проектов это приводило к большому кол-ву memory leak.
На текущий момент 9 / 10 проектов хранит все локальные данные c помощью Isar /
SharedPreferences отличное хранилище для вашего flutter-приложения. Но есть нюансы…