Что такое SharedPreferences в контексте Flutter/Dart?

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

Ответ

SharedPreferences — это плагин для Flutter, предоставляющий простой механизм хранения данных в формате ключ-значение для сохранения примитивных типов (int, double, bool, String, List) между запусками приложения. Под капотом он использует нативные API: NSUserDefaults на iOS и SharedPreferences на Android.

Основные характеристики:

  • Простота: API для чтения/записи похож на Map<String, dynamic>.
  • Сохранение состояния: Данные сохраняются на диске после закрытия приложения.
  • Асинхронность: Все операции являются асинхронными (Future).
  • Ограничения: Не подходит для хранения больших объемов данных или сложных структур (используйте для этого базы данных, например, sqflite или hive).

Типичный сценарий использования — сохранение настроек пользователя:

import 'package:shared_preferences/shared_preferences.dart';

class SettingsService {
  static const _darkModeKey = 'dark_mode';

  Future<bool> isDarkModeEnabled() async {
    final prefs = await SharedPreferences.getInstance();
    // Возвращаем значение или false по умолчанию
    return prefs.getBool(_darkModeKey) ?? false;
  }

  Future<void> setDarkMode(bool enabled) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setBool(_darkModeKey, enabled);
  }
}

Важные замечания:

  • Не используйте SharedPreferences для чувствительных данных (пароли, токены). Для этого существуют плагины безопасного хранения, например, flutter_secure_storage.
  • Частые операции записи могут влиять на производительность.
  • Для реактивной привязки данных к UI можно обернуть вызовы SharedPreferences в Stream или использовать пакеты вроде shared_preferences_wrapper.