Fix budgets appearing multiple times

This commit is contained in:
PapaTutuWawa 2025-05-18 14:46:48 +02:00
parent 42b1bbd438
commit facbc16bb2
6 changed files with 4909 additions and 3533 deletions

View File

@ -386,17 +386,10 @@ class BudgetsDao extends DatabaseAccessor<OkaneDatabase>
BudgetsDao(OkaneDatabase db) : super(db);
Stream<List<BudgetsDto>> budgetsStream(Account account) {
return (select(budgets)..where((b) => b.accountId.equals(account.id)))
.join([
leftOuterJoin(
budgetItems,
budgetItems.budgetId.equalsExp(budgets.id),
),
])
.watch()
.map((rows) {
return (select(budgets)
..where((b) => b.accountId.equals(account.id))).watch().map((rows) {
return rows.map((row) {
return BudgetsDto(budget: row.readTable(budgets));
return BudgetsDto(budget: row);
}).toList();
});
}

File diff suppressed because it is too large Load Diff

View File

@ -135,7 +135,7 @@ class TransactionDetailsPage extends StatelessWidget {
GetIt.I
.get<CoreCubit>()
.activeAccount!
.name!,
.name,
),
),
],

View File

@ -95,6 +95,7 @@ class CoreCubit extends Cubit<CoreState> {
_budgetsStreamSubscription = db.budgetsDao
.budgetsStream(activeAccount!)
.listen((budgets) async {
print("BUDGETS: $budgets");
emit(state.copyWith(budgets: budgets));
});
_loanStreamSubscription?.cancel();
@ -133,7 +134,7 @@ class CoreCubit extends Cubit<CoreState> {
expenseCategories: await db.expenseCategoriesDao.getExpenseCategories(
account,
),
budgets: await db.budgetsDao.getBudgets(account),
//budgets: await db.budgetsDao.getBudgets(account),
loans: await db.loansDao.getLoans(account),
),
);

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 {
@ -45,8 +46,8 @@ abstract class $CoreStateCopyWith<$Res> {
factory $CoreStateCopyWith(CoreState value, $Res Function(CoreState) then) =
_$CoreStateCopyWithImpl<$Res, CoreState>;
@useResult
$Res call(
{OkanePage activePage,
$Res call({
OkanePage activePage,
int? activeAccountIndex,
TransactionDto? activeTransaction,
List<Account> accounts,
@ -60,7 +61,8 @@ abstract class $CoreStateCopyWith<$Res> {
BudgetsDto? activeBudget,
List<LoanDto> loans,
LoanDto? activeLoan,
bool isDeletingAccount});
bool isDeletingAccount,
});
}
/// @nodoc
@ -92,68 +94,86 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState>
Object? activeLoan = freezed,
Object? isDeletingAccount = null,
}) {
return _then(_value.copyWith(
activePage: null == activePage
return _then(
_value.copyWith(
activePage:
null == activePage
? _value.activePage
: activePage // ignore: cast_nullable_to_non_nullable
as OkanePage,
activeAccountIndex: freezed == activeAccountIndex
activeAccountIndex:
freezed == activeAccountIndex
? _value.activeAccountIndex
: activeAccountIndex // ignore: cast_nullable_to_non_nullable
as int?,
activeTransaction: freezed == activeTransaction
activeTransaction:
freezed == activeTransaction
? _value.activeTransaction
: activeTransaction // ignore: cast_nullable_to_non_nullable
as TransactionDto?,
accounts: null == accounts
accounts:
null == accounts
? _value.accounts
: accounts // ignore: cast_nullable_to_non_nullable
as List<Account>,
recurringTransactions: null == recurringTransactions
recurringTransactions:
null == recurringTransactions
? _value.recurringTransactions
: recurringTransactions // ignore: cast_nullable_to_non_nullable
as List<RecurringTransactionDto>,
transactions: null == transactions
transactions:
null == transactions
? _value.transactions
: transactions // ignore: cast_nullable_to_non_nullable
as List<TransactionDto>,
transactionTemplates: null == transactionTemplates
transactionTemplates:
null == transactionTemplates
? _value.transactionTemplates
: transactionTemplates // ignore: cast_nullable_to_non_nullable
as List<TransactionTemplateDto>,
beneficiaries: null == beneficiaries
beneficiaries:
null == beneficiaries
? _value.beneficiaries
: beneficiaries // ignore: cast_nullable_to_non_nullable
as List<Beneficiary>,
expenseCategories: null == expenseCategories
expenseCategories:
null == expenseCategories
? _value.expenseCategories
: expenseCategories // ignore: cast_nullable_to_non_nullable
as List<ExpenseCategory>,
budgets: null == budgets
budgets:
null == budgets
? _value.budgets
: budgets // ignore: cast_nullable_to_non_nullable
as List<BudgetsDto>,
budgetItems: null == budgetItems
budgetItems:
null == budgetItems
? _value.budgetItems
: budgetItems // ignore: cast_nullable_to_non_nullable
as List<BudgetItemDto>,
activeBudget: freezed == activeBudget
activeBudget:
freezed == activeBudget
? _value.activeBudget
: activeBudget // ignore: cast_nullable_to_non_nullable
as BudgetsDto?,
loans: null == loans
loans:
null == loans
? _value.loans
: loans // ignore: cast_nullable_to_non_nullable
as List<LoanDto>,
activeLoan: freezed == activeLoan
activeLoan:
freezed == activeLoan
? _value.activeLoan
: activeLoan // ignore: cast_nullable_to_non_nullable
as LoanDto?,
isDeletingAccount: null == isDeletingAccount
isDeletingAccount:
null == isDeletingAccount
? _value.isDeletingAccount
: isDeletingAccount // ignore: cast_nullable_to_non_nullable
as bool,
) as $Val);
)
as $Val,
);
}
}
@ -161,12 +181,13 @@ 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,
$Res call({
OkanePage activePage,
int? activeAccountIndex,
TransactionDto? activeTransaction,
List<Account> accounts,
@ -180,7 +201,8 @@ abstract class _$$CoreStateImplCopyWith<$Res>
BudgetsDto? activeBudget,
List<LoanDto> loans,
LoanDto? activeLoan,
bool isDeletingAccount});
bool isDeletingAccount,
});
}
/// @nodoc
@ -188,8 +210,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
@ -210,76 +233,93 @@ class __$$CoreStateImplCopyWithImpl<$Res>
Object? activeLoan = freezed,
Object? isDeletingAccount = null,
}) {
return _then(_$CoreStateImpl(
activePage: null == activePage
return _then(
_$CoreStateImpl(
activePage:
null == activePage
? _value.activePage
: activePage // ignore: cast_nullable_to_non_nullable
as OkanePage,
activeAccountIndex: freezed == activeAccountIndex
activeAccountIndex:
freezed == activeAccountIndex
? _value.activeAccountIndex
: activeAccountIndex // ignore: cast_nullable_to_non_nullable
as int?,
activeTransaction: freezed == activeTransaction
activeTransaction:
freezed == activeTransaction
? _value.activeTransaction
: activeTransaction // ignore: cast_nullable_to_non_nullable
as TransactionDto?,
accounts: null == accounts
accounts:
null == accounts
? _value._accounts
: accounts // ignore: cast_nullable_to_non_nullable
as List<Account>,
recurringTransactions: null == recurringTransactions
recurringTransactions:
null == recurringTransactions
? _value._recurringTransactions
: recurringTransactions // ignore: cast_nullable_to_non_nullable
as List<RecurringTransactionDto>,
transactions: null == transactions
transactions:
null == transactions
? _value._transactions
: transactions // ignore: cast_nullable_to_non_nullable
as List<TransactionDto>,
transactionTemplates: null == transactionTemplates
transactionTemplates:
null == transactionTemplates
? _value._transactionTemplates
: transactionTemplates // ignore: cast_nullable_to_non_nullable
as List<TransactionTemplateDto>,
beneficiaries: null == beneficiaries
beneficiaries:
null == beneficiaries
? _value._beneficiaries
: beneficiaries // ignore: cast_nullable_to_non_nullable
as List<Beneficiary>,
expenseCategories: null == expenseCategories
expenseCategories:
null == expenseCategories
? _value._expenseCategories
: expenseCategories // ignore: cast_nullable_to_non_nullable
as List<ExpenseCategory>,
budgets: null == budgets
budgets:
null == budgets
? _value._budgets
: budgets // ignore: cast_nullable_to_non_nullable
as List<BudgetsDto>,
budgetItems: null == budgetItems
budgetItems:
null == budgetItems
? _value._budgetItems
: budgetItems // ignore: cast_nullable_to_non_nullable
as List<BudgetItemDto>,
activeBudget: freezed == activeBudget
activeBudget:
freezed == activeBudget
? _value.activeBudget
: activeBudget // ignore: cast_nullable_to_non_nullable
as BudgetsDto?,
loans: null == loans
loans:
null == loans
? _value._loans
: loans // ignore: cast_nullable_to_non_nullable
as List<LoanDto>,
activeLoan: freezed == activeLoan
activeLoan:
freezed == activeLoan
? _value.activeLoan
: activeLoan // ignore: cast_nullable_to_non_nullable
as LoanDto?,
isDeletingAccount: null == isDeletingAccount
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,
const _$CoreStateImpl({
this.activePage = OkanePage.accounts,
this.activeAccountIndex,
this.activeTransaction = null,
final List<Account> accounts = const [],
@ -293,8 +333,8 @@ class _$CoreStateImpl implements _CoreState {
this.activeBudget = null,
final List<LoanDto> loans = const [],
this.activeLoan = null,
this.isDeletingAccount = false})
: _accounts = accounts,
this.isDeletingAccount = false,
}) : _accounts = accounts,
_recurringTransactions = recurringTransactions,
_transactions = transactions,
_transactionTemplates = transactionTemplates,
@ -423,19 +463,31 @@ 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) &&
const DeepCollectionEquality()
.equals(other._budgetItems, _budgetItems) &&
const DeepCollectionEquality().equals(
other._budgetItems,
_budgetItems,
) &&
(identical(other.activeBudget, activeBudget) ||
other.activeBudget == activeBudget) &&
const DeepCollectionEquality().equals(other._loans, _loans) &&
@ -462,7 +514,8 @@ class _$CoreStateImpl implements _CoreState {
activeBudget,
const DeepCollectionEquality().hash(_loans),
activeLoan,
isDeletingAccount);
isDeletingAccount,
);
@JsonKey(ignore: true)
@override
@ -472,8 +525,8 @@ class _$CoreStateImpl implements _CoreState {
}
abstract class _CoreState implements CoreState {
const factory _CoreState(
{final OkanePage activePage,
const factory _CoreState({
final OkanePage activePage,
final int? activeAccountIndex,
final TransactionDto? activeTransaction,
final List<Account> accounts,
@ -487,7 +540,8 @@ abstract class _CoreState implements CoreState {
final BudgetsDto? activeBudget,
final List<LoanDto> loans,
final LoanDto? activeLoan,
final bool isDeletingAccount}) = _$CoreStateImpl;
final bool isDeletingAccount,
}) = _$CoreStateImpl;
@override
OkanePage get activePage;

View File

@ -65,7 +65,7 @@ class AccountSwitcher extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
Text(
bloc.activeAccount!.name!,
bloc.activeAccount!.name,
style: Theme.of(context).textTheme.titleLarge,
),
Icon(Icons.arrow_drop_down),