added transaction snackbar message
This commit is contained in:
@@ -37,6 +37,7 @@ class TransactionBloc extends Bloc<TransactionEvent, TransactionState> {
|
||||
on<TransactionDeleteCurrent>(_onTransactionDeleteCurrent);
|
||||
on<TransactionFilterCategory>(_onTransactionFilterCategory);
|
||||
on<TransactionFilterAccount>(_onTransactionFilterAccount);
|
||||
on<TransactionResetSnackBar>(_onTransactionResetSnackBar);
|
||||
|
||||
_transactionsRepository
|
||||
.getTransactionsStream()
|
||||
@@ -181,6 +182,9 @@ class TransactionBloc extends Bloc<TransactionEvent, TransactionState> {
|
||||
transactionsLinesFiltered: _applyFilters(computeResult.list),
|
||||
globalTotal: computeResult.globalTotal,
|
||||
accountsTotals: computeResult.accountsTotals,
|
||||
showSnackBar: true,
|
||||
snackBarIsError: false,
|
||||
snackBarMessage: 'Transaction ${currentTransaction == null ? 'added' : 'updated'} !',
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -231,6 +235,9 @@ class TransactionBloc extends Bloc<TransactionEvent, TransactionState> {
|
||||
transactionsLinesFiltered: _applyFilters(computeResult.list),
|
||||
globalTotal: computeResult.globalTotal,
|
||||
accountsTotals: computeResult.accountsTotals,
|
||||
showSnackBar: true,
|
||||
snackBarIsError: false,
|
||||
snackBarMessage: 'Transaction removed !',
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -296,4 +303,12 @@ class TransactionBloc extends Bloc<TransactionEvent, TransactionState> {
|
||||
|
||||
return transactionsLinesFiltered;
|
||||
}
|
||||
|
||||
FutureOr<void> _onTransactionResetSnackBar(TransactionResetSnackBar event, Emitter<TransactionState> emit) {
|
||||
emit(state.copyWith(
|
||||
showSnackBar: false,
|
||||
snackBarIsError: false,
|
||||
snackBarMessage: '',
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -84,3 +84,7 @@ final class TransactionFilterAccount extends TransactionEvent {
|
||||
|
||||
const TransactionFilterAccount(this.account);
|
||||
}
|
||||
|
||||
final class TransactionResetSnackBar extends TransactionEvent {
|
||||
const TransactionResetSnackBar();
|
||||
}
|
||||
@@ -20,6 +20,10 @@ final class TransactionState extends Equatable {
|
||||
|
||||
final Transaction? currentTransaction;
|
||||
|
||||
final bool showSnackBar;
|
||||
final String snackBarMessage;
|
||||
final bool snackBarIsError;
|
||||
|
||||
const TransactionState({
|
||||
this.globalTotal = 0,
|
||||
this.accountsTotals = const <String, double>{},
|
||||
@@ -36,6 +40,9 @@ final class TransactionState extends Equatable {
|
||||
this.currentTransaction,
|
||||
this.categoryFilter,
|
||||
this.accountFilter,
|
||||
this.showSnackBar = false,
|
||||
this.snackBarMessage = '',
|
||||
this.snackBarIsError = false,
|
||||
});
|
||||
|
||||
TransactionState copyWith({
|
||||
@@ -54,6 +61,9 @@ final class TransactionState extends Equatable {
|
||||
Transaction? currentTransaction,
|
||||
Category? categoryFilter,
|
||||
Account? accountFilter,
|
||||
bool? showSnackBar,
|
||||
String? snackBarMessage,
|
||||
bool? snackBarIsError,
|
||||
}) {
|
||||
return TransactionState(
|
||||
globalTotal: globalTotal ?? this.globalTotal,
|
||||
@@ -71,6 +81,9 @@ final class TransactionState extends Equatable {
|
||||
currentTransaction: currentTransaction ?? this.currentTransaction,
|
||||
categoryFilter: categoryFilter ?? this.categoryFilter,
|
||||
accountFilter: accountFilter ?? this.accountFilter,
|
||||
showSnackBar: showSnackBar ?? this.showSnackBar,
|
||||
snackBarMessage: snackBarMessage ?? this.snackBarMessage,
|
||||
snackBarIsError: snackBarIsError ?? this.snackBarIsError,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -89,6 +102,9 @@ final class TransactionState extends Equatable {
|
||||
currentTransaction,
|
||||
categoryFilter,
|
||||
accountFilter,
|
||||
showSnackBar,
|
||||
snackBarMessage,
|
||||
snackBarIsError,
|
||||
];
|
||||
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:krezus/domains/transaction/transaction_bloc.dart';
|
||||
import 'package:krezus/pages/transactions/widgets/transactions_actions.dart';
|
||||
import 'package:krezus/pages/transactions/widgets/transactions_header.dart';
|
||||
import 'package:krezus/pages/transactions/widgets/transactions_list.dart';
|
||||
@@ -9,11 +11,24 @@ class TransactionsPage extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
MediaQueryData mediaQuery = MediaQuery.of(context);
|
||||
return Center(
|
||||
child: Container(
|
||||
constraints: const BoxConstraints(
|
||||
maxWidth: 1000
|
||||
return BlocListener<TransactionBloc, TransactionState>(
|
||||
listenWhen: (previous, current) => previous.showSnackBar != current.showSnackBar,
|
||||
listener: (context, state) {
|
||||
if (state.showSnackBar) {
|
||||
ScaffoldMessenger
|
||||
.of(context)
|
||||
.showSnackBar(
|
||||
SnackBar(
|
||||
backgroundColor: state.snackBarIsError ? Colors.red : Colors.green,
|
||||
content: Text(state.snackBarMessage),
|
||||
),
|
||||
);
|
||||
context.read<TransactionBloc>().add(const TransactionResetSnackBar());
|
||||
}
|
||||
},
|
||||
child: Center(
|
||||
child: Container(
|
||||
constraints: const BoxConstraints(maxWidth: 1000),
|
||||
padding: mediaQuery.padding,
|
||||
child: const Column(
|
||||
children: [
|
||||
@@ -22,7 +37,8 @@ class TransactionsPage extends StatelessWidget {
|
||||
TransactionsList(),
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -21,8 +21,8 @@ class TransactionAddDialog extends StatelessWidget {
|
||||
BlocProvider.value(value: BlocProvider.of<CategoryBloc>(context)),
|
||||
BlocProvider.value(value: BlocProvider.of<AccountBloc>(context)),
|
||||
],
|
||||
child: const TransactionAddDialog()
|
||||
)
|
||||
child: const TransactionAddDialog(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -32,18 +32,18 @@ class TransactionAddDialog extends StatelessWidget {
|
||||
final actions = [
|
||||
IconButton(
|
||||
onPressed: () => TransactionAddDialog.hide(context),
|
||||
icon: const Icon(Icons.close)
|
||||
icon: const Icon(Icons.close),
|
||||
),
|
||||
IconButton(
|
||||
onPressed: () => context.read<TransactionBloc>().add(const TransactionAdd()),
|
||||
icon: const Icon(Icons.save)
|
||||
icon: const Icon(Icons.save),
|
||||
),
|
||||
];
|
||||
|
||||
if (currentTransaction != null) {
|
||||
actions.add(IconButton(
|
||||
onPressed: () => context.read<TransactionBloc>().add(const TransactionDeleteCurrent()),
|
||||
icon: const Icon(Icons.delete)
|
||||
icon: const Icon(Icons.delete),
|
||||
));
|
||||
}
|
||||
|
||||
@@ -57,8 +57,8 @@ class TransactionAddDialog extends StatelessWidget {
|
||||
builder: (context, state) => AlertDialog(
|
||||
title: Text(state.currentTransaction == null ? 'Add Transaction' : 'Edit Transaction'),
|
||||
actions: _computeActions(context, state.currentTransaction),
|
||||
content: const TransactionForm()
|
||||
)
|
||||
content: const TransactionForm(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user