1. Stockage clé-valeur avec SharedPreferences

Pour sauvegarder des données de configuration légères (mode sombre activé, langue choisie, jeton de session utilisateur), le package shared_preferences enregistre des valeurs primitives sur le stockage persistant natif (NSUserDefaults sur iOS, SharedPreferences sur Android) :

import 'package:shared_preferences/shared_preferences.dart';

Future<void> enregistrerThemeFavori(bool modeSombre) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setBool('cle_mode_sombre', modeSombre);
}

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

2. Base de données relationnelle locale avec SQLite (sqflite)

Pour stocker des volumes importants de données structurées accessibles hors connexion (cours enregistrés, leçons téléchargées, notes hors-ligne), nous utilisons SQLite via le package sqflite :

// Création d'une table locale sécurisée
await db.execute('''
    CREATE TABLE cours_hors_ligne (
        id TEXT PRIMARY KEY,
        titre TEXT NOT NULL,
        progression INTEGER NOT NULL
    )
''');

3. Stratégie de synchronisation bidirectionnelle

L’application consulte d’abord le cache SQLite local pour afficher immédiatement le contenu à l’utilisateur, puis tente une synchronisation discrète en tâche de fond avec le serveur central d’Éducasuisse.

Synthèse pédagogique : La persistance locale transforme une simple interface connectée en un outil de travail autonome et résilient face aux aléas de connectivité.