Как добавить новый тип данных?

Всем привет, пишу по статье из интернета, в которой рассказывается, как добавлять и читать с локального хранилища (shared_preferences). Так вот, есть файл с добавлением и чтением данных, выглядит он так -

static saveData<T>(String key, T value) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();

    switch (T) {
      case String:
        prefs.setString(key, value as String);
        break;
      case int:
        prefs.setInt(key, value as int);
        break;
      case bool:
        prefs.setBool(key, value as bool);
        break;
      // case stringList:
      //   prefs.setStringList(key, <String>[] as stringList);
      //   break;
      case double:
        prefs.setDouble(key, value as double);
        break;
    }

Подскажите, как пожалуйста добавить сюда вот этот метод - await prefs.setStringList('items', <String>['Earth', 'Moon', 'Sun']);

А также, как реализовать удаление? Вот моя попытка -

static Future<T> removeData<T>(String key) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
      return prefs.remove(key) as T;
  }

Ответы (1 шт):

Автор решения: ddo5

В dart есть ключевое слово typdef для объявления ссылки на тип. Пример использования: typedef StringList = List<String>;

В вашем случае это будет выглядеть так:

typedef StringList = List<String>;

class A extends StatelessWidget {
  static void saveData<T>(String key, T value) async {
    final prefs = await SharedPreferences.getInstance();

    switch (T) {
      case String:
        prefs.setString(key, value as String);
        break;
      case int:
        prefs.setInt(key, value as int);
        break;
      case bool:
        prefs.setBool(key, value as bool);
        break;
      case StringList:
        prefs.setStringList(key, value as StringList);
        break;
      case double:
        prefs.setDouble(key, value as double);
        break;
    }
  }
}

Эту функцию можно вызывать раличными способами:

saveData<StringList>('key', []);
saveData<List<String>>('key', []);
saveData('key', <String>[]);

Удаление значения из хранилища:

/// Возвращает true в случае успеха
static Future<bool> removeData(String key) async {
  final prefs = await SharedPreferences.getInstance();
  return prefs.remove(key);
}
→ Ссылка