new favourites feature

This commit is contained in:
davmar
2026-09-10 16:25:24 +02:00
parent aec89ac41d
commit 83295439d5
22 changed files with 3168 additions and 282 deletions
+50
View File
@@ -7,6 +7,8 @@ import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../models/bank.dart';
import '../models/home_filter_widget.dart';
import '../models/overview_favourite.dart';
import '../models/transaction_meta.dart';
import '../utils/constants.dart';
@@ -133,6 +135,54 @@ class StorageService {
return _prefs.setInt(StorageKeys.lookAheadMaxYears, years.clamp(1, 30));
}
List<OverviewFavourite> loadOverviewFavourites() {
final raw = _prefs.getString(StorageKeys.overviewFavourites);
if (raw == null || raw.isEmpty) return const [];
try {
final decoded = jsonDecode(raw);
if (decoded is! List) return const [];
return [
for (final item in decoded)
if (item is Map)
OverviewFavourite.fromJson(Map<String, dynamic>.from(item)),
];
} catch (_) {
return const [];
}
}
Future<void> saveOverviewFavourites(List<OverviewFavourite> favourites) {
final encoded = jsonEncode([
for (final fav in favourites) fav.toJson(),
]);
return _prefs.setString(StorageKeys.overviewFavourites, encoded);
}
List<HomeFilterWidget> loadHomeFilterWidgets() {
final raw = _prefs.getString(StorageKeys.homeFilterWidgets);
if (raw == null || raw.isEmpty) return const [];
try {
final decoded = jsonDecode(raw);
if (decoded is! List) return const [];
final list = [
for (final item in decoded)
if (item is Map)
HomeFilterWidget.fromJson(Map<String, dynamic>.from(item)),
];
list.sort((a, b) => a.sortOrder.compareTo(b.sortOrder));
return list;
} catch (_) {
return const [];
}
}
Future<void> saveHomeFilterWidgets(List<HomeFilterWidget> widgets) {
final encoded = jsonEncode([
for (final w in widgets) w.toJson(),
]);
return _prefs.setString(StorageKeys.homeFilterWidgets, encoded);
}
bool get useRemoteData => _prefs.getBool(StorageKeys.useRemoteData) ?? false;
Future<void> setUseRemoteData(bool value) {