-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3a187f4
commit a2152ac
Showing
8 changed files
with
629 additions
and
603 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
496 changes: 18 additions & 478 deletions
496
lib/app/screens/add_and_view_transaction/add_and_view_transaction.dart
Large diffs are not rendered by default.
Oops, something went wrong.
155 changes: 155 additions & 0 deletions
155
lib/app/screens/add_and_view_transaction/widgets/add_transaction_button_widget.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
import 'dart:io'; | ||
|
||
import 'package:flutter/material.dart'; | ||
import 'package:flutter/services.dart'; | ||
import 'package:flutter_bloc/flutter_bloc.dart'; | ||
import 'package:pinext/app/app_data/app_constants/constants.dart'; | ||
import 'package:pinext/app/app_data/routing/routes.dart'; | ||
import 'package:pinext/app/app_data/theme_data/colors.dart'; | ||
import 'package:pinext/app/bloc/add_transactions_cubit/add_transactions_cubit.dart'; | ||
import 'package:pinext/app/bloc/demoBloc/demo_bloc.dart'; | ||
import 'package:pinext/app/services/handlers/user_handler.dart'; | ||
import 'package:pinext/app/shared/widgets/custom_button.dart'; | ||
import 'package:pinext/app/shared/widgets/custom_snackbar.dart'; | ||
|
||
class AddTransactionButtonWidget extends StatelessWidget { | ||
AddTransactionButtonWidget({ | ||
required this.isAQuickAction, | ||
required this.isViewOnly, | ||
required this.amountController, | ||
required this.detailsController, | ||
required this.formKey, | ||
super.key, | ||
}); | ||
bool isAQuickAction; | ||
bool isViewOnly; | ||
|
||
TextEditingController amountController; | ||
TextEditingController detailsController; | ||
|
||
GlobalKey<FormState> formKey; | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return Padding( | ||
padding: const EdgeInsets.symmetric( | ||
horizontal: defaultPadding, | ||
), | ||
child: BlocConsumer<AddTransactionsCubit, AddTransactionsState>( | ||
listener: (context, state) { | ||
if (state is AddTransactionsSuccessState) { | ||
if (isAQuickAction) { | ||
if (Platform.isAndroid) { | ||
SystemNavigator.pop(); | ||
} else { | ||
Navigator.pushNamedAndRemoveUntil( | ||
context, | ||
ROUTES.getHomeframeRoute, | ||
(route) => false, | ||
); | ||
GetCustomSnackbar( | ||
title: 'Transaction added!!', | ||
message: 'Your transaction data has been stored.', | ||
snackbarType: SnackbarType.success, | ||
context: context, | ||
); | ||
} | ||
} else { | ||
Navigator.pop(context); | ||
GetCustomSnackbar( | ||
title: 'Transaction added!!', | ||
message: 'Your transaction data has been stored.', | ||
snackbarType: SnackbarType.success, | ||
context: context, | ||
); | ||
} | ||
} | ||
if (state is AddTransactionsErrorState) { | ||
GetCustomSnackbar( | ||
title: 'Snap', | ||
message: state.errorMessage, | ||
snackbarType: SnackbarType.error, | ||
context: context, | ||
); | ||
context.read<AddTransactionsCubit>().reset(); | ||
} | ||
}, | ||
builder: (context, state) { | ||
final demoBlocState = context.watch<DemoBloc>().state; | ||
return GetCustomButton( | ||
title: isViewOnly ? 'Update Transaction' : 'Add Transaction', | ||
titleColor: whiteColor, | ||
buttonColor: primaryColor, | ||
isLoading: state is AddTransactionsLoadingState ? true : false, | ||
callBackFunction: () { | ||
if (demoBlocState is DemoDisabledState) { | ||
if (formKey.currentState!.validate()) { | ||
if (amountController.text.isNotEmpty && detailsController.text.isNotEmpty && state.selectedCardNo != 'none' && state.selectedTag != '') { | ||
if (isViewOnly) { | ||
GetCustomSnackbar( | ||
title: 'Hello', | ||
message: 'This function has not yet been deployed! :)', | ||
snackbarType: SnackbarType.info, | ||
context: context, | ||
); | ||
} else { | ||
if (state is AddTransactionsLoadingState) { | ||
GetCustomSnackbar( | ||
title: 'Snap', | ||
message: 'A transaction is being processed! Please be patient. :)', | ||
snackbarType: SnackbarType.error, | ||
context: context, | ||
); | ||
} else { | ||
if (isAQuickAction) { | ||
UserHandler().getCurrentUser(); | ||
} | ||
context.read<AddTransactionsCubit>().addTransaction( | ||
amount: amountController.text, | ||
details: detailsController.text, | ||
transctionType: state.selectedTransactionMode == SelectedTransactionMode.enpense ? 'Expense' : 'Income', | ||
transctionTag: state.selectedTag, | ||
context: context, | ||
); | ||
} | ||
} | ||
} else { | ||
if (state.selectedCardNo == 'none') { | ||
GetCustomSnackbar( | ||
title: 'Error', | ||
message: 'Please select a valid card and try again!', | ||
snackbarType: SnackbarType.error, | ||
context: context, | ||
); | ||
} else if (detailsController.text.isEmpty) { | ||
GetCustomSnackbar( | ||
title: 'Error', | ||
message: 'Please enter valid details of the transaction and try again!', | ||
snackbarType: SnackbarType.error, | ||
context: context, | ||
); | ||
} else if (amountController.text.isEmpty) { | ||
GetCustomSnackbar( | ||
title: 'Error', | ||
message: 'Please enter valid amount and try again!', | ||
snackbarType: SnackbarType.error, | ||
context: context, | ||
); | ||
} else if (state.selectedTag == '') { | ||
GetCustomSnackbar( | ||
title: 'Error', | ||
message: 'Please enter a valid transaction tag and try again!', | ||
snackbarType: SnackbarType.error, | ||
context: context, | ||
); | ||
} | ||
} | ||
} | ||
} | ||
}, | ||
); | ||
}, | ||
), | ||
); | ||
} | ||
} |
130 changes: 130 additions & 0 deletions
130
lib/app/screens/add_and_view_transaction/widgets/get_card_list_for_add_transactions.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
import 'package:cloud_firestore/cloud_firestore.dart'; | ||
import 'package:flutter/material.dart'; | ||
import 'package:flutter_bloc/flutter_bloc.dart'; | ||
import 'package:pinext/app/app_data/app_constants/constants.dart'; | ||
import 'package:pinext/app/app_data/app_constants/domentions.dart'; | ||
import 'package:pinext/app/app_data/app_constants/fonts.dart'; | ||
import 'package:pinext/app/app_data/theme_data/colors.dart'; | ||
import 'package:pinext/app/bloc/add_transactions_cubit/add_transactions_cubit.dart'; | ||
import 'package:pinext/app/models/pinext_card_model.dart'; | ||
import 'package:pinext/app/models/pinext_transaction_model.dart'; | ||
import 'package:pinext/app/services/firebase_services.dart'; | ||
import 'package:pinext/app/shared/widgets/pinext_card.dart'; | ||
|
||
class GetCardListForAddTransaction extends StatelessWidget { | ||
GetCardListForAddTransaction({ | ||
required this.isViewOnly, | ||
super.key, | ||
this.viewTransactionModel, | ||
}); | ||
|
||
bool isViewOnly; | ||
PinextTransactionModel? viewTransactionModel; | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return SizedBox( | ||
height: getCardHeight(context) + 10, | ||
child: SingleChildScrollView( | ||
physics: const BouncingScrollPhysics(), | ||
scrollDirection: Axis.horizontal, | ||
child: Row( | ||
children: [ | ||
const SizedBox( | ||
width: defaultPadding, | ||
), | ||
StreamBuilder( | ||
stream: isViewOnly | ||
? FirebaseServices() | ||
.firebaseFirestore | ||
.collection('pinext_users') | ||
.doc(FirebaseServices().getUserId()) | ||
.collection('pinext_cards') | ||
.where('cardId', isEqualTo: viewTransactionModel!.cardId) | ||
.snapshots() | ||
: FirebaseServices() | ||
.firebaseFirestore | ||
.collection('pinext_users') | ||
.doc(FirebaseServices().getUserId()) | ||
.collection('pinext_cards') | ||
.orderBy( | ||
'lastTransactionData', | ||
descending: true, | ||
) | ||
.snapshots(), | ||
builder: (context, AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>> snapshot) { | ||
if (snapshot.connectionState == ConnectionState.waiting) { | ||
return SizedBox( | ||
width: getWidth(context) - defaultPadding, | ||
child: const Center( | ||
child: CircularProgressIndicator(), | ||
), | ||
); | ||
} | ||
if (snapshot.data!.docs.isEmpty) { | ||
return Container( | ||
padding: const EdgeInsets.all(20), | ||
width: getWidth(context) - defaultPadding * 2, | ||
alignment: Alignment.center, | ||
child: Text( | ||
'Please add a Pinext card to view your cards list here.', | ||
style: regularTextStyle.copyWith( | ||
color: customBlackColor.withOpacity(.4), | ||
), | ||
maxLines: 3, | ||
), | ||
); | ||
} | ||
return ListView.builder( | ||
shrinkWrap: true, | ||
physics: const NeverScrollableScrollPhysics(), | ||
scrollDirection: Axis.horizontal, | ||
itemCount: snapshot.data!.docs.length, | ||
itemBuilder: (context, index) { | ||
final pinextCardModel = PinextCardModel.fromMap( | ||
snapshot.data!.docs[index].data(), | ||
); | ||
|
||
final color = pinextCardModel.color; | ||
late final cardColor = getColorFromString(color); | ||
|
||
return BlocBuilder<AddTransactionsCubit, AddTransactionsState>( | ||
builder: (context, state) { | ||
final Widget pinextCardWidget = GestureDetector( | ||
onTap: () { | ||
if (!isViewOnly) { | ||
if (state.selectedCardNo == pinextCardModel.cardId) { | ||
context.read<AddTransactionsCubit>().selectCard('none'); | ||
} else { | ||
context.read<AddTransactionsCubit>().selectCard(pinextCardModel.cardId); | ||
} | ||
} | ||
}, | ||
child: PinextCard( | ||
title: pinextCardModel.title, | ||
balance: pinextCardModel.balance, | ||
cardColor: pinextCardModel.color, | ||
isSelected: isViewOnly ? false : state.selectedCardNo == pinextCardModel.cardId, | ||
lastTransactionDate: pinextCardModel.lastTransactionData, | ||
cardDetails: pinextCardModel.description, | ||
cardId: pinextCardModel.cardId, | ||
// cardModel: pinextCardModel, | ||
// cardModel: pinextCardModel, | ||
), | ||
); | ||
return pinextCardWidget; | ||
}, | ||
); | ||
}, | ||
); | ||
}, | ||
), | ||
const SizedBox( | ||
width: defaultPadding - 10, | ||
), | ||
], | ||
), | ||
), | ||
); | ||
} | ||
} |
Oops, something went wrong.