diff --git a/lib/ui/pages/transaction_details.dart b/lib/ui/pages/transaction_details.dart index f779979..fa0ce5d 100644 --- a/lib/ui/pages/transaction_details.dart +++ b/lib/ui/pages/transaction_details.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:get_it/get_it.dart'; import 'package:okane/database/collections/beneficiary.dart'; import 'package:okane/database/database.dart'; import 'package:okane/ui/state/core.dart'; @@ -89,13 +90,50 @@ class TransactionDetailsPage extends StatelessWidget { title: obj.name, path: obj.imagePath, onTap: () => _updateBeneficiaryIcon(obj), + width: 90, + height: 90, ); }, ), Padding( - padding: EdgeInsets.only(left: 8), - child: Text( - state.activeTransaction!.beneficiary.value!.name, + padding: EdgeInsets.symmetric(horizontal: 16), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.arrow_forward_rounded), + Padding( + padding: EdgeInsets.only(left: 8), + child: Text( + state + .activeTransaction! + .beneficiary + .value! + .name, + ), + ), + ], + ), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.arrow_back_rounded), + Padding( + padding: EdgeInsets.only(left: 8), + child: Text( + GetIt.I + .get() + .activeAccount! + .name!, + ), + ), + ], + ), + ], ), ), Spacer(), @@ -107,6 +145,7 @@ class TransactionDetailsPage extends StatelessWidget { ), ], ), + Wrap( spacing: 8, children: @@ -114,7 +153,34 @@ class TransactionDetailsPage extends StatelessWidget { .map((tag) => Chip(label: Text(tag))) .toList(), ), - Row( + + if (state.activeTransaction!.expenseCategory.value != + null) + Padding( + padding: EdgeInsets.symmetric(vertical: 8), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text("Expense category"), + Padding( + padding: EdgeInsets.only(left: 16), + child: Chip( + label: Text( + state + .activeTransaction! + .expenseCategory + .value! + .name, + ), + ), + ), + ], + ), + ), + + Padding( + padding: EdgeInsets.symmetric(vertical: 8), + child: Row( children: [ state.activeTransaction!.amount > 0 ? Icon(Icons.add) @@ -122,6 +188,7 @@ class TransactionDetailsPage extends StatelessWidget { Text(formatCurrency(state.activeTransaction!.amount)), ], ), + ), ], ), ); diff --git a/lib/ui/widgets/image_wrapper.dart b/lib/ui/widgets/image_wrapper.dart index 47cf75c..347d916 100644 --- a/lib/ui/widgets/image_wrapper.dart +++ b/lib/ui/widgets/image_wrapper.dart @@ -1,40 +1,57 @@ import 'dart:io'; import 'package:flutter/material.dart'; +const _BORDER_RADIUS = 8.0; + class ImageWrapper extends StatelessWidget { final String title; final String? path; - final VoidCallback onTap; + final VoidCallback? onTap; + final double width; + final double height; const ImageWrapper({ super.key, required this.title, - required this.onTap, + this.onTap, this.path, + this.width = 45, + this.height = 45, }); @override Widget build(BuildContext context) { - Widget widget; if (path == null) { - widget = SizedBox( - width: 45, - height: 45, - child: Container( - decoration: BoxDecoration( - color: Colors.grey, - borderRadius: BorderRadius.circular(8), + return InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(_BORDER_RADIUS), + child: SizedBox( + width: width, + height: height, + child: Container( + decoration: BoxDecoration( + color: Colors.grey, + borderRadius: BorderRadius.circular(_BORDER_RADIUS), + ), + child: Center(child: Text(title[0])), ), - child: Center(child: Text(title[0])), ), ); } else { - widget = ClipRRect( - borderRadius: BorderRadius.circular(8), - child: Image.file(File(path!), width: 45, height: 45), + return ClipRRect( + borderRadius: BorderRadius.circular(_BORDER_RADIUS), + child: Material( + child: InkWell( + onTap: onTap, + radius: _BORDER_RADIUS, + child: Ink.image( + width: width, + height: height, + image: FileImage(File(path!)), + ), + ), + ), ); } - - return InkWell(onTap: onTap, child: widget); } } diff --git a/lib/ui/widgets/transaction_card.dart b/lib/ui/widgets/transaction_card.dart index 295fede..e0eee4c 100644 --- a/lib/ui/widgets/transaction_card.dart +++ b/lib/ui/widgets/transaction_card.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:okane/database/collections/transaction.dart'; -import 'package:okane/database/database.dart'; import 'package:okane/ui/utils.dart'; import 'package:okane/ui/widgets/image_wrapper.dart'; @@ -21,12 +20,12 @@ class TransactionCard extends StatelessWidget { @override Widget build(BuildContext context) { return Card( + clipBehavior: Clip.hardEdge, child: ListTile( onTap: onTap, leading: ImageWrapper( title: transaction.beneficiary.value!.name, path: transaction.beneficiary.value!.imagePath, - onTap: () {}, ), trailing: Text(formatDateTime(transaction.date)), title: Text(transaction.beneficiary.value!.name),