added more blocs

This commit is contained in:
2024-02-07 18:54:48 +01:00
parent 3610c466d2
commit c5ede79dc4
32 changed files with 668 additions and 429 deletions

View File

@@ -1,6 +1,4 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tunas/domains/account/account_bloc.dart';
import 'package:tunas/pages/budgets/widgets/budgets_actions.dart';
class BudgetsPage extends StatelessWidget {
@@ -8,23 +6,16 @@ class BudgetsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocListener<AccountBloc, AccountState>(
listener: (context, state) {
if (state.showAddDialog) {
// TransactionAddDialog.show(context);
}
},
child: const Flex(
direction: Axis.horizontal,
children: [
Expanded(
child: Column(
children: [
BudgetsActions(),
],
))
],
),
return const Flex(
direction: Axis.horizontal,
children: [
Expanded(
child: Column(
children: [
BudgetsActions(),
],
))
],
);
}
}

View File

@@ -1,6 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tunas/domains/account/account_bloc.dart';
import 'package:tunas/domains/budget/budget_bloc.dart';
import 'package:tunas/domains/category/category_bloc.dart';
import 'package:tunas/domains/transaction/transaction_bloc.dart';
import 'package:tunas/pages/budgets/budgets_page.dart';
import 'package:tunas/pages/data/data_page.dart';
import 'package:tunas/pages/stats/stats_page.dart';
@@ -12,8 +15,13 @@ class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => AccountBloc(accountRepository: RepositoryProvider.of<AccountRepository>(context)),
return MultiBlocProvider(
providers: [
BlocProvider(create: (context) => AccountBloc(accountRepository: RepositoryProvider.of<AccountRepository>(context))),
BlocProvider(create: (context) => TransactionBloc(accountRepository: RepositoryProvider.of<AccountRepository>(context))),
BlocProvider(create: (context) => CategoryBloc(accountRepository: RepositoryProvider.of<AccountRepository>(context))),
BlocProvider(create: (context) => BudgetBloc(accountRepository: RepositoryProvider.of<AccountRepository>(context))),
],
child: DefaultTabController(
length: 4,
child: Scaffold(

View File

@@ -42,17 +42,29 @@ class MonthlyCategoriesTotalChart extends StatelessWidget {
);
}
double _computeMaxValue() {
double max = 0.0;
categoriesMonthlyTotals.forEach((monthKey, value) {
double localMax = value.values.reduce((value, element) => value + element);
if (localMax > max) {
max = localMax;
}
});
return max + (max / 10);
}
@override
Widget build(BuildContext context) {
return AspectRatio(
aspectRatio: 1.66,
child: LayoutBuilder(
builder: (context, constraints) {
final barsSpace = 4.0 * constraints.maxWidth / 400;
final barsWidth = 8.0 * constraints.maxWidth / 100;
final barsSpace = 4.0 * constraints.maxWidth / 100;
final barsWidth = 8.0 * constraints.maxWidth / 130;
return BarChart(
BarChartData(
maxY: _computeMaxValue(),
barGroups: _computeBarGroups(barsSpace, barsWidth),
titlesData: FlTitlesData(
topTitles: const AxisTitles(

View File

@@ -1,6 +1,4 @@
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/transactions_actions.dart';
import 'package:tunas/pages/transactions/widgets/transactions_header.dart';
import 'package:tunas/pages/transactions/widgets/transactions_list.dart';
@@ -10,25 +8,18 @@ class TransactionsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocListener<AccountBloc, AccountState>(
listener: (context, state) {
if (state.showAddDialog) {
// TransactionAddDialog.show(context);
}
},
child: const Flex(
direction: Axis.horizontal,
children: [
Expanded(
child: Column(
children: [
TransactionsActions(),
TransactionsHeader(),
TransactionsList(),
],
))
],
),
return const Flex(
direction: Axis.horizontal,
children: [
Expanded(
child: Column(
children: [
TransactionsActions(),
TransactionsHeader(),
TransactionsList(),
],
))
],
);
}
}

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tunas/domains/account/account_bloc.dart';
import 'package:tunas/domains/category/category_bloc.dart';
import 'package:tunas/domains/transaction/transaction_bloc.dart';
import 'package:tunas/pages/transactions/widgets/transaction_form.dart';
import 'package:tunas/repositories/account/models/transaction.dart';
@@ -8,13 +9,16 @@ class TransactionAddDialog extends StatelessWidget {
const TransactionAddDialog({super.key});
static void show(BuildContext context, Transaction? transaction) {
context.read<AccountBloc>().add(TransactionSetCurrent(transaction));
context.read<TransactionBloc>().add(TransactionSetCurrent(transaction));
showDialog(
context: context,
barrierDismissible: false,
useRootNavigator: false,
builder: (_) => BlocProvider.value(
value: BlocProvider.of<AccountBloc>(context),
builder: (_) => MultiBlocProvider(
providers: [
BlocProvider.value(value: BlocProvider.of<TransactionBloc>(context)),
BlocProvider.value(value: BlocProvider.of<CategoryBloc>(context)),
],
child: const TransactionAddDialog()
)
);
@@ -29,14 +33,14 @@ class TransactionAddDialog extends StatelessWidget {
icon: const Icon(Icons.close)
),
IconButton(
onPressed: () => context.read<AccountBloc>().add(const TransactionAdd()),
onPressed: () => context.read<TransactionBloc>().add(const TransactionAdd()),
icon: const Icon(Icons.save)
),
];
if (currentTransaction != null) {
actions.add(IconButton(
onPressed: () => context.read<AccountBloc>().add(const TransactionDeleteCurrent()),
onPressed: () => context.read<TransactionBloc>().add(const TransactionDeleteCurrent()),
icon: const Icon(Icons.delete)
));
}
@@ -46,7 +50,7 @@ class TransactionAddDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<AccountBloc, AccountState>(
return BlocBuilder<TransactionBloc, TransactionState>(
buildWhen: (previous, current) => previous.currentTransaction != current.currentTransaction,
builder: (context, state) => AlertDialog(
title: Text(state.currentTransaction == null ? 'Add Transaction' : 'Edit Transaction'),

View File

@@ -1,7 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:intl/intl.dart';
import 'package:tunas/domains/account/account_bloc.dart';
import 'package:tunas/domains/category/category_bloc.dart';
import 'package:tunas/domains/transaction/transaction_bloc.dart';
import 'autocomplete_input.dart';
@@ -27,7 +28,7 @@ class TransactionForm extends StatelessWidget {
class _TransactionDateInput extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<AccountBloc, AccountState>(
return BlocBuilder<TransactionBloc, TransactionState>(
buildWhen: (previous, current) => previous.transactionDate != current.transactionDate,
builder: (context, state) => SizedBox(
width: 500,
@@ -40,7 +41,7 @@ class _TransactionDateInput extends StatelessWidget {
context: context,
firstDate: DateTime.fromMicrosecondsSinceEpoch(0),
lastDate: DateTime.now()
).then((value) => context.read<AccountBloc>().add(TransactionDateChange(value)));
).then((value) => context.read<TransactionBloc>().add(TransactionDateChange(value)));
},
decoration: InputDecoration(
hintText: 'Date',
@@ -55,16 +56,17 @@ class _TransactionDateInput extends StatelessWidget {
class _TransactionCategoryInput extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<AccountBloc, AccountState>(
final categoryState = context.watch<CategoryBloc>().state;
return BlocBuilder<TransactionBloc, TransactionState>(
buildWhen: (previous, current) => previous.transactionCategory != current.transactionCategory,
builder: (context, state) => SizedBox(
width: 500,
child: AutocompleteInput(
options: state.categories,
options: categoryState.categories.map((e) => e.label).toList(),
hintText: 'Category',
initialValue: state.transactionCategory.value,
errorText: state.transactionCategory.isNotValid ? state.transactionCategory.error?.message : null,
onChanged: (value) => context.read<AccountBloc>().add(TransactionCategoryChange(value)),
onChanged: (value) => context.read<TransactionBloc>().add(TransactionCategoryChange(value)),
),
),
);
@@ -74,7 +76,7 @@ class _TransactionCategoryInput extends StatelessWidget {
class _TransactionDescriptionInput extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<AccountBloc, AccountState>(
return BlocBuilder<TransactionBloc, TransactionState>(
buildWhen: (previous, current) => previous.transactionDescription != current.transactionDescription,
builder: (context, state) => SizedBox(
width: 500,
@@ -83,7 +85,7 @@ class _TransactionDescriptionInput extends StatelessWidget {
hintText: 'Description',
errorText: state.transactionDescription.isNotValid ? state.transactionDescription.error?.message : null
),
onChanged: (value) => context.read<AccountBloc>().add(TransactionDescriptionChange(value))
onChanged: (value) => context.read<TransactionBloc>().add(TransactionDescriptionChange(value))
)
),
);
@@ -93,7 +95,7 @@ class _TransactionDescriptionInput extends StatelessWidget {
class _TransactionAccountInput extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<AccountBloc, AccountState>(
return BlocBuilder<TransactionBloc, TransactionState>(
buildWhen: (previous, current) => previous.transactionAccount != current.transactionAccount,
builder: (context, state) => SizedBox(
width: 500,
@@ -102,7 +104,7 @@ class _TransactionAccountInput extends StatelessWidget {
hintText: 'Account',
initialValue: state.transactionAccount.value,
errorText: state.transactionAccount.isNotValid ? state.transactionAccount.error?.message : null,
onChanged: (value) => context.read<AccountBloc>().add(TransactionAccountChange(value)),
onChanged: (value) => context.read<TransactionBloc>().add(TransactionAccountChange(value)),
),
),
);
@@ -112,7 +114,7 @@ class _TransactionAccountInput extends StatelessWidget {
class _TransactionValueInput extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<AccountBloc, AccountState>(
return BlocBuilder<TransactionBloc, TransactionState>(
buildWhen: (previous, current) => previous.transactionValue != current.transactionValue,
builder: (context, state) => SizedBox(
width: 500,
@@ -122,7 +124,7 @@ class _TransactionValueInput extends StatelessWidget {
hintText: '\$\$\$',
errorText: state.transactionValue.isNotValid ? state.transactionValue.error?.message : null
),
onChanged: (value) => context.read<AccountBloc>().add(TransactionValueChange(value))
onChanged: (value) => context.read<TransactionBloc>().add(TransactionValueChange(value))
)
),
);

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tunas/domains/account/account_bloc.dart';
import 'package:tunas/domains/transaction/transaction_bloc.dart';
import 'package:tunas/pages/transactions/widgets/transaction_add_dialog.dart';
class TransactionsActions extends StatelessWidget {
@@ -8,7 +8,7 @@ class TransactionsActions extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<AccountBloc, AccountState>(
return BlocBuilder<TransactionBloc, TransactionState>(
builder: (context, state) => Container(
padding: const EdgeInsets.symmetric(vertical: 9, horizontal: 10),
margin: const EdgeInsets.symmetric(vertical: 2, horizontal: 10),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tunas/domains/account/account_bloc.dart';
import 'package:tunas/domains/transaction/transaction_bloc.dart';
import 'package:tunas/pages/transactions/widgets/transaction_line.dart';
class TransactionsList extends StatelessWidget {
@@ -8,7 +8,7 @@ class TransactionsList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<AccountBloc, AccountState>(
return BlocBuilder<TransactionBloc, TransactionState>(
buildWhen: (previous, current) => previous.transactionsLines != current.transactionsLines,
builder: (context, state) => Expanded(
child: ListView.builder(