setValue<T> static method

Future<bool> setValue<T>(
  1. PreferenceItem<T> item,
  2. T? value
)

Implementation

static Future<bool> setValue<T>(PreferenceItem<T> item, T? value) async {
  final String key = getPrefKey(item);
  final isNullable = checkIsNullable<T>();

  if (isNullable && value == null) {
    //null을 세팅한다는 것은 값을 지운다는 의미로 해석. 필요에 따라 변경해서 쓰시면 되요.
    return _prefs.remove(item.key);
  }

  if (isNullable) {
    switch (T.toString()) {
      case "int?":
        return _prefs.setInt(key, value as int);
      case "String?":
        return _prefs.setString(key, value as String);
      case "double?":
        return _prefs.setDouble(key, value as double);
      case "bool?":
        return _prefs.setBool(key, value as bool);
      case "List<String>?":
        return _prefs.setStringList(key, value as List<String>);
      case "DateTime?":
        return _prefs.setString(key, (value as DateTime).toIso8601String());
      default:
        if (value is Enum) {
          return _prefs.setString(key, describeEnum(value));
        } else {
          throw Exception('$T 타입에 대한 저장 transform 함수를 추가 해주세요.');
        }
    }
  } else {
    switch (T) {
      case int:
        return _prefs.setInt(key, value as int);
      case String:
        return _prefs.setString(key, value as String);
      case double:
        return _prefs.setDouble(key, value as double);
      case bool:
        return _prefs.setBool(key, value as bool);
      case const (List<String>):
        return _prefs.setStringList(key, value as List<String>);
      case DateTime:
        return _prefs.setString(key, (value as DateTime).toIso8601String());
      default:
        if (value is Enum) {
          return _prefs.setString(key, describeEnum(value));
        } else {
          throw Exception('$T 타입에 대한 저장 transform 함수를 추가 해주세요.');
        }
    }
  }
}