Implement deleting an account

This commit is contained in:
2025-05-11 22:47:14 +02:00
parent 93d152f7e4
commit e7e671f4cd
20 changed files with 2180 additions and 1637 deletions

View File

@@ -12,7 +12,14 @@ import 'package:okane/ui/pages/transaction_list.dart';
import 'package:okane/ui/state/core.dart';
import 'package:okane/ui/widgets/account_indicator.dart';
enum OkanePage { accounts, transactions, beneficiaries, templates, budgets, settings }
enum OkanePage {
accounts,
transactions,
beneficiaries,
templates,
budgets,
settings,
}
typedef OkanePageBuilder = Widget Function(bool);

View File

@@ -5,12 +5,11 @@ import 'package:okane/database/collections/account.dart';
import 'package:okane/database/collections/beneficiary.dart';
import 'package:okane/database/database.dart';
import 'package:okane/ui/pages/account/breakdown_card.dart';
import 'package:okane/ui/pages/account/delete_account.dart';
import 'package:okane/ui/pages/account/total_balance_card.dart';
import 'package:okane/ui/pages/account/upcoming_transactions_card.dart';
import 'package:okane/ui/state/core.dart';
import 'package:okane/ui/utils.dart';
import 'package:okane/ui/widgets/piechart.dart';
import 'package:okane/ui/widgets/piechart_card.dart';
class AccountListPage extends StatefulWidget {
final bool isPage;
@@ -26,6 +25,7 @@ class AccountListPageState extends State<AccountListPage> {
@override
Widget build(BuildContext context) {
final bloc = GetIt.I.get<CoreCubit>();
return Stack(
children: [
ListView(
@@ -38,6 +38,79 @@ class AccountListPageState extends State<AccountListPage> {
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: BlocBuilder<CoreCubit, CoreState>(
builder:
(context, state) => Row(
children: [
OutlinedButton(
onPressed:
state.accounts.isEmpty
? null
: () {
showDialogOrModal(
context: context,
builder:
(context) => ListView.builder(
shrinkWrap: true,
itemCount: state.accounts.length,
itemBuilder: (context, index) {
final item =
state.accounts[index];
return ListTile(
title: Text(item.name!),
trailing: IconButton(
icon: Icon(Icons.delete),
color: Colors.red,
onPressed: () async {
await showDialog(
context: context,
barrierDismissible: false,
builder:
(context) =>
DeleteAccountPopup(
account: item,
onCancel: () {
Navigator.of(
context,
).pop();
Navigator.of(
context,
).pop();
},
afterDelete: () {
Navigator.of(
context,
).pop();
Navigator.of(
context,
).pop();
},
),
);
},
),
onTap: () {
GetIt.I
.get<CoreCubit>()
.setActiveAccountIndex(
index,
);
Navigator.of(context).pop();
},
);
},
),
);
},
child: Text(bloc.activeAccount?.name ?? "None"),
),
],
),
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: BlocBuilder<CoreCubit, CoreState>(
@@ -66,34 +139,26 @@ class AccountListPageState extends State<AccountListPage> {
),
)
: null,
child: InkWell(
onTap: () {
GetIt.I
.get<CoreCubit>()
.setActiveAccountIndex(index);
},
borderRadius: BorderRadius.circular(12),
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(state.accounts[index].name!),
FutureBuilder(
future: getTotalBalance(
state.accounts[index],
),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}
return Text(
formatCurrency(snapshot.data!),
);
},
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(state.accounts[index].name!),
FutureBuilder(
future: getTotalBalance(
state.accounts[index],
),
],
),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}
return Text(
formatCurrency(snapshot.data!),
);
},
),
],
),
),
),

View File

@@ -0,0 +1,66 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:get_it/get_it.dart';
import 'package:okane/database/collections/account.dart';
import 'package:okane/ui/state/core.dart';
class DeleteAccountPopup extends StatelessWidget {
final Account account;
final VoidCallback onCancel;
final VoidCallback afterDelete;
const DeleteAccountPopup({
super.key,
required this.account,
required this.onCancel,
required this.afterDelete,
});
@override
Widget build(BuildContext context) {
return BlocBuilder<CoreCubit, CoreState>(
builder:
(context, state) => AlertDialog(
title: Text("Delete Account"),
content:
state.isDeletingAccount
? Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: 80,
height: 80,
child: CircularProgressIndicator(),
),
],
)
: Text(
"Are you sure you want to delete the account '${account.name!}'? This will delete all transactions as well.",
),
actions: [
TextButton(
onPressed:
state.isDeletingAccount
? null
: () async {
await GetIt.I.get<CoreCubit>().deleteAccount(account);
afterDelete();
},
child: Text("Delete", style: TextStyle(color: Colors.red)),
),
TextButton(
onPressed:
state.isDeletingAccount
? null
: () {
onCancel();
},
child: Text("Cancel"),
),
],
),
);
}
}

View File

@@ -17,10 +17,7 @@ class BeneficiaryListPage extends StatelessWidget {
itemBuilder: (context, index) {
final item = state.beneficiaries[index];
return ListTile(
leading: ImageWrapper(
title: item.name,
path: item.imagePath,
),
leading: ImageWrapper(title: item.name, path: item.imagePath),
title: Text(item.name),
);
},

View File

@@ -30,7 +30,10 @@ class SettingsPage extends StatelessWidget {
ColorSchemeSettings.values
.map(
(s) => ListTile(
leading: state.settings.colorScheme == s ? Icon(Icons.check) : null,
leading:
state.settings.colorScheme == s
? Icon(Icons.check)
: null,
title: Text(switch (s) {
ColorSchemeSettings.dark => "Dark",
ColorSchemeSettings.light => "Light",

View File

@@ -1,5 +1,4 @@
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:okane/database/collections/account.dart';
@@ -9,7 +8,7 @@ import 'package:okane/database/collections/expense_category.dart';
import 'package:okane/database/collections/recurrent.dart';
import 'package:okane/database/collections/template.dart';
import 'package:okane/database/collections/transaction.dart';
import 'package:okane/database/database.dart';
import 'package:okane/database/database.dart' as db;
import 'package:okane/ui/navigation.dart';
part 'core.freezed.dart';
@@ -28,6 +27,7 @@ abstract class CoreState with _$CoreState {
@Default([]) List<ExpenseCategory> expenseCategories,
@Default([]) List<Budget> budgets,
@Default(null) Budget? activeBudget,
@Default(false) bool isDeletingAccount,
}) = _CoreState;
}
@@ -44,9 +44,9 @@ class CoreCubit extends Cubit<CoreState> {
void setupAccountStream() {
_accountsStreamSubscription?.cancel();
_accountsStreamSubscription = watchAccounts().listen((_) async {
_accountsStreamSubscription = db.watchAccounts().listen((_) async {
final resetStreams = state.activeAccountIndex == null;
final accounts = await getAccounts();
final accounts = await db.getAccounts();
emit(
state.copyWith(
accounts: accounts,
@@ -63,61 +63,83 @@ class CoreCubit extends Cubit<CoreState> {
void setupStreams(Account account) {
setupAccountStream();
_recurringTransactionStreamSubscription?.cancel();
_recurringTransactionStreamSubscription = watchRecurringTransactions(
activeAccount!,
).listen((_) async {
print("RECURRING UPDATE");
emit(
state.copyWith(
recurringTransactions: await getRecurringTransactions(activeAccount!),
),
);
});
_recurringTransactionStreamSubscription = db
.watchRecurringTransactions(activeAccount!)
.listen((_) async {
print("RECURRING UPDATE");
emit(
state.copyWith(
recurringTransactions: await db.getRecurringTransactions(
activeAccount!,
),
),
);
});
_transactionTemplatesStreamSubcription?.cancel();
_transactionTemplatesStreamSubcription = watchTransactionTemplates(
activeAccount!,
).listen((_) async {
emit(
state.copyWith(
transactionTemplates: await getTransactionTemplates(activeAccount!),
),
);
});
_transactionTemplatesStreamSubcription = db
.watchTransactionTemplates(activeAccount!)
.listen((_) async {
emit(
state.copyWith(
transactionTemplates: await db.getTransactionTemplates(
activeAccount!,
),
),
);
});
_transactionsStreamSubscription?.cancel();
_transactionsStreamSubscription = watchTransactions(activeAccount!).listen((
_transactionsStreamSubscription = db
.watchTransactions(activeAccount!)
.listen((_) async {
emit(
state.copyWith(
transactions: await db.getTransactions(activeAccount!),
),
);
});
_beneficiariesStreamSubscription?.cancel();
_beneficiariesStreamSubscription = db.watchBeneficiaries().listen((
_,
) async {
emit(state.copyWith(transactions: await getTransactions(activeAccount!)));
});
_beneficiariesStreamSubscription?.cancel();
_beneficiariesStreamSubscription = watchBeneficiaries().listen((_) async {
emit(state.copyWith(beneficiaries: await getBeneficiaries()));
emit(state.copyWith(beneficiaries: await db.getBeneficiaries()));
});
_expenseCategoryStreamSubscription?.cancel();
_expenseCategoryStreamSubscription = watchExpenseCategory().listen((
_expenseCategoryStreamSubscription = db.watchExpenseCategory().listen((
_,
) async {
emit(state.copyWith(expenseCategories: await getExpenseCategories()));
emit(state.copyWith(expenseCategories: await db.getExpenseCategories()));
});
_budgetsStreamSubscription?.cancel();
_budgetsStreamSubscription = watchBudgets(activeAccount!).listen((_) async {
emit(state.copyWith(budgets: await getBudgets(activeAccount!)));
_budgetsStreamSubscription = db.watchBudgets(activeAccount!).listen((
_,
) async {
emit(state.copyWith(budgets: await db.getBudgets(activeAccount!)));
});
}
void cancelStreams() {
_recurringTransactionStreamSubscription?.cancel();
_accountsStreamSubscription?.cancel();
_beneficiariesStreamSubscription?.cancel();
_budgetsStreamSubscription?.cancel();
_expenseCategoryStreamSubscription?.cancel();
_transactionsStreamSubscription?.cancel();
_transactionTemplatesStreamSubcription?.cancel();
}
Future<void> init() async {
final accounts = await getAccounts();
final accounts = await db.getAccounts();
final account = accounts.isEmpty ? null : accounts[0];
emit(
state.copyWith(
accounts: accounts,
activeAccountIndex: accounts.isEmpty ? null : 0,
transactions: await getTransactions(account),
beneficiaries: await getBeneficiaries(),
transactionTemplates: await getTransactionTemplates(account),
recurringTransactions: await getRecurringTransactions(account),
expenseCategories: await getExpenseCategories(),
budgets: await getBudgets(account),
transactions: await db.getTransactions(account),
beneficiaries: await db.getBeneficiaries(),
transactionTemplates: await db.getTransactionTemplates(account),
recurringTransactions: await db.getRecurringTransactions(account),
expenseCategories: await db.getExpenseCategories(),
budgets: await db.getBudgets(account),
),
);
@@ -138,11 +160,11 @@ class CoreCubit extends Cubit<CoreState> {
emit(
state.copyWith(
activeAccountIndex: index,
transactions: await getTransactions(account),
beneficiaries: await getBeneficiaries(),
transactionTemplates: await getTransactionTemplates(account),
recurringTransactions: await getRecurringTransactions(account),
budgets: await getBudgets(account),
transactions: await db.getTransactions(account),
beneficiaries: await db.getBeneficiaries(),
transactionTemplates: await db.getTransactionTemplates(account),
recurringTransactions: await db.getRecurringTransactions(account),
budgets: await db.getBudgets(account),
activeBudget: null,
activeTransaction: null,
),
@@ -162,6 +184,21 @@ class CoreCubit extends Cubit<CoreState> {
emit(state.copyWith(activeBudget: budget));
}
Future<void> deleteAccount(Account account) async {
final l = List.of(state.accounts);
l.removeWhere((a) => a.id == account.id);
final newIndex = l.isEmpty ? null : 0;
emit(state.copyWith(activeAccountIndex: newIndex, isDeletingAccount: true));
cancelStreams();
try {
await db.deleteAccount(account);
} finally {
emit(state.copyWith(isDeletingAccount: false));
}
await init();
}
Account? get activeAccount =>
state.activeAccountIndex == null
? null

View File

@@ -12,7 +12,8 @@ part of 'core.dart';
T _$identity<T>(T value) => value;
final _privateConstructorUsedError = UnsupportedError(
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
);
/// @nodoc
mixin _$CoreState {
@@ -30,6 +31,7 @@ mixin _$CoreState {
throw _privateConstructorUsedError;
List<Budget> get budgets => throw _privateConstructorUsedError;
Budget? get activeBudget => throw _privateConstructorUsedError;
bool get isDeletingAccount => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
$CoreStateCopyWith<CoreState> get copyWith =>
@@ -41,18 +43,20 @@ abstract class $CoreStateCopyWith<$Res> {
factory $CoreStateCopyWith(CoreState value, $Res Function(CoreState) then) =
_$CoreStateCopyWithImpl<$Res, CoreState>;
@useResult
$Res call(
{OkanePage activePage,
int? activeAccountIndex,
Transaction? activeTransaction,
List<Account> accounts,
List<RecurringTransaction> recurringTransactions,
List<Transaction> transactions,
List<TransactionTemplate> transactionTemplates,
List<Beneficiary> beneficiaries,
List<ExpenseCategory> expenseCategories,
List<Budget> budgets,
Budget? activeBudget});
$Res call({
OkanePage activePage,
int? activeAccountIndex,
Transaction? activeTransaction,
List<Account> accounts,
List<RecurringTransaction> recurringTransactions,
List<Transaction> transactions,
List<TransactionTemplate> transactionTemplates,
List<Beneficiary> beneficiaries,
List<ExpenseCategory> expenseCategories,
List<Budget> budgets,
Budget? activeBudget,
bool isDeletingAccount,
});
}
/// @nodoc
@@ -79,53 +83,73 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState>
Object? expenseCategories = null,
Object? budgets = null,
Object? activeBudget = freezed,
Object? isDeletingAccount = null,
}) {
return _then(_value.copyWith(
activePage: null == activePage
? _value.activePage
: activePage // ignore: cast_nullable_to_non_nullable
as OkanePage,
activeAccountIndex: freezed == activeAccountIndex
? _value.activeAccountIndex
: activeAccountIndex // ignore: cast_nullable_to_non_nullable
as int?,
activeTransaction: freezed == activeTransaction
? _value.activeTransaction
: activeTransaction // ignore: cast_nullable_to_non_nullable
as Transaction?,
accounts: null == accounts
? _value.accounts
: accounts // ignore: cast_nullable_to_non_nullable
as List<Account>,
recurringTransactions: null == recurringTransactions
? _value.recurringTransactions
: recurringTransactions // ignore: cast_nullable_to_non_nullable
as List<RecurringTransaction>,
transactions: null == transactions
? _value.transactions
: transactions // ignore: cast_nullable_to_non_nullable
as List<Transaction>,
transactionTemplates: null == transactionTemplates
? _value.transactionTemplates
: transactionTemplates // ignore: cast_nullable_to_non_nullable
as List<TransactionTemplate>,
beneficiaries: null == beneficiaries
? _value.beneficiaries
: beneficiaries // ignore: cast_nullable_to_non_nullable
as List<Beneficiary>,
expenseCategories: null == expenseCategories
? _value.expenseCategories
: expenseCategories // ignore: cast_nullable_to_non_nullable
as List<ExpenseCategory>,
budgets: null == budgets
? _value.budgets
: budgets // ignore: cast_nullable_to_non_nullable
as List<Budget>,
activeBudget: freezed == activeBudget
? _value.activeBudget
: activeBudget // ignore: cast_nullable_to_non_nullable
as Budget?,
) as $Val);
return _then(
_value.copyWith(
activePage:
null == activePage
? _value.activePage
: activePage // ignore: cast_nullable_to_non_nullable
as OkanePage,
activeAccountIndex:
freezed == activeAccountIndex
? _value.activeAccountIndex
: activeAccountIndex // ignore: cast_nullable_to_non_nullable
as int?,
activeTransaction:
freezed == activeTransaction
? _value.activeTransaction
: activeTransaction // ignore: cast_nullable_to_non_nullable
as Transaction?,
accounts:
null == accounts
? _value.accounts
: accounts // ignore: cast_nullable_to_non_nullable
as List<Account>,
recurringTransactions:
null == recurringTransactions
? _value.recurringTransactions
: recurringTransactions // ignore: cast_nullable_to_non_nullable
as List<RecurringTransaction>,
transactions:
null == transactions
? _value.transactions
: transactions // ignore: cast_nullable_to_non_nullable
as List<Transaction>,
transactionTemplates:
null == transactionTemplates
? _value.transactionTemplates
: transactionTemplates // ignore: cast_nullable_to_non_nullable
as List<TransactionTemplate>,
beneficiaries:
null == beneficiaries
? _value.beneficiaries
: beneficiaries // ignore: cast_nullable_to_non_nullable
as List<Beneficiary>,
expenseCategories:
null == expenseCategories
? _value.expenseCategories
: expenseCategories // ignore: cast_nullable_to_non_nullable
as List<ExpenseCategory>,
budgets:
null == budgets
? _value.budgets
: budgets // ignore: cast_nullable_to_non_nullable
as List<Budget>,
activeBudget:
freezed == activeBudget
? _value.activeBudget
: activeBudget // ignore: cast_nullable_to_non_nullable
as Budget?,
isDeletingAccount:
null == isDeletingAccount
? _value.isDeletingAccount
: isDeletingAccount // ignore: cast_nullable_to_non_nullable
as bool,
)
as $Val,
);
}
}
@@ -133,22 +157,25 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState>
abstract class _$$CoreStateImplCopyWith<$Res>
implements $CoreStateCopyWith<$Res> {
factory _$$CoreStateImplCopyWith(
_$CoreStateImpl value, $Res Function(_$CoreStateImpl) then) =
__$$CoreStateImplCopyWithImpl<$Res>;
_$CoreStateImpl value,
$Res Function(_$CoreStateImpl) then,
) = __$$CoreStateImplCopyWithImpl<$Res>;
@override
@useResult
$Res call(
{OkanePage activePage,
int? activeAccountIndex,
Transaction? activeTransaction,
List<Account> accounts,
List<RecurringTransaction> recurringTransactions,
List<Transaction> transactions,
List<TransactionTemplate> transactionTemplates,
List<Beneficiary> beneficiaries,
List<ExpenseCategory> expenseCategories,
List<Budget> budgets,
Budget? activeBudget});
$Res call({
OkanePage activePage,
int? activeAccountIndex,
Transaction? activeTransaction,
List<Account> accounts,
List<RecurringTransaction> recurringTransactions,
List<Transaction> transactions,
List<TransactionTemplate> transactionTemplates,
List<Beneficiary> beneficiaries,
List<ExpenseCategory> expenseCategories,
List<Budget> budgets,
Budget? activeBudget,
bool isDeletingAccount,
});
}
/// @nodoc
@@ -156,8 +183,9 @@ class __$$CoreStateImplCopyWithImpl<$Res>
extends _$CoreStateCopyWithImpl<$Res, _$CoreStateImpl>
implements _$$CoreStateImplCopyWith<$Res> {
__$$CoreStateImplCopyWithImpl(
_$CoreStateImpl _value, $Res Function(_$CoreStateImpl) _then)
: super(_value, _then);
_$CoreStateImpl _value,
$Res Function(_$CoreStateImpl) _then,
) : super(_value, _then);
@pragma('vm:prefer-inline')
@override
@@ -173,78 +201,98 @@ class __$$CoreStateImplCopyWithImpl<$Res>
Object? expenseCategories = null,
Object? budgets = null,
Object? activeBudget = freezed,
Object? isDeletingAccount = null,
}) {
return _then(_$CoreStateImpl(
activePage: null == activePage
? _value.activePage
: activePage // ignore: cast_nullable_to_non_nullable
as OkanePage,
activeAccountIndex: freezed == activeAccountIndex
? _value.activeAccountIndex
: activeAccountIndex // ignore: cast_nullable_to_non_nullable
as int?,
activeTransaction: freezed == activeTransaction
? _value.activeTransaction
: activeTransaction // ignore: cast_nullable_to_non_nullable
as Transaction?,
accounts: null == accounts
? _value._accounts
: accounts // ignore: cast_nullable_to_non_nullable
as List<Account>,
recurringTransactions: null == recurringTransactions
? _value._recurringTransactions
: recurringTransactions // ignore: cast_nullable_to_non_nullable
as List<RecurringTransaction>,
transactions: null == transactions
? _value._transactions
: transactions // ignore: cast_nullable_to_non_nullable
as List<Transaction>,
transactionTemplates: null == transactionTemplates
? _value._transactionTemplates
: transactionTemplates // ignore: cast_nullable_to_non_nullable
as List<TransactionTemplate>,
beneficiaries: null == beneficiaries
? _value._beneficiaries
: beneficiaries // ignore: cast_nullable_to_non_nullable
as List<Beneficiary>,
expenseCategories: null == expenseCategories
? _value._expenseCategories
: expenseCategories // ignore: cast_nullable_to_non_nullable
as List<ExpenseCategory>,
budgets: null == budgets
? _value._budgets
: budgets // ignore: cast_nullable_to_non_nullable
as List<Budget>,
activeBudget: freezed == activeBudget
? _value.activeBudget
: activeBudget // ignore: cast_nullable_to_non_nullable
as Budget?,
));
return _then(
_$CoreStateImpl(
activePage:
null == activePage
? _value.activePage
: activePage // ignore: cast_nullable_to_non_nullable
as OkanePage,
activeAccountIndex:
freezed == activeAccountIndex
? _value.activeAccountIndex
: activeAccountIndex // ignore: cast_nullable_to_non_nullable
as int?,
activeTransaction:
freezed == activeTransaction
? _value.activeTransaction
: activeTransaction // ignore: cast_nullable_to_non_nullable
as Transaction?,
accounts:
null == accounts
? _value._accounts
: accounts // ignore: cast_nullable_to_non_nullable
as List<Account>,
recurringTransactions:
null == recurringTransactions
? _value._recurringTransactions
: recurringTransactions // ignore: cast_nullable_to_non_nullable
as List<RecurringTransaction>,
transactions:
null == transactions
? _value._transactions
: transactions // ignore: cast_nullable_to_non_nullable
as List<Transaction>,
transactionTemplates:
null == transactionTemplates
? _value._transactionTemplates
: transactionTemplates // ignore: cast_nullable_to_non_nullable
as List<TransactionTemplate>,
beneficiaries:
null == beneficiaries
? _value._beneficiaries
: beneficiaries // ignore: cast_nullable_to_non_nullable
as List<Beneficiary>,
expenseCategories:
null == expenseCategories
? _value._expenseCategories
: expenseCategories // ignore: cast_nullable_to_non_nullable
as List<ExpenseCategory>,
budgets:
null == budgets
? _value._budgets
: budgets // ignore: cast_nullable_to_non_nullable
as List<Budget>,
activeBudget:
freezed == activeBudget
? _value.activeBudget
: activeBudget // ignore: cast_nullable_to_non_nullable
as Budget?,
isDeletingAccount:
null == isDeletingAccount
? _value.isDeletingAccount
: isDeletingAccount // ignore: cast_nullable_to_non_nullable
as bool,
),
);
}
}
/// @nodoc
class _$CoreStateImpl implements _CoreState {
const _$CoreStateImpl(
{this.activePage = OkanePage.accounts,
this.activeAccountIndex,
this.activeTransaction = null,
final List<Account> accounts = const [],
final List<RecurringTransaction> recurringTransactions = const [],
final List<Transaction> transactions = const [],
final List<TransactionTemplate> transactionTemplates = const [],
final List<Beneficiary> beneficiaries = const [],
final List<ExpenseCategory> expenseCategories = const [],
final List<Budget> budgets = const [],
this.activeBudget = null})
: _accounts = accounts,
_recurringTransactions = recurringTransactions,
_transactions = transactions,
_transactionTemplates = transactionTemplates,
_beneficiaries = beneficiaries,
_expenseCategories = expenseCategories,
_budgets = budgets;
const _$CoreStateImpl({
this.activePage = OkanePage.accounts,
this.activeAccountIndex,
this.activeTransaction = null,
final List<Account> accounts = const [],
final List<RecurringTransaction> recurringTransactions = const [],
final List<Transaction> transactions = const [],
final List<TransactionTemplate> transactionTemplates = const [],
final List<Beneficiary> beneficiaries = const [],
final List<ExpenseCategory> expenseCategories = const [],
final List<Budget> budgets = const [],
this.activeBudget = null,
this.isDeletingAccount = false,
}) : _accounts = accounts,
_recurringTransactions = recurringTransactions,
_transactions = transactions,
_transactionTemplates = transactionTemplates,
_beneficiaries = beneficiaries,
_expenseCategories = expenseCategories,
_budgets = budgets;
@override
@JsonKey()
@@ -323,10 +371,13 @@ class _$CoreStateImpl implements _CoreState {
@override
@JsonKey()
final Budget? activeBudget;
@override
@JsonKey()
final bool isDeletingAccount;
@override
String toString() {
return 'CoreState(activePage: $activePage, activeAccountIndex: $activeAccountIndex, activeTransaction: $activeTransaction, accounts: $accounts, recurringTransactions: $recurringTransactions, transactions: $transactions, transactionTemplates: $transactionTemplates, beneficiaries: $beneficiaries, expenseCategories: $expenseCategories, budgets: $budgets, activeBudget: $activeBudget)';
return 'CoreState(activePage: $activePage, activeAccountIndex: $activeAccountIndex, activeTransaction: $activeTransaction, accounts: $accounts, recurringTransactions: $recurringTransactions, transactions: $transactions, transactionTemplates: $transactionTemplates, beneficiaries: $beneficiaries, expenseCategories: $expenseCategories, budgets: $budgets, activeBudget: $activeBudget, isDeletingAccount: $isDeletingAccount)';
}
@override
@@ -341,35 +392,49 @@ class _$CoreStateImpl implements _CoreState {
(identical(other.activeTransaction, activeTransaction) ||
other.activeTransaction == activeTransaction) &&
const DeepCollectionEquality().equals(other._accounts, _accounts) &&
const DeepCollectionEquality()
.equals(other._recurringTransactions, _recurringTransactions) &&
const DeepCollectionEquality()
.equals(other._transactions, _transactions) &&
const DeepCollectionEquality()
.equals(other._transactionTemplates, _transactionTemplates) &&
const DeepCollectionEquality()
.equals(other._beneficiaries, _beneficiaries) &&
const DeepCollectionEquality()
.equals(other._expenseCategories, _expenseCategories) &&
const DeepCollectionEquality().equals(
other._recurringTransactions,
_recurringTransactions,
) &&
const DeepCollectionEquality().equals(
other._transactions,
_transactions,
) &&
const DeepCollectionEquality().equals(
other._transactionTemplates,
_transactionTemplates,
) &&
const DeepCollectionEquality().equals(
other._beneficiaries,
_beneficiaries,
) &&
const DeepCollectionEquality().equals(
other._expenseCategories,
_expenseCategories,
) &&
const DeepCollectionEquality().equals(other._budgets, _budgets) &&
(identical(other.activeBudget, activeBudget) ||
other.activeBudget == activeBudget));
other.activeBudget == activeBudget) &&
(identical(other.isDeletingAccount, isDeletingAccount) ||
other.isDeletingAccount == isDeletingAccount));
}
@override
int get hashCode => Object.hash(
runtimeType,
activePage,
activeAccountIndex,
activeTransaction,
const DeepCollectionEquality().hash(_accounts),
const DeepCollectionEquality().hash(_recurringTransactions),
const DeepCollectionEquality().hash(_transactions),
const DeepCollectionEquality().hash(_transactionTemplates),
const DeepCollectionEquality().hash(_beneficiaries),
const DeepCollectionEquality().hash(_expenseCategories),
const DeepCollectionEquality().hash(_budgets),
activeBudget);
runtimeType,
activePage,
activeAccountIndex,
activeTransaction,
const DeepCollectionEquality().hash(_accounts),
const DeepCollectionEquality().hash(_recurringTransactions),
const DeepCollectionEquality().hash(_transactions),
const DeepCollectionEquality().hash(_transactionTemplates),
const DeepCollectionEquality().hash(_beneficiaries),
const DeepCollectionEquality().hash(_expenseCategories),
const DeepCollectionEquality().hash(_budgets),
activeBudget,
isDeletingAccount,
);
@JsonKey(ignore: true)
@override
@@ -379,18 +444,20 @@ class _$CoreStateImpl implements _CoreState {
}
abstract class _CoreState implements CoreState {
const factory _CoreState(
{final OkanePage activePage,
final int? activeAccountIndex,
final Transaction? activeTransaction,
final List<Account> accounts,
final List<RecurringTransaction> recurringTransactions,
final List<Transaction> transactions,
final List<TransactionTemplate> transactionTemplates,
final List<Beneficiary> beneficiaries,
final List<ExpenseCategory> expenseCategories,
final List<Budget> budgets,
final Budget? activeBudget}) = _$CoreStateImpl;
const factory _CoreState({
final OkanePage activePage,
final int? activeAccountIndex,
final Transaction? activeTransaction,
final List<Account> accounts,
final List<RecurringTransaction> recurringTransactions,
final List<Transaction> transactions,
final List<TransactionTemplate> transactionTemplates,
final List<Beneficiary> beneficiaries,
final List<ExpenseCategory> expenseCategories,
final List<Budget> budgets,
final Budget? activeBudget,
final bool isDeletingAccount,
}) = _$CoreStateImpl;
@override
OkanePage get activePage;
@@ -415,6 +482,8 @@ abstract class _CoreState implements CoreState {
@override
Budget? get activeBudget;
@override
bool get isDeletingAccount;
@override
@JsonKey(ignore: true)
_$$CoreStateImplCopyWith<_$CoreStateImpl> get copyWith =>
throw _privateConstructorUsedError;

View File

@@ -12,7 +12,8 @@ part of 'settings.dart';
T _$identity<T>(T value) => value;
final _privateConstructorUsedError = UnsupportedError(
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
);
Settings _$SettingsFromJson(Map<String, dynamic> json) {
return _Settings.fromJson(json);
@@ -48,15 +49,17 @@ class _$SettingsCopyWithImpl<$Res, $Val extends Settings>
@pragma('vm:prefer-inline')
@override
$Res call({
Object? colorScheme = null,
}) {
return _then(_value.copyWith(
colorScheme: null == colorScheme
? _value.colorScheme
: colorScheme // ignore: cast_nullable_to_non_nullable
as ColorSchemeSettings,
) as $Val);
$Res call({Object? colorScheme = null}) {
return _then(
_value.copyWith(
colorScheme:
null == colorScheme
? _value.colorScheme
: colorScheme // ignore: cast_nullable_to_non_nullable
as ColorSchemeSettings,
)
as $Val,
);
}
}
@@ -64,8 +67,9 @@ class _$SettingsCopyWithImpl<$Res, $Val extends Settings>
abstract class _$$SettingsImplCopyWith<$Res>
implements $SettingsCopyWith<$Res> {
factory _$$SettingsImplCopyWith(
_$SettingsImpl value, $Res Function(_$SettingsImpl) then) =
__$$SettingsImplCopyWithImpl<$Res>;
_$SettingsImpl value,
$Res Function(_$SettingsImpl) then,
) = __$$SettingsImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({ColorSchemeSettings colorScheme});
@@ -76,20 +80,22 @@ class __$$SettingsImplCopyWithImpl<$Res>
extends _$SettingsCopyWithImpl<$Res, _$SettingsImpl>
implements _$$SettingsImplCopyWith<$Res> {
__$$SettingsImplCopyWithImpl(
_$SettingsImpl _value, $Res Function(_$SettingsImpl) _then)
: super(_value, _then);
_$SettingsImpl _value,
$Res Function(_$SettingsImpl) _then,
) : super(_value, _then);
@pragma('vm:prefer-inline')
@override
$Res call({
Object? colorScheme = null,
}) {
return _then(_$SettingsImpl(
colorScheme: null == colorScheme
? _value.colorScheme
: colorScheme // ignore: cast_nullable_to_non_nullable
as ColorSchemeSettings,
));
$Res call({Object? colorScheme = null}) {
return _then(
_$SettingsImpl(
colorScheme:
null == colorScheme
? _value.colorScheme
: colorScheme // ignore: cast_nullable_to_non_nullable
as ColorSchemeSettings,
),
);
}
}
@@ -131,9 +137,7 @@ class _$SettingsImpl implements _Settings {
@override
Map<String, dynamic> toJson() {
return _$$SettingsImplToJson(
this,
);
return _$$SettingsImplToJson(this);
}
}
@@ -164,8 +168,9 @@ mixin _$SettingsWrapper {
/// @nodoc
abstract class $SettingsWrapperCopyWith<$Res> {
factory $SettingsWrapperCopyWith(
SettingsWrapper value, $Res Function(SettingsWrapper) then) =
_$SettingsWrapperCopyWithImpl<$Res, SettingsWrapper>;
SettingsWrapper value,
$Res Function(SettingsWrapper) then,
) = _$SettingsWrapperCopyWithImpl<$Res, SettingsWrapper>;
@useResult
$Res call({Settings settings});
@@ -184,15 +189,17 @@ class _$SettingsWrapperCopyWithImpl<$Res, $Val extends SettingsWrapper>
@pragma('vm:prefer-inline')
@override
$Res call({
Object? settings = null,
}) {
return _then(_value.copyWith(
settings: null == settings
? _value.settings
: settings // ignore: cast_nullable_to_non_nullable
as Settings,
) as $Val);
$Res call({Object? settings = null}) {
return _then(
_value.copyWith(
settings:
null == settings
? _value.settings
: settings // ignore: cast_nullable_to_non_nullable
as Settings,
)
as $Val,
);
}
@override
@@ -207,9 +214,10 @@ class _$SettingsWrapperCopyWithImpl<$Res, $Val extends SettingsWrapper>
/// @nodoc
abstract class _$$SettingsWrapperImplCopyWith<$Res>
implements $SettingsWrapperCopyWith<$Res> {
factory _$$SettingsWrapperImplCopyWith(_$SettingsWrapperImpl value,
$Res Function(_$SettingsWrapperImpl) then) =
__$$SettingsWrapperImplCopyWithImpl<$Res>;
factory _$$SettingsWrapperImplCopyWith(
_$SettingsWrapperImpl value,
$Res Function(_$SettingsWrapperImpl) then,
) = __$$SettingsWrapperImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({Settings settings});
@@ -223,20 +231,22 @@ class __$$SettingsWrapperImplCopyWithImpl<$Res>
extends _$SettingsWrapperCopyWithImpl<$Res, _$SettingsWrapperImpl>
implements _$$SettingsWrapperImplCopyWith<$Res> {
__$$SettingsWrapperImplCopyWithImpl(
_$SettingsWrapperImpl _value, $Res Function(_$SettingsWrapperImpl) _then)
: super(_value, _then);
_$SettingsWrapperImpl _value,
$Res Function(_$SettingsWrapperImpl) _then,
) : super(_value, _then);
@pragma('vm:prefer-inline')
@override
$Res call({
Object? settings = null,
}) {
return _then(_$SettingsWrapperImpl(
settings: null == settings
? _value.settings
: settings // ignore: cast_nullable_to_non_nullable
as Settings,
));
$Res call({Object? settings = null}) {
return _then(
_$SettingsWrapperImpl(
settings:
null == settings
? _value.settings
: settings // ignore: cast_nullable_to_non_nullable
as Settings,
),
);
}
}
@@ -271,7 +281,9 @@ class _$SettingsWrapperImpl implements _SettingsWrapper {
@pragma('vm:prefer-inline')
_$$SettingsWrapperImplCopyWith<_$SettingsWrapperImpl> get copyWith =>
__$$SettingsWrapperImplCopyWithImpl<_$SettingsWrapperImpl>(
this, _$identity);
this,
_$identity,
);
}
abstract class _SettingsWrapper implements SettingsWrapper {

View File

@@ -8,8 +8,11 @@ part of 'settings.dart';
_$SettingsImpl _$$SettingsImplFromJson(Map<String, dynamic> json) =>
_$SettingsImpl(
colorScheme: $enumDecodeNullable(
_$ColorSchemeSettingsEnumMap, json['colorScheme']) ??
colorScheme:
$enumDecodeNullable(
_$ColorSchemeSettingsEnumMap,
json['colorScheme'],
) ??
ColorSchemeSettings.system,
);