diff --git a/lib/app/bloc/add_transactions_cubit/add_transactions_cubit.dart b/lib/app/bloc/add_transactions_cubit/add_transactions_cubit.dart index 7080394..6b884a5 100644 --- a/lib/app/bloc/add_transactions_cubit/add_transactions_cubit.dart +++ b/lib/app/bloc/add_transactions_cubit/add_transactions_cubit.dart @@ -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'; @@ -68,6 +69,8 @@ class AddTransactionsCubit extends Cubit { context: context, ); if (response == 'Success') { + context.read().add(RefreshUserStateEvent(context: context)); + await Future.delayed(const Duration(milliseconds: 400)); emit( AddTransactionsSuccessState( selectedTransactionMode: state.selectedTransactionMode, diff --git a/lib/app/screens/add_and_view_transaction/add_and_view_transaction.dart b/lib/app/screens/add_and_view_transaction/add_and_view_transaction.dart index 4d1f3b8..96dad0a 100644 --- a/lib/app/screens/add_and_view_transaction/add_and_view_transaction.dart +++ b/lib/app/screens/add_and_view_transaction/add_and_view_transaction.dart @@ -2,12 +2,10 @@ import 'dart:developer'; import 'dart:io'; import 'package:antdesign_icons/antdesign_icons.dart'; -import 'package:cloud_firestore/cloud_firestore.dart'; 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/app_constants/domentions.dart'; import 'package:pinext/app/app_data/app_constants/fonts.dart'; import 'package:pinext/app/app_data/extensions/string_extensions.dart'; import 'package:pinext/app/app_data/routing/routes.dart'; @@ -15,19 +13,17 @@ 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/archive_cubit/archive_cubit.dart'; import 'package:pinext/app/bloc/delete_transaction_cubit/delete_transaction_cubit.dart'; -import 'package:pinext/app/bloc/demoBloc/demo_bloc.dart'; import 'package:pinext/app/bloc/userBloc/user_bloc.dart'; -import 'package:pinext/app/models/pinext_card_model.dart'; import 'package:pinext/app/models/pinext_transaction_model.dart'; +import 'package:pinext/app/screens/add_and_view_transaction/widgets/add_transaction_button_widget.dart'; +import 'package:pinext/app/screens/add_and_view_transaction/widgets/get_card_list_for_add_transactions.dart'; +import 'package:pinext/app/screens/add_and_view_transaction/widgets/get_selecte_transaction_type_widget.dart'; +import 'package:pinext/app/screens/add_and_view_transaction/widgets/get_tag_list_widget.dart'; import 'package:pinext/app/services/date_time_services.dart'; -import 'package:pinext/app/services/firebase_services.dart'; import 'package:pinext/app/services/handlers/card_handler.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'; import 'package:pinext/app/shared/widgets/custom_text_field.dart'; import 'package:pinext/app/shared/widgets/info_widget.dart'; -import 'package:pinext/app/shared/widgets/pinext_card.dart'; class AddAndViewTransactionScreen extends StatelessWidget { AddAndViewTransactionScreen({ @@ -185,346 +181,6 @@ class _AddAndViewTransactionViewState extends State { ); } - Column SelectTransactionTypeCard() { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Transaction type', - style: boldTextStyle.copyWith( - color: customBlackColor.withOpacity( - .6, - ), - ), - ), - const SizedBox( - height: 8, - ), - SizedBox( - height: 40, - child: BlocBuilder( - builder: (context, state) { - return Row( - children: [ - Flexible( - child: GestureDetector( - onTap: () { - if (!widget.isViewOnly) { - context.read().changeSelectedTransactionMode(SelectedTransactionMode.income); - } - }, - child: Padding( - padding: const EdgeInsets.only(right: 10), - child: Container( - height: double.maxFinite, - width: double.maxFinite, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(defaultBorder), - color: state.selectedTransactionMode == SelectedTransactionMode.income ? greyColor : Colors.transparent, - ), - child: Text( - 'Deposit', - style: state.selectedTransactionMode == SelectedTransactionMode.income - ? boldTextStyle.copyWith( - color: primaryColor, - fontSize: 20, - ) - : boldTextStyle.copyWith( - color: customBlackColor.withOpacity(.4), - fontSize: 20, - ), - ), - ), - ), - ), - ), - Container( - width: .5, - height: double.maxFinite, - color: customBlackColor.withOpacity(.2), - ), - Flexible( - child: GestureDetector( - onTap: () { - if (!widget.isViewOnly) { - context.read().changeSelectedTransactionMode(SelectedTransactionMode.enpense); - } - }, - child: Padding( - padding: const EdgeInsets.only(left: 10), - child: Container( - height: double.maxFinite, - width: double.maxFinite, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(defaultBorder), - color: state.selectedTransactionMode == SelectedTransactionMode.enpense ? greyColor : Colors.transparent, - ), - child: Text( - 'Withdrawal ', - style: state.selectedTransactionMode == SelectedTransactionMode.enpense - ? boldTextStyle.copyWith( - color: primaryColor, - fontSize: 20, - ) - : boldTextStyle.copyWith( - color: customBlackColor.withOpacity(.4), - fontSize: 20, - ), - ), - ), - ), - ), - ), - ], - ); - }, - ), - ), - ], - ); - } - - Column GetSuggestionsList() { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Suggestions', - style: boldTextStyle.copyWith( - color: customBlackColor.withOpacity( - .6, - ), - ), - ), - BlocBuilder( - builder: (context, state) { - return Wrap( - spacing: 5, - runSpacing: -8, - children: [ - ...List.generate( - listOfTransactionDetailSuggestions.length, - (index) { - return GestureDetector( - onTap: () { - final selectedDescription = listOfTransactionDetailSuggestions[index].toString(); - if (state.selectedDescription != selectedDescription) { - detailsController.text = selectedDescription; - context.read().changeSelectedDescription(selectedDescription); - } else { - context.read().changeSelectedDescription('none'); - } - }, - child: Chip( - label: Text( - listOfTransactionDetailSuggestions[index].toString(), - style: regularTextStyle.copyWith( - color: listOfTransactionDetailSuggestions[index] == state.selectedDescription ? whiteColor : customBlackColor.withOpacity(.6), - ), - ), - backgroundColor: listOfTransactionDetailSuggestions[index] == state.selectedDescription ? primaryColor : greyColor, - ), - ); - }, - ).toList(), - ], - ); - }, - ), - ], - ); - } - - Column GetTagsList() { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Tags', - style: boldTextStyle.copyWith( - color: customBlackColor.withOpacity( - .6, - ), - ), - ), - BlocBuilder( - builder: (context, state) { - if (widget.isViewOnly) { - return Chip( - label: Text( - widget.pinextTransactionModel!.transactionTag, - style: regularTextStyle.copyWith( - color: whiteColor, - fontWeight: FontWeight.w600, - ), - ), - backgroundColor: primaryColor, - ); - } - return Wrap( - spacing: 5, - runSpacing: -8, - children: [ - ...List.generate( - transactionTags.length, - (index) { - return GestureDetector( - onTap: () { - final selectedTag = transactionTags[index]; - if (state.selectedTag != selectedTag) { - context.read().changeSelectedTag(selectedTag); - } else { - context.read().changeSelectedTag(''); - } - }, - child: Chip( - label: Text( - transactionTags[index], - style: regularTextStyle.copyWith( - color: transactionTags[index] == state.selectedTag ? whiteColor : customBlackColor.withOpacity(.6), - fontWeight: transactionTags[index] == state.selectedTag ? FontWeight.w600 : FontWeight.normal, - ), - ), - backgroundColor: transactionTags[index] == state.selectedTag ? primaryColor : greyColor, - ), - ); - }, - ).toList(), - ], - ); - }, - ), - ], - ); - } - - Padding AddTransactionButton() { - return Padding( - padding: const EdgeInsets.symmetric( - horizontal: defaultPadding, - ), - child: BlocConsumer( - listener: (context, state) { - if (state is AddTransactionsSuccessState) { - if (widget.isAQuickAction) { - if (Platform.isAndroid) { - SystemNavigator.pop(); - } else { - context.read().add(RefreshUserStateEvent(context: context)); - Navigator.pushNamedAndRemoveUntil( - context, - ROUTES.getHomeframeRoute, - (route) => false, - ); - GetCustomSnackbar( - title: 'Transaction added!!', - message: 'Your transaction data has been stored.', - snackbarType: SnackbarType.success, - context: context, - ); - } - } else { - context.read().add(RefreshUserStateEvent(context: context)); - 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().reset(); - } - }, - builder: (context, state) { - final demoBlocState = context.watch().state; - return GetCustomButton( - title: widget.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 (widget.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 (widget.isAQuickAction) { - UserHandler().getCurrentUser(); - } - context.read().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, - ); - } - } - } - } - }, - ); - }, - ), - ); - } - @override Widget build(BuildContext context) { return Scaffold( @@ -679,7 +335,7 @@ class _AddAndViewTransactionViewState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SelectTransactionTypeCard(), + GetSelectTransactionTypeWidget(isViewOnly: widget.isViewOnly), const SizedBox( height: 12, ), @@ -759,7 +415,7 @@ class _AddAndViewTransactionViewState extends State { if (widget.isViewOnly && widget.pinextTransactionModel!.transactionTag != '') Column( children: [ - GetTagsList(), + GetTagsList(isViewOnly: widget.isViewOnly, pinextTransactionModel: widget.pinextTransactionModel), const SizedBox( height: 12, ), @@ -770,7 +426,7 @@ class _AddAndViewTransactionViewState extends State { if (!widget.isViewOnly) Column( children: [ - GetTagsList(), + GetTagsList(isViewOnly: widget.isViewOnly, pinextTransactionModel: widget.pinextTransactionModel), const SizedBox( height: 12, ), @@ -778,14 +434,6 @@ class _AddAndViewTransactionViewState extends State { ) else const SizedBox.shrink(), - // Column( - // children: [ - // GetTagsList(), - // const SizedBox( - // height: 12, - // ), - // ], - // ), if (widget.isViewOnly) Text( 'Card', @@ -812,14 +460,23 @@ class _AddAndViewTransactionViewState extends State { ), ], ), - _GetCardListWidget( + GetCardListForAddTransaction( isViewOnly: widget.isViewOnly, viewTransactionModel: widget.pinextTransactionModel, ), const SizedBox( height: 12, ), - if (widget.isViewOnly) const SizedBox.shrink() else AddTransactionButton(), + if (widget.isViewOnly) + const SizedBox.shrink() + else + AddTransactionButtonWidget( + isAQuickAction: widget.isAQuickAction, + isViewOnly: widget.isViewOnly, + amountController: amountController, + detailsController: detailsController, + formKey: _formKey, + ), const SizedBox( height: 30, ), @@ -831,120 +488,3 @@ class _AddAndViewTransactionViewState extends State { ); } } - -class _GetCardListWidget extends StatelessWidget { - _GetCardListWidget({ - required this.isViewOnly, - 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>> 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( - builder: (context, state) { - final Widget pinextCardWidget = GestureDetector( - onTap: () { - if (!isViewOnly) { - if (state.selectedCardNo == pinextCardModel.cardId) { - context.read().selectCard('none'); - } else { - context.read().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, - ), - ], - ), - ), - ); - } -} diff --git a/lib/app/screens/add_and_view_transaction/widgets/add_transaction_button_widget.dart b/lib/app/screens/add_and_view_transaction/widgets/add_transaction_button_widget.dart new file mode 100644 index 0000000..f622c79 --- /dev/null +++ b/lib/app/screens/add_and_view_transaction/widgets/add_transaction_button_widget.dart @@ -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 formKey; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric( + horizontal: defaultPadding, + ), + child: BlocConsumer( + 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().reset(); + } + }, + builder: (context, state) { + final demoBlocState = context.watch().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().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, + ); + } + } + } + } + }, + ); + }, + ), + ); + } +} diff --git a/lib/app/screens/add_and_view_transaction/widgets/get_card_list_for_add_transactions.dart b/lib/app/screens/add_and_view_transaction/widgets/get_card_list_for_add_transactions.dart new file mode 100644 index 0000000..b59e933 --- /dev/null +++ b/lib/app/screens/add_and_view_transaction/widgets/get_card_list_for_add_transactions.dart @@ -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>> 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( + builder: (context, state) { + final Widget pinextCardWidget = GestureDetector( + onTap: () { + if (!isViewOnly) { + if (state.selectedCardNo == pinextCardModel.cardId) { + context.read().selectCard('none'); + } else { + context.read().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, + ), + ], + ), + ), + ); + } +} diff --git a/lib/app/screens/add_and_view_transaction/widgets/get_selecte_transaction_type_widget.dart b/lib/app/screens/add_and_view_transaction/widgets/get_selecte_transaction_type_widget.dart new file mode 100644 index 0000000..152f695 --- /dev/null +++ b/lib/app/screens/add_and_view_transaction/widgets/get_selecte_transaction_type_widget.dart @@ -0,0 +1,116 @@ +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/fonts.dart'; +import 'package:pinext/app/app_data/theme_data/colors.dart'; +import 'package:pinext/app/bloc/add_transactions_cubit/add_transactions_cubit.dart'; + +class GetSelectTransactionTypeWidget extends StatelessWidget { + GetSelectTransactionTypeWidget({ + required this.isViewOnly, + super.key, + }); + bool isViewOnly; + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Transaction type', + style: boldTextStyle.copyWith( + color: customBlackColor.withOpacity( + .6, + ), + ), + ), + const SizedBox( + height: 8, + ), + SizedBox( + height: 40, + child: BlocBuilder( + builder: (context, state) { + return Row( + children: [ + Flexible( + child: GestureDetector( + onTap: () { + if (!isViewOnly) { + context.read().changeSelectedTransactionMode(SelectedTransactionMode.income); + } + }, + child: Padding( + padding: const EdgeInsets.only(right: 10), + child: Container( + height: double.maxFinite, + width: double.maxFinite, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(defaultBorder), + color: state.selectedTransactionMode == SelectedTransactionMode.income ? greyColor : Colors.transparent, + ), + child: Text( + 'Deposit', + style: state.selectedTransactionMode == SelectedTransactionMode.income + ? boldTextStyle.copyWith( + color: primaryColor, + fontSize: 20, + ) + : boldTextStyle.copyWith( + color: customBlackColor.withOpacity(.4), + fontSize: 20, + ), + ), + ), + ), + ), + ), + Container( + width: .5, + height: double.maxFinite, + color: customBlackColor.withOpacity(.2), + ), + Flexible( + child: GestureDetector( + onTap: () { + if (!isViewOnly) { + context.read().changeSelectedTransactionMode(SelectedTransactionMode.enpense); + } + }, + child: Padding( + padding: const EdgeInsets.only(left: 10), + child: Container( + height: double.maxFinite, + width: double.maxFinite, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(defaultBorder), + color: state.selectedTransactionMode == SelectedTransactionMode.enpense ? greyColor : Colors.transparent, + ), + child: Text( + 'Withdrawal ', + style: state.selectedTransactionMode == SelectedTransactionMode.enpense + ? boldTextStyle.copyWith( + color: primaryColor, + fontSize: 20, + ) + : boldTextStyle.copyWith( + color: customBlackColor.withOpacity(.4), + fontSize: 20, + ), + ), + ), + ), + ), + ), + ], + ); + }, + ), + ), + ], + ); + } +} diff --git a/lib/app/screens/add_and_view_transaction/widgets/get_tag_list_widget.dart b/lib/app/screens/add_and_view_transaction/widgets/get_tag_list_widget.dart new file mode 100644 index 0000000..21189a9 --- /dev/null +++ b/lib/app/screens/add_and_view_transaction/widgets/get_tag_list_widget.dart @@ -0,0 +1,82 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.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_transaction_model.dart'; + +class GetTagsList extends StatelessWidget { + GetTagsList({ + required this.isViewOnly, + required this.pinextTransactionModel, + super.key, + }); + + bool isViewOnly; + + PinextTransactionModel? pinextTransactionModel; + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Tags', + style: boldTextStyle.copyWith( + color: customBlackColor.withOpacity( + .6, + ), + ), + ), + BlocBuilder( + builder: (context, state) { + if (isViewOnly) { + return Chip( + label: Text( + pinextTransactionModel!.transactionTag, + style: regularTextStyle.copyWith( + color: whiteColor, + fontWeight: FontWeight.w600, + ), + ), + backgroundColor: primaryColor, + ); + } + return Wrap( + spacing: 5, + runSpacing: -8, + children: [ + ...List.generate( + transactionTags.length, + (index) { + return GestureDetector( + onTap: () { + final selectedTag = transactionTags[index]; + if (state.selectedTag != selectedTag) { + context.read().changeSelectedTag(selectedTag); + } else { + context.read().changeSelectedTag(''); + } + }, + child: Chip( + label: Text( + transactionTags[index], + style: regularTextStyle.copyWith( + color: transactionTags[index] == state.selectedTag ? whiteColor : customBlackColor.withOpacity(.6), + fontWeight: transactionTags[index] == state.selectedTag ? FontWeight.w600 : FontWeight.normal, + ), + ), + backgroundColor: transactionTags[index] == state.selectedTag ? primaryColor : greyColor, + ), + ); + }, + ).toList(), + ], + ); + }, + ), + ], + ); + } +} diff --git a/lib/app/screens/splash/splash_screen.dart b/lib/app/screens/splash/splash_screen.dart index 6938ab0..af5a12f 100644 --- a/lib/app/screens/splash/splash_screen.dart +++ b/lib/app/screens/splash/splash_screen.dart @@ -50,7 +50,7 @@ class _SplashScreenState extends State { const quickActions = QuickActions(); quickActions.initialize((String shortcutType) { - if (shortcutType.toString() == 'AddTransaction') { + if (shortcutType == 'AddTransaction') { setState(() { mode = 'AddTransaction'; }); @@ -68,7 +68,7 @@ class _SplashScreenState extends State { triggerSplashScreenAnimation(context); } - setUpQuickActions() { + void setUpQuickActions() { const quickActions = QuickActions(); quickActions.setShortcutItems([ const ShortcutItem( diff --git a/pubspec.lock b/pubspec.lock index 138db7c..6dfeba8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "9ebe81588e666f7e2b21309f2b5653bd9642d7f27fd0a6894278d2ff40cb9481" + sha256: a742f71d7f3484253a623b30e19256aa4668ecbb3de6ad1beb0bcf8d4777ecd8 url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" antdesign_icons: dependency: "direct main" description: @@ -21,18 +21,18 @@ packages: dependency: transitive description: name: archive - sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d + sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a" url: "https://pub.dev" source: hosted - version: "3.3.6" + version: "3.3.7" args: dependency: transitive description: name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.2" async: dependency: transitive description: @@ -85,26 +85,26 @@ packages: dependency: "direct main" description: name: cloud_firestore - sha256: "095a8c0e67da96610b6f4e6da7ac5853bc86d7664409ab71d7b934469ca99c6f" + sha256: "988351d4fcc58c47578d95d014018888b2ce7a228f84ce322fea4a127707a0d4" url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "4.8.1" cloud_firestore_platform_interface: dependency: transitive description: name: cloud_firestore_platform_interface - sha256: dd5d1c3ed9a09e620ac59351f20fa635e112101bdc6f90e84b29c5a19fa1bf59 + sha256: b6652ce95507e604f00cb0c9c9be2363d21746e82667f2f3d61edf2d33cad3bf url: "https://pub.dev" source: hosted - version: "5.15.0" + version: "5.15.1" cloud_firestore_web: dependency: transitive description: name: cloud_firestore_web - sha256: "51f22dfbe07638075287e171b469ef545bee9f5fa0f8d0ed4aa98aceb0259a5d" + sha256: "22d02595eb7a304c0f1b4a717e78cc054522e8f237eb7b1122886f93130f3f7a" url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.6.1" collection: dependency: transitive description: @@ -141,10 +141,10 @@ packages: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" cupertino_icons: dependency: "direct main" description: @@ -181,10 +181,10 @@ packages: dependency: "direct main" description: name: dio - sha256: b99b1d56dc0d5dece70957023af002dbd49614b4a1bf86d3a254af3fe781bdf2 + sha256: a9d76e72985d7087eb7c5e7903224ae52b337131518d127c554b9405936752b8 url: "https://pub.dev" source: hosted - version: "5.2.0+1" + version: "5.2.1+1" elegant_notification: dependency: "direct main" description: @@ -213,10 +213,10 @@ packages: dependency: transitive description: name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" file: dependency: transitive description: @@ -229,58 +229,58 @@ packages: dependency: "direct main" description: name: firebase_analytics - sha256: f9d130eb6cf04b58e94358053aba3aebe546dca541e9ac5f076f8a7bc1e5c21e + sha256: b4f0da1ba0ed06a738d2f729a94dae2518c3738167a13e7f2347303e7a5ab0d9 url: "https://pub.dev" source: hosted - version: "10.4.2" + version: "10.4.3" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface - sha256: "16b3c49dbf26b25cd69b9dc52e8a2e21e48ee13d5b4bb563db55a82300213d1e" + sha256: "25ff27c6dfc875ec299af1c714cbc9f4d44bd47a1163a0ba008a1e5d88a6a786" url: "https://pub.dev" source: hosted - version: "3.6.2" + version: "3.6.3" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web - sha256: "8163a020ee358c64b6c4f686102d09e21f5abf361352addc68aa419fc4bc029c" + sha256: "9b80a8444a94ace32f56e43e7e946613b02bc7daa9fd4ae7857f4a2394b134f9" url: "https://pub.dev" source: hosted - version: "0.5.4+2" + version: "0.5.4+3" firebase_auth: dependency: "direct main" description: name: firebase_auth - sha256: "19508428ca37f611ae47067ee6ebb3ba5a27014941177cc224f71bf7d0720cdd" + sha256: f693c0aa998b1101453878951b171b69f0db5199003df1c943b33493a1de7917 url: "https://pub.dev" source: hosted - version: "4.6.2" + version: "4.6.3" firebase_auth_platform_interface: dependency: transitive description: name: firebase_auth_platform_interface - sha256: e46e136a6f6eec88b30f12445ff7f5b19b23b7ede694921ced4f8eba8eb634f6 + sha256: "689ae048b78ad088ba31acdec45f5badb56201e749ed8b534947a7303ddb32aa" url: "https://pub.dev" source: hosted - version: "6.15.2" + version: "6.15.3" firebase_auth_web: dependency: transitive description: name: firebase_auth_web - sha256: "553bd576d793d05b920971a2c7ab02bd049d4971153702074ea2555877efd392" + sha256: f35d637a1707afd51f30090bb5234b381d5071ccbfef09b8c393bc7c65e440cd url: "https://pub.dev" source: hosted - version: "5.5.2" + version: "5.5.3" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: e9b36b391690cf329c6fb1de220045e97c13784c303820cd33962319580a56c6 + sha256: a4a99204da264a0aa9d54a332ea0315ce7b0768075139c77abefe98093dd98be url: "https://pub.dev" source: hosted - version: "2.13.1" + version: "2.14.0" firebase_core_platform_interface: dependency: "direct main" description: @@ -293,74 +293,74 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: "8c0f4c87d20e2d001a5915df238c1f9c88704231f591324205f5a5d2a7740a45" + sha256: "0fd5c4b228de29b55fac38aed0d9e42514b3d3bd47675de52bf7f8fccaf922fa" url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.6.0" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: "603f23a74995c193cae89a784b8da529b1e6a91c03bc63f885f36456e9e867a0" + sha256: "398012cf7838f8a373a25da65dd62fc3a3f4abe4b5f886caa634952c3387dce3" url: "https://pub.dev" source: hosted - version: "3.3.2" + version: "3.3.3" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: cefeeeb98abdb9d848581603bd1e33a2a8e6d3ed937586cb84437e606049071b + sha256: "39dfcc9a5ddfaa0588ad67f1016174dd9e19f6b31f592b8641bd559399567592" url: "https://pub.dev" source: hosted - version: "3.6.2" + version: "3.6.3" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: a01d7b9eb43a4bad54a411edb2b4124089d88eab029191893e83c39e18ab19f7 + sha256: "77d93f897c893fa7c8de433f6950123bd9c56f27fd7f88a032a53102ca23fcee" url: "https://pub.dev" source: hosted - version: "14.6.2" + version: "14.6.3" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: c2fef3e30fbfa3a71d74477df102d1c2f5aad860bb68bb4086b0af3b12abedf3 + sha256: e9e9dc48a3d8ffa67aaba3d6b1ebf74bc7d7d8c83d10b1458ff97878b9d8a2b0 url: "https://pub.dev" source: hosted - version: "4.5.2" + version: "4.5.3" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: "8d280f0110ca4946b9863e578b9879874066ac486ffa596a609aab329fb6fa7e" + sha256: "381f217e41e0e407baf8df21787b97e46fabfacefd6a953425be3a6cdf2269f4" url: "https://pub.dev" source: hosted - version: "3.5.2" + version: "3.5.3" firebase_storage: dependency: "direct main" description: name: firebase_storage - sha256: ba695c4905da360a9daa5ecb12a8c272b2dfd681a12aaf109fa7666abc54f8a5 + sha256: e9e889adc839a1a68e48762457bd91e247c3b02e4a065842037c039ebb51fa27 url: "https://pub.dev" source: hosted - version: "11.2.2" + version: "11.2.3" firebase_storage_platform_interface: dependency: transitive description: name: firebase_storage_platform_interface - sha256: "81e8498e26c4ba0a88400666e4f6777ebecf0c49e89d54f9f0f989b249c29abb" + sha256: be0f4254cae3ccaefd5d1435b82c1fa3bda33187387b241c55b27d7516ea9b93 url: "https://pub.dev" source: hosted - version: "4.4.2" + version: "4.4.3" firebase_storage_web: dependency: transitive description: name: firebase_storage_web - sha256: "4406f263c7a6a53502bde436e0c53ced8385142a2f8ef4005f0781749d87d286" + sha256: a5aae39af27ecce997ea53e61a35e0a61b3d33f3c247d74748de0bc40f1c5c5a url: "https://pub.dev" source: hosted - version: "3.6.2" + version: "3.6.3" flutter: dependency: "direct main" description: flutter @@ -370,10 +370,10 @@ packages: dependency: "direct main" description: name: flutter_animate - sha256: f611a67082d4c5ff9b8b7737ec7e675a22af70a94c8c3c22109f14b078d4d2bf + sha256: be54662837a6e66cc53ee88549e808c625275e0faf5a43e11cf3182cb0bd1b02 url: "https://pub.dev" source: hosted - version: "4.1.1+1" + version: "4.2.0" flutter_bloc: dependency: "direct main" description: @@ -410,18 +410,18 @@ packages: dependency: transitive description: name: flutter_local_notifications_linux - sha256: "909bb95de05a2e793503a2437146285a2f600cd0b3f826e26b870a334d8586d7" + sha256: "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.0+1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "63235c42de5b6c99846969a27ad0209c401e6b77b0498939813725b5791c107c" + sha256: "7cf643d6d5022f3baed0be777b0662cce5919c0a7b86e700299f22dc4ae660ef" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.0+1" flutter_localizations: dependency: transitive description: flutter @@ -431,10 +431,10 @@ packages: dependency: transitive description: name: flutter_svg - sha256: f991fdb1533c3caeee0cdc14b04f50f0c3916f0dbcbc05237ccbe4e3c6b93f3f + sha256: "8c5d68a82add3ca76d792f058b186a0599414f279f00ece4830b9b231b570338" url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "2.0.7" flutter_test: dependency: "direct dev" description: flutter @@ -481,18 +481,18 @@ packages: dependency: transitive description: name: google_sign_in_android - sha256: "612bf44d5de01f32bf127ea1c8114281075c7a39f621d1e34cf70aa069840c5c" + sha256: f58a17ac07d783d000786a6c313fa4a0d2ee599a346d69b24fc48fb378d5d150 url: "https://pub.dev" source: hosted - version: "6.1.6" + version: "6.1.16" google_sign_in_ios: dependency: transitive description: name: google_sign_in_ios - sha256: "1116aff5e87f89837b052a81abe6259be7c4dd418275786864d27b74cb2a4e70" + sha256: "6ec0e13a4c5c646471b9f6a25ceb3ae76d339889d4c0f79b729bf0714215a63e" url: "https://pub.dev" source: hosted - version: "5.5.1" + version: "5.6.2" google_sign_in_platform_interface: dependency: transitive description: @@ -513,10 +513,10 @@ packages: dependency: transitive description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "0.13.6" http_parser: dependency: transitive description: @@ -529,10 +529,10 @@ packages: dependency: transitive description: name: image - sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" + sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "4.0.17" intl: dependency: "direct main" description: @@ -569,10 +569,10 @@ packages: dependency: transitive description: name: lints - sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.1" lottie: dependency: "direct main" description: @@ -625,10 +625,10 @@ packages: dependency: "direct main" description: name: open_file - sha256: c85fbdc6ea2f44adcd999a74821a1436e620f9dfc167cda1ad0c9fb243616257 + sha256: a5a32d44acb7c899987d0999e1e3cbb0a0f1adebbf41ac813ec6d2d8faa0af20 url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.3.2" path: dependency: transitive description: @@ -657,42 +657,42 @@ packages: dependency: transitive description: name: path_provider_android - sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86" url: "https://pub.dev" source: hosted - version: "2.0.22" + version: "2.0.27" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" + sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.3" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: "2e32f1640f07caef0d3cb993680f181c79e54a3827b997d5ee221490d131fbd9" + sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57 url: "https://pub.dev" source: hosted - version: "2.1.8" + version: "2.1.11" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "2.0.6" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: d3f80b32e83ec208ac95253e0cd4d298e104fbc63cb29c5c69edaed43b0c69d6 + sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96" url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "2.1.7" permission_handler: dependency: "direct main" description: @@ -705,10 +705,10 @@ packages: dependency: transitive description: name: permission_handler_android - sha256: "8028362b40c4a45298f1cbfccd227c8dd6caf0e27088a69f2ba2ab15464159e2" + sha256: "8f6a95ccbca13766882f95d32684d7c9bfe6c45650c32bedba948ef1c6a4ddf7" url: "https://pub.dev" source: hosted - version: "10.2.0" + version: "10.2.3" permission_handler_apple: dependency: transitive description: @@ -737,10 +737,10 @@ packages: dependency: transitive description: name: petitparser - sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 url: "https://pub.dev" source: hosted - version: "5.1.0" + version: "5.4.0" pie_chart: dependency: "direct main" description: @@ -761,18 +761,18 @@ packages: dependency: transitive description: name: plugin_platform_interface - sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" pointycastle: dependency: transitive description: name: pointycastle - sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" url: "https://pub.dev" source: hosted - version: "3.6.2" + version: "3.7.3" pretty_dio_logger: dependency: "direct main" description: @@ -825,10 +825,10 @@ packages: dependency: transitive description: name: quick_actions_platform_interface - sha256: e7302e8487e3c0e6170843107d8eb142926b9eb19e927142c8b3dfa0dcca54ca + sha256: "2985e12b5fecb5715a35cc0a3b2127b4391e1969e62bd0a4a721b4de21d5fedb" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" quiver: dependency: transitive description: @@ -934,18 +934,18 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_barcodes - sha256: "8edc95cbabc75f66ae75c25e8388761c6ec0343626d20c36487fae99db49d4be" + sha256: "501d68b16dc0aafe77c38d7b443bf8f1b484eed1e245aa4b5e3c6346f98cc8b8" url: "https://pub.dev" source: hosted - version: "21.2.9" + version: "21.2.10" syncfusion_flutter_core: dependency: transitive description: name: syncfusion_flutter_core - sha256: "4aa69e3541d38810533b1455aa38997a89755f9928e16ef813b62b2e8bcc398c" + sha256: "8db8f55c77f56968681447d3837c10f27a9e861e238a898fda116c7531def979" url: "https://pub.dev" source: hosted - version: "21.2.9" + version: "21.2.10" syncfusion_flutter_xlsio: dependency: "direct main" description: @@ -958,10 +958,10 @@ packages: dependency: transitive description: name: syncfusion_officecore - sha256: "46ce6d6058438ee24bc00c0c98b8ae4dcb2f43daabf8d9f6fe2699555fe6ed08" + sha256: "78a68bf204b0ebe904ac1a79f7800f719bb90a680d886c894a2f3047220a7b14" url: "https://pub.dev" source: hosted - version: "21.2.9" + version: "21.2.10" term_glyph: dependency: transitive description: @@ -998,10 +998,10 @@ packages: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" url_launcher: dependency: "direct main" description: @@ -1014,58 +1014,58 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1" + sha256: eed4e6a1164aa9794409325c3b707ff424d4d1c2a785e7db67f8bbda00e36e51 url: "https://pub.dev" source: hosted - version: "6.0.23" + version: "6.0.35" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "0a5af0aefdd8cf820dd739886efb1637f1f24489900204f50984634c07a54815" + sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "6.1.4" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc" + sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.5" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094" + sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.5" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" + sha256: bfdfa402f1f3298637d71ca8ecfe840b4696698213d5346e9d12d4ab647ee2ea url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.3" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0" + sha256: "6bb1e5d7fe53daf02a8fee85352432a40b1f868a81880e99ec7440113d5cfcab" url: "https://pub.dev" source: hosted - version: "2.0.14" + version: "2.0.17" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615 + sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.6" uuid: dependency: "direct main" description: @@ -1078,26 +1078,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: ea8d3fc7b2e0f35de38a7465063ecfcf03d8217f7962aa2a6717132cb5d43a79 + sha256: "670f6e07aca990b4a2bcdc08a784193c4ccdd1932620244c3a86bb72a0eac67f" url: "https://pub.dev" source: hosted - version: "1.1.5" + version: "1.1.7" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: a5eaa5d19e123ad4f61c3718ca1ed921c4e6254238d9145f82aa214955d9aced + sha256: "7451721781d967db9933b63f5733b1c4533022c0ba373a01bdd79d1a5457f69f" url: "https://pub.dev" source: hosted - version: "1.1.5" + version: "1.1.7" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "15edc42f7eaa478ce854eaf1fbb9062a899c0e4e56e775dd73b7f4709c97c4ca" + sha256: "80a13c613c8bde758b1464a1755a7b3a8f2b6cec61fbf0f5a53c94c30f03ba2e" url: "https://pub.dev" source: hosted - version: "1.1.5" + version: "1.1.7" vector_math: dependency: transitive description: @@ -1126,10 +1126,10 @@ packages: dependency: transitive description: name: win32 - sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" + sha256: "1414f27dd781737e51afa9711f2ac2ace6ab4498ee98e20863fa5505aa00c58c" url: "https://pub.dev" source: hosted - version: "4.1.4" + version: "5.0.4" xdg_directories: dependency: transitive description: @@ -1142,10 +1142,10 @@ packages: dependency: transitive description: name: xml - sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.3.0" sdks: dart: ">=3.0.0 <4.0.0" flutter: ">=3.10.0"