stacked bar graph, edit / remove transaction & budget page base

This commit is contained in:
2024-02-06 23:58:29 +01:00
parent 3abee9ff6f
commit 3610c466d2
25 changed files with 483 additions and 180 deletions

View File

@@ -1,40 +1,60 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tunas/domains/account/account_bloc.dart';
import 'package:tunas/pages/transactions/widgets/transaction_add_form.dart';
import 'package:tunas/pages/transactions/widgets/transaction_form.dart';
import 'package:tunas/repositories/account/models/transaction.dart';
class TransactionAddDialog extends StatelessWidget {
const TransactionAddDialog({super.key});
static void show(BuildContext context) => showDialog(
context: context,
barrierDismissible: false,
useRootNavigator: false,
builder: (_) => BlocProvider.value(
value: BlocProvider.of<AccountBloc>(context),
child: const TransactionAddDialog()
)
);
static void show(BuildContext context, Transaction? transaction) {
context.read<AccountBloc>().add(TransactionSetCurrent(transaction));
showDialog(
context: context,
barrierDismissible: false,
useRootNavigator: false,
builder: (_) => BlocProvider.value(
value: BlocProvider.of<AccountBloc>(context),
child: const TransactionAddDialog()
)
);
}
static void hide(BuildContext context) => Navigator.pop(context);
_computeActions(BuildContext context, Transaction? currentTransaction) {
final actions = [
IconButton(
onPressed: () => TransactionAddDialog.hide(context),
icon: const Icon(Icons.close)
),
IconButton(
onPressed: () => context.read<AccountBloc>().add(const TransactionAdd()),
icon: const Icon(Icons.save)
),
];
if (currentTransaction != null) {
actions.add(IconButton(
onPressed: () => context.read<AccountBloc>().add(const TransactionDeleteCurrent()),
icon: const Icon(Icons.delete)
));
}
return actions;
}
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text('Add transaction'),
actions: [
TextButton(
onPressed: () => TransactionAddDialog.hide(context),
child: Text('Close')
),
TextButton(
onPressed: () => context.read<AccountBloc>().add(TransactionAdd()),
child: Text('Add')
),
],
content: SizedBox(
height: 400,
child: TransactionAddForm(),
return BlocBuilder<AccountBloc, AccountState>(
buildWhen: (previous, current) => previous.currentTransaction != current.currentTransaction,
builder: (context, state) => AlertDialog(
title: Text(state.currentTransaction == null ? 'Add Transaction' : 'Edit Transaction'),
actions: _computeActions(context, state.currentTransaction),
content: const SizedBox(
height: 400,
child: TransactionForm(),
)
)
);
}