new widget types

This commit is contained in:
davmar
2026-09-10 17:31:18 +02:00
parent 2727f1baf2
commit 86b5f1e09b
8 changed files with 817 additions and 89 deletions
+28
View File
@@ -521,6 +521,16 @@ class PbSyncService {
'display': r.getBoolValue('display', true),
'sortOrder': r.getIntValue('sort_order', 0),
'halfWidth': r.getBoolValue('half_width'),
'type': r.getStringValue('widget_type'),
'iconId': r.getStringValue('icon_id'),
'chartStyle': r.getStringValue('chart_style'),
'budgetCapMode': r.getStringValue('budget_cap_mode'),
'budgetFixedAmount': switch (r.get<dynamic>('budget_fixed_amount')) {
num n => n.toDouble(),
String s => double.tryParse(s) ?? 0,
_ => 0.0,
},
'budgetAverageMonths': r.getIntValue('budget_average_months', 3),
'labelIds': _jsonStringList(r.get<dynamic>('label_ids')),
'flow': r.getStringValue('flow'),
'amountRange': rangeRaw is Map
@@ -1199,6 +1209,12 @@ class PbSyncService {
'display': w.display,
'sort_order': w.sortOrder,
'half_width': w.halfWidth,
'widget_type': w.type.name,
'icon_id': w.iconId,
'chart_style': w.chartStyle.name,
'budget_cap_mode': w.budgetCapMode.name,
'budget_fixed_amount': w.budgetFixedAmount,
'budget_average_months': w.budgetAverageMonths,
'label_ids': w.labelIds,
'flow': w.flow.name,
'amount_range': {
@@ -1296,10 +1312,22 @@ class PbSyncService {
? Map<String, dynamic>.from(rangeRaw)
: const <String, dynamic>{};
double? asDouble(dynamic value) => value is num ? value.toDouble() : null;
final remoteFixed = switch (remote.get<dynamic>('budget_fixed_amount')) {
num n => n.toDouble(),
String s => double.tryParse(s) ?? 0,
_ => 0.0,
};
return remote.getStringValue('name') == w.name &&
remote.getBoolValue('display', true) == w.display &&
remote.getIntValue('sort_order', 0) == w.sortOrder &&
remote.getBoolValue('half_width') == w.halfWidth &&
remote.getStringValue('widget_type') == w.type.name &&
remote.getStringValue('icon_id') == w.iconId &&
remote.getStringValue('chart_style') == w.chartStyle.name &&
remote.getStringValue('budget_cap_mode') == w.budgetCapMode.name &&
(remoteFixed * 100).round() == (w.budgetFixedAmount * 100).round() &&
remote.getIntValue('budget_average_months', 3) ==
w.budgetAverageMonths &&
_sameIdList(remoteIds, w.labelIds) &&
remote.getStringValue('flow') == w.flow.name &&
asDouble(rangeMap['exact']) == w.amountRange.exact &&