This commit is contained in:
2026-03-24 15:54:38 +03:00
parent a9fd08cdcf
commit 546bd0dc86
3 changed files with 103 additions and 45 deletions
+67 -15
View File
@@ -2,9 +2,11 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:intl/intl.dart';
import 'package:drift/drift.dart' as drift;
import '../../core/l10n/locale_provider.dart';
import '../../core/services/card_color_service.dart';
import '../../core/services/haptic_service.dart';
import '../../data/database/app_database.dart' hide Account;
import '../../shared/models/account.dart';
import '../settings/provider.dart';
import 'provider.dart';
@@ -52,6 +54,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
Account? editingAccount;
String tempAccountName = '';
String tempAccountCurrency = 'USD';
bool isAddingAccount = false;
void _onCardLongPress() {
final colors = ref.read(cardColorsProvider);
@@ -130,26 +133,73 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
Overlay.of(context, rootOverlay: true).insert(overlayEntry!);
}
void _onAddAccountTapped() {
final colors = ref.read(cardColorsProvider);
savedPrimary = colors.primary;
savedSecondary = colors.secondary;
savedPrimaryHSV = HSVColor.fromColor(colors.primary);
savedSecondaryHSV = HSVColor.fromColor(colors.secondary);
savedGradientType = colors.gradientType;
tempPrimary = colors.primary;
tempSecondary = colors.secondary;
tempPrimaryHSV = HSVColor.fromColor(colors.primary);
tempSecondaryHSV = HSVColor.fromColor(colors.secondary);
tempGradientType = colors.gradientType;
setState(() {
isAddingAccount = true;
editingAccount = null;
tempAccountName = '';
tempAccountCurrency = ref.read(currencyProvider).code;
editingCard = true;
editingPrimary = true;
});
_showAccountOverlay();
}
void closeAccountOverlay({required bool apply}) async {
if (apply && editingAccount != null) {
if (apply && tempAccountName.trim().isNotEmpty) {
HapticService.medium();
// Save colors
await ref
.read(accountCardColorsProvider(editingAccount!.id).notifier)
.save(tempPrimary, tempSecondary, tempGradientType);
if (isAddingAccount) {
// Create new account
final newId = DateTime.now().millisecondsSinceEpoch;
// Update account name and currency
final updatedAccount = Account(
id: editingAccount!.id,
name: tempAccountName,
isMain: editingAccount!.isMain,
sortOrder: editingAccount!.sortOrder,
currency: tempAccountCurrency,
createdAt: editingAccount!.createdAt,
);
// Insert the new account using Drift's insert method
final db = ref.read(appDatabaseProvider);
await db.into(db.accounts).insert(
AccountsCompanion.insert(
id: drift.Value(newId),
name: tempAccountName.trim(),
isMain: const drift.Value(false),
currency: drift.Value(tempAccountCurrency),
sortOrder: const drift.Value(99),
),
);
await ref.read(accountRepositoryProvider).update(updatedAccount);
// Save the chosen colors for the newly created account
await ref
.read(accountCardColorsProvider(newId).notifier)
.save(tempPrimary, tempSecondary, tempGradientType);
} else if (editingAccount != null) {
// Existing edit logic
// Save colors
await ref
.read(accountCardColorsProvider(editingAccount!.id).notifier)
.save(tempPrimary, tempSecondary, tempGradientType);
// Update account name and currency
final updatedAccount = Account(
id: editingAccount!.id,
name: tempAccountName.trim(),
isMain: editingAccount!.isMain,
sortOrder: editingAccount!.sortOrder,
currency: tempAccountCurrency,
createdAt: editingAccount!.createdAt,
);
await ref.read(accountRepositoryProvider).update(updatedAccount);
}
} else {
// Restore original values on cancel
setState(() {
@@ -168,6 +218,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
setState(() {
editingCard = false;
editingAccount = null;
isAddingAccount = false;
});
}
@@ -287,6 +338,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
currencyInfo: currencyInfo,
onLongPress: _onCardLongPress,
onAccountLongPress: _onAccountCardLongPress,
onAddAccountTap: _onAddAccountTapped,
previewPrimary: editingCard ? tempPrimary : null,
previewSecondary: editingCard ? tempSecondary : null,
previewGradientType: editingCard