# Local Storage — Flutter

Source: https://www.skillbyai.com/en/flutter/d-storage

> shared_preferences, files and databases.

## Choosing where to keep data

**shared_preferences** stores small key-value settings (theme choice, onboarding seen) using platform storage such as Android SharedPreferences and iOS NSUserDefaults; newer versions also offer `SharedPreferencesAsync` and `SharedPreferencesWithCache` APIs, so check the docs for your version. It is not encrypted - put tokens and secrets in **flutter_secure_storage**, which uses the Keychain and Android Keystore-backed encryption. For structured or larger data use SQLite through **sqflite** (raw SQL) or **drift** (type-safe queries and migrations, generated code), or other databases such as Isar or Hive. **path_provider** gives app document and cache directories for files.

## Saving a setting

shared_preferences (classic API).

```dart
import 'package:shared_preferences/shared_preferences.dart';

class SettingsStore {
  static const _darkKey = 'dark_mode';

  Future<bool> loadDarkMode() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getBool(_darkKey) ?? false;
  }

  Future<void> saveDarkMode(bool value) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setBool(_darkKey, value);
  }
}
```

## A sticky note, a safe and a filing cabinet

shared_preferences is a sticky note for small reminders, secure storage is the safe for keys, and a database is the filing cabinet for records you search and update.

**Quiz:** Where should you store an authentication token on the device?

- [ ] In shared_preferences as plain text
- [x] In secure storage such as flutter_secure_storage
- [ ] In a Dart global variable only
- [ ] In the app's assets folder

*Answer:* In secure storage such as flutter_secure_storage. Secure storage uses the platform keychain or keystore.
