Skip to content
Snippets Groups Projects
Commit 0c270824 authored by Florian Schindler's avatar Florian Schindler
Browse files

add transaction

ability to add and edit transaction
- transactions are now read from hive and saved to hive
parent e4f1f861
No related branches found
No related tags found
No related merge requests found
import 'package:flutter/material.dart';
import 'package:trackeroo/frontend/views/edit_transaction_view.dart';
import 'package:trackeroo/frontend/views/home_view.dart';
import 'package:trackeroo/frontend/views/details_view.dart';
import 'package:trackeroo/frontend/views/category_view.dart';
......@@ -78,7 +79,10 @@ class _AppScaffoldState extends State<AppScaffold> {
floatingActionButton: FloatingActionButton(
onPressed: () {
if(index == 0 || index == 1) {
// add tranaction
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const EditTransactionView())
);
}
if(index == 2) {
// add category
......
import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:trackeroo/frontend/utils/transaction_listtile.dart';
import 'package:trackeroo/frontend/views/onboarding_view.dart';
import 'package:trackeroo/logic/models/transaction.dart';
import 'package:trackeroo/logic/services/locator.dart';
import 'package:trackeroo/logic/services/transactions_controller.dart';
enum Timespan { daily, weekly, monthly, yearly, all }
......@@ -18,6 +21,7 @@ class _HomeViewState extends State<HomeView> {
Transaction trp = Transaction(title: "Gehalt", amount: 1300, categoryId: 'leisure_and_entertainment', dueDate: DateTime.now());
Timespan timespanView = Timespan.monthly;
TransactionsController transContr = locator.get<TransactionsController>();
@override
Widget build(BuildContext context) {
......@@ -154,11 +158,29 @@ class _HomeViewState extends State<HomeView> {
),
),
const SizedBox(height: 5.0),
TransactionListtile(transaction: trn),
TransactionListtile(transaction: trn),
TransactionListtile(transaction: trn),
TransactionListtile(transaction: trp),
TransactionListtile(transaction: trn),
ValueListenableBuilder(
valueListenable: transContr.transactionsBox.listenable(),
builder: (context, Box<Transaction> box, widget) {
transContr.transactionsList = box.values.toList();
transContr.transactionsList.sort((b, a) => a.createdAt.compareTo(b.createdAt));
if(box.isEmpty) {
return const SizedBox(
height: 200.0,
child: Center(
child: Text('no existing transactions yet'),
),
);
}
return ListView.builder(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: transContr.transactionsList.length <= 25 ? transContr.transactionsList.length : 25,
itemBuilder: (context, index) {
return TransactionListtile(transaction: transContr.transactionsList[index]);
},
);
},
),
FilledButton(
onPressed: () {
Navigator.push(
......
......@@ -49,10 +49,9 @@ Future<void> setupLocatorService() async {
locator.registerLazySingleton<CategoriesController>(() => categoriesController);
Box<Transaction> transactionsBox = await Hive.openBox<Transaction>('transactions_box');
List<Transaction> transactionsList = HiveList(transactionsBox);
TransactionsController transactionsController = TransactionsController(
transactionsBox: transactionsBox,
transactions: transactionsList
transactionsList: transactionsBox.values.toList()
);
locator.registerLazySingleton<TransactionsController>(() => transactionsController);
}
......@@ -5,25 +5,53 @@ import 'package:trackeroo/logic/services/categories_controller.dart';
import 'package:trackeroo/logic/services/locator.dart';
class TransactionsController {
TransactionsController({required this.transactionsBox, required this.transactions});
TransactionsController({required this.transactionsBox, required this.transactionsList});
Box<Transaction> transactionsBox;
List<Transaction> transactions;
List<Transaction> transactionsList;
late Transaction lastDeletedTransaction;
void saveTransaction(Transaction transaction) {
Future<bool> saveTransaction(Transaction transaction) async {
try {
locator.get<CategoriesController>().categories[transaction.categoryId]?.spendings += transaction.amount;
int id = UniqueKey().hashCode;
transaction.id = id;
transactionsBox.put(transaction.id, transaction);
transactions.add(transaction);
await transactionsBox.put(transaction.id, transaction);
transactionsList = transactionsBox.values.toList();
} catch (e) {
return false;
}
return true;
}
Future<bool> updateTransaction(Transaction transaction) async {
try {
await transactionsBox.put(transaction.id, transaction);
transactionsList = transactionsBox.values.toList();
} catch (e) {
return false;
}
return true;
}
void updateTransaction() {
// TODO: implement update transaction
Future<bool> deleteTransaction(Transaction transaction) async {
try {
lastDeletedTransaction = transaction;
await transactionsBox.delete(transaction.id);
transactionsList = transactionsBox.values.toList();
} catch (e) {
return false;
}
return true;
}
void deleteTransaction(Transaction transaction) {
transactionsBox.delete(transaction.id);
transactions.remove(transaction);
Future<bool> undoLastDeletion() async {
try {
await transactionsBox.put(lastDeletedTransaction.id, lastDeletedTransaction);
transactionsList = transactionsBox.values.toList();
} catch (e) {
return false;
}
return true;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment