Files
Hirameki-SRS/lib/src/services/custom_deck_repository.dart
2025-10-31 17:18:33 +01:00

52 lines
1.5 KiB
Dart

import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
import '../models/custom_kanji_item.dart';
class CustomDeckRepository {
static const _key = 'custom_deck';
Future<List<CustomKanjiItem>> getCustomDeck() async {
final prefs = await SharedPreferences.getInstance();
final jsonString = prefs.getString(_key);
if (jsonString != null) {
final List<dynamic> jsonList = json.decode(jsonString);
return jsonList.map((json) => CustomKanjiItem.fromJson(json)).toList();
}
return [];
}
Future<void> addCard(CustomKanjiItem item) async {
final deck = await getCustomDeck();
deck.add(item);
await saveDeck(deck);
}
Future<void> updateCard(CustomKanjiItem item) async {
await updateCards([item]);
}
Future<void> updateCards(List<CustomKanjiItem> itemsToUpdate) async {
final deck = await getCustomDeck();
for (var item in itemsToUpdate) {
final index = deck.indexWhere((element) => element.characters == item.characters);
if (index != -1) {
deck[index] = item;
}
}
await saveDeck(deck);
}
Future<void> deleteCard(CustomKanjiItem item) async {
final deck = await getCustomDeck();
deck.removeWhere((element) => element.characters == item.characters);
await saveDeck(deck);
}
Future<void> saveDeck(List<CustomKanjiItem> deck) async {
final prefs = await SharedPreferences.getInstance();
final jsonList = deck.map((item) => item.toJson()).toList();
await prefs.setString(_key, json.encode(jsonList));
}
}