import 'package:shared_preferences/shared_preferences.dart'; /// Wie viele Suchbegriffe gemerkt werden. Mehr passen nicht auf den Schirm, /// ohne dass die Liste selbst zum Suchproblem wird. const verlaufMaximum = 8; /// [verlauf] mit [begriff] vorn: der zuletzt gesuchte Begriff steht oben, /// jeder Begriff nur einmal, insgesamt höchstens [verlaufMaximum]. /// /// Rein und ohne Speicher — die Reihenfolge-Regeln sind der Teil, der /// schiefgehen kann. List verlaufMit(List verlauf, String begriff) { final neu = begriff.trim(); if (neu.isEmpty) return List.from(verlauf); final ergebnis = [ neu, for (final alt in verlauf) if (alt.toLowerCase() != neu.toLowerCase()) alt, ]; return ergebnis.take(verlaufMaximum).toList(); } /// Merkt sich die letzten Suchbegriffe über einen App-Neustart hinweg. /// Aufbau wie [SortStore]: statische Methoden auf SharedPreferences. class SuchVerlauf { static const _key = 'such_verlauf'; static Future> laden() async { final prefs = await SharedPreferences.getInstance(); return prefs.getStringList(_key) ?? const []; } /// Trägt [begriff] ein und gibt den neuen Verlauf zurück. static Future> merke(String begriff) async { final prefs = await SharedPreferences.getInstance(); final neu = verlaufMit(prefs.getStringList(_key) ?? const [], begriff); await prefs.setStringList(_key, neu); return neu; } static Future leeren() async { final prefs = await SharedPreferences.getInstance(); await prefs.remove(_key); } }