Skip to content

Commit

Permalink
Bugfix
Browse files Browse the repository at this point in the history
  • Loading branch information
WorkWithAfridi committed Jun 21, 2023
1 parent 3a187f4 commit a2152ac
Show file tree
Hide file tree
Showing 8 changed files with 629 additions and 603 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:pinext/app/bloc/userBloc/user_bloc.dart';
import 'package:pinext/app/services/handlers/transaction_handler.dart';

part 'add_transactions_state.dart';
Expand Down Expand Up @@ -68,6 +69,8 @@ class AddTransactionsCubit extends Cubit<AddTransactionsState> {
context: context,
);
if (response == 'Success') {
context.read<UserBloc>().add(RefreshUserStateEvent(context: context));
await Future.delayed(const Duration(milliseconds: 400));
emit(
AddTransactionsSuccessState(
selectedTransactionMode: state.selectedTransactionMode,
Expand Down
496 changes: 18 additions & 478 deletions lib/app/screens/add_and_view_transaction/add_and_view_transaction.dart

Large diffs are not rendered by default.

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,
);
}
}
}
}
},
);
},
),
);
}
}
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,
),
],
),
),
);
}
}
Loading

0 comments on commit a2152ac

Please sign in to comment.