Какие способы хранения данных в Flutter приложении ты знаешь?

«Какие способы хранения данных в Flutter приложении ты знаешь?» — вопрос из категории Хранение данных, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Выбор способа хранения зависит от типа данных, объёма и требований к производительности. Вот основные варианты:

1. Для простых пар «ключ-значение» (настройки, флаги):

  • SharedPreferences (пакет shared_preferences).
    final prefs = await SharedPreferences.getInstance();
    await prefs.setInt('counter', 10);
    final value = prefs.getInt('counter') ?? 0;

2. Для структурированных реляционных данных:

  • SQLite через пакет sqflite.
    final db = await openDatabase('my_db.db');
    await db.execute('CREATE TABLE Users(id INTEGER PRIMARY KEY, name TEXT)');
    await db.insert('Users', {'name': 'Alice'});

3. Для быстрого локального хранения объектов:

  • Hive — NoSQL-хранилище, не требуюсее сериализации и очень быстрое.
    await Hive.initFlutter();
    var box = await Hive.openBox('userBox');
    box.put('user', User(name: 'Bob')); // User должен быть адаптером Hive
    var user = box.get('user');

4. Для файлового хранения:

  • Использование dart:io и path_provider для получения путей.
    final dir = await getApplicationDocumentsDirectory();
    final file = File('${dir.path}/data.txt');
    await file.writeAsString('Hello World');

5. Для облачной синхронизации:

  • Firebase Firestore или Realtime Database.
  • REST API с собственным бэкендом.

В реальных проектах часто комбинируют подходы: Hive для кеша офлайн-данных, SQLite для сложных запросов, а SharedPreferences — для настроек.