Ответ
Выбор способа хранения зависит от типа данных, объёма и требований к производительности. Вот основные варианты:
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 — для настроек.