From 218225722a74634656c6a8ede963efdd8c9e1f5d Mon Sep 17 00:00:00 2001 From: venbaittech Date: Thu, 5 Dec 2024 10:43:21 +0530 Subject: [PATCH] new firebase account --- assets/Template_File.xlsx | Bin 7401 -> 7728 bytes lib/main.dart | 17 +- lib/pages/enrollment/addons.dart | 1432 ++++++++++------- lib/pages/enrollment/empReview.dart | 461 +++--- linux/flutter/generated_plugin_registrant.cc | 4 - linux/flutter/generated_plugins.cmake | 1 - macos/Flutter/GeneratedPluginRegistrant.swift | 4 +- pubspec.yaml | 4 +- web/index.html | 13 +- .../flutter/generated_plugin_registrant.cc | 3 - windows/flutter/generated_plugins.cmake | 1 - 11 files changed, 1136 insertions(+), 804 deletions(-) diff --git a/assets/Template_File.xlsx b/assets/Template_File.xlsx index c8c892b441e874e807fe1a2e7125d7437c943f0d..ac4600c8823a66fc441db5ef0cfaeecffd7ba808 100644 GIT binary patch delta 4488 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 bcMd}YTn4n8@ZUfXBL>9EL)gZ2b^U(;j(J_* diff --git a/lib/main.dart b/lib/main.dart index 016710e..28a4a42 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -29,16 +29,13 @@ import 'models/environment.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); - // Initialize Firebase only if it's not already initialized - if (Firebase.apps.isEmpty) { - await Firebase.initializeApp( - options: const FirebaseOptions( - apiKey: 'AIzaSyC4yHbCX4mQu0jO81pJrDwxKLQlTQWofrc', - appId: '1:1084115316849:android:963ff492c3d23ab06c6bd0', - messagingSenderId: '1084115316849', - projectId: 'nhance-ee8d1')); - await dotenv.load(fileName: Environment.fileName); - } + await Firebase.initializeApp( + options: const FirebaseOptions( + apiKey: 'AIzaSyC4yHbCX4mQu0jO81pJrDwxKLQlTQWofrc', + appId: '1:1084115316849:android:963ff492c3d23ab06c6bd0', + messagingSenderId: '1084115316849', + projectId: 'nhance-ee8d1')); + await dotenv.load(fileName: Environment.fileName); // Load environment variables await dotenv.load(fileName: Environment.fileName); diff --git a/lib/pages/enrollment/addons.dart b/lib/pages/enrollment/addons.dart index a3e9a4c..aba1029 100644 --- a/lib/pages/enrollment/addons.dart +++ b/lib/pages/enrollment/addons.dart @@ -29,6 +29,7 @@ class _addOnsDetailsState extends State { late ApiService apiService; bool isLoading = true; bool isChecked = false; + bool disclaimeStatus = false; bool _addOnsDependentSwitcher = false; // Declare the _isSwitched variable here bool _topUpSiSwitcher = false; @@ -130,6 +131,9 @@ class _addOnsDetailsState extends State { dynamic empRefId; dynamic empClientBranchId; dynamic selfEmpStatus; + List> allDisclaimer = + []; // Declare this to store all disclaimers + late List checkboxValues; @override void initState() { @@ -144,6 +148,7 @@ class _addOnsDetailsState extends State { isLoading = false; }); }); + checkboxValues = List.filled(allDisclaimer.length, false); } @override @@ -242,6 +247,48 @@ class _addOnsDetailsState extends State { if (response['status'] == 'success') { setState(() { gpaPolicies = response['data']; + for (var item in gpaPolicies) { + // Extract disclaimer value from each object + dynamic disclaimer = item['disclaimer']; + + if (disclaimer != null && disclaimer.isNotEmpty) { + // Temporary list to hold new entries + List> newEntries = []; + + if (disclaimer is String) { + // Wrap string in a map with id and checked + newEntries.add({ + 'id': allDisclaimer.length + 1, // Unique ID based on length + 'text': disclaimer, + 'checked': false, + }); + } else if (disclaimer is List) { + // Convert each string in the list to a map with id and checked + newEntries.addAll( + List>.from( + disclaimer.map((text) => { + 'id': allDisclaimer.length + newEntries.length + 1, + 'text': text, + 'checked': false, + }), + ), + ); + } else { + print('Unexpected type for disclaimer'); + } + + // Add new entries to the main list, ensuring no duplicate texts + newEntries.forEach((entry) { + if (!allDisclaimer + .any((item) => item['text'] == entry['text'])) { + allDisclaimer.add(entry); + } + }); + + // Update the state + setState(() {}); + } + } }); } else { setState(() { @@ -269,6 +316,47 @@ class _addOnsDetailsState extends State { if (response['status'] == 'success') { // setState(() { gmcPolicies = response['data']; + for (var item in gmcPolicies) { + // Extract disclaimer value from each object + dynamic disclaimer = item['disclaimer']; + + if (disclaimer != null && disclaimer.isNotEmpty) { + // Temporary list to hold new entries + List> newEntries = []; + + if (disclaimer is String) { + // Wrap string in a map with id and checked + newEntries.add({ + 'id': allDisclaimer.length + 1, // Unique ID based on length + 'text': disclaimer, + 'checked': false, + }); + } else if (disclaimer is List) { + // Convert each string in the list to a map with id and checked + newEntries.addAll( + List>.from( + disclaimer.map((text) => { + 'id': allDisclaimer.length + newEntries.length + 1, + 'text': text, + 'checked': false, + }), + ), + ); + } else { + print('Unexpected type for disclaimer'); + } + + // Add new entries to the main list, ensuring no duplicate texts + newEntries.forEach((entry) { + if (!allDisclaimer.any((item) => item['text'] == entry['text'])) { + allDisclaimer.add(entry); + } + }); + + // Update the state + setState(() {}); + } + } // }); // Assuming data is a List } else { @@ -1135,12 +1223,15 @@ class _addOnsDetailsState extends State { isChecked = false; }); ToastHelper.showSuccessToast(context, 'Saved Successfully...'); + _showSuccessDialog(); } else { setState(() { isLoading = false; }); // Handle other status codes - ToastHelper.showErrorToast(context, 'failed to save'); + ToastHelper.showErrorToast(context, 'Failed to Save'); + _showErrorDialog(); + print('Request failed with status: ${response['code']}'); } } catch (e) { setState(() { @@ -1198,6 +1289,89 @@ class _addOnsDetailsState extends State { await prefs.setString('dependentData', jsonEncode(dependentData)); } + void _showSuccessDialog() { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + backgroundColor: Colors.white, + title: Text( + 'Success', + style: GoogleFonts.poppins( + color: Colors.green, + ), + ), + content: Text('Enrollment Completed'), + actions: [ + TextButton( + child: Text( + 'OK', + style: GoogleFonts.poppins( + color: Color(0xFFE26728), + ), + ), + onPressed: () { + Navigator.popAndPushNamed(context, 'home'); + }, + ), + ], + ); + }, + ); + } + + void _showErrorDialog() { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text( + 'Error', + style: GoogleFonts.poppins( + color: Colors.red, + ), + ), + content: Text('Something went wrong. Enrollemnt not completed'), + actions: [ + TextButton( + child: Text( + 'OK', + style: GoogleFonts.poppins( + color: Color(0xFFE26728), + ), + ), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + + bool isSubmitEnabled() { + // // Convert to integers and handle null values by defaulting to 0 + // bool enrollmentConditionsMet = + // (int.tryParse(topUpOpenForEnrollment ?? '0') != 0) && + // (int.tryParse(topUpParentOpenForEnrollment ?? '0') != 0) && + // (int.tryParse(addOnsDependentOpenForEnrollment ?? '0') != 0); + // + // print('enrollmentConditionsMet: $enrollmentConditionsMet'); + // print('gmcEnrollmentStatus: $gmcEnrollmentStatus'); + + // return isChecked && + // enrollmentConditionsMet && + // gmcEnrollmentStatus && + // (activeSiData == 1 ? topUpSiIsChecked : true) && + // (activeSiParentData == 1 ? topUpParentIsChecked : true) && + // (activeDependentData == 1 ? addOnsDependentIsChecked : true); + disclaimeStatus = allDisclaimer.every((item) => item['checked'] == true); + + // Combine the `disclaimeStatus` and `isChecked` conditions + return isChecked && disclaimeStatus; + } + @override Widget build(BuildContext context) { if (gpaDataIsEmpty == 0 && gmcDataIsEmpty == 0) { @@ -1607,7 +1781,7 @@ class _addOnsDetailsState extends State { color: Color(0xFF181818)), ), Text( - 'Increase your medical cover for your family or add parents or parent in laws by paying additional premium', + 'Medical coverage for your parents or in-laws by paying an additional premium', textAlign: TextAlign.left, style: GoogleFonts.poppins( fontSize: @@ -1624,6 +1798,594 @@ class _addOnsDetailsState extends State { ), ), SizedBox(height: 15), + if (addOnsDependentMappedFamilyFloatersDependent != + null) + Container( + decoration: BoxDecoration( + color: Color( + 0xFFDDF3FF), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: Responsive.isDesktop(context) + ? EdgeInsets.all(25) + : EdgeInsets.all(10), + child: Column( + children: [ + Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Expanded( + flex: Responsive.isDesktop( + context) + ? 6 + : 8, + child: Container( + alignment: + Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .start, + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + Text( + Responsive.isDesktop( + context) + ? addOnsDependentPolicyName + : addOnsDependentPolicyType, + textAlign: + TextAlign.left, + style: GoogleFonts + .poppins( + fontSize: Responsive + .isDesktop( + context) + ? 20 + : 16, + fontWeight: + FontWeight.w600, + ), + ), + Text( + '', + textAlign: + TextAlign.left, + style: GoogleFonts + .poppins( + fontSize: Responsive + .isDesktop( + context) + ? 18 + : 14, + ), + ), + ], + ))), + if (Responsive.isDesktop(context) && + _addOnsDependentSwitcher) + Expanded( + flex: 3, + child: Container( + width: 50, + alignment: + Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + IgnorePointer( + ignoring: (addOnsDependentOpenForEnrollment == + 0 || + (addOnsDependentOpenForEnrollment != + 0 && + addOnsDependentECardDownload != + null)), + child: + DropdownButtonFormField< + String>( + onChanged: + (value) { + setState(() { + addOnsSelectedDependent = + value; + }); + addOnsDependentCalculation( + value); + // calculationForDependentSumValue( + // 'Edit'); + }, + decoration: + InputDecoration( + border: + OutlineInputBorder(), + hintText: + 'Sum Insured', + labelText: + 'Sum Insured', + contentPadding: + EdgeInsets.symmetric( + vertical: + 5, + horizontal: + 5), + ), + value: + addOnsSelectedDependent, + items: (addOnsDependentSlabRates ?? + []) + .map>( + (addOn) { + return DropdownMenuItem< + String>( + value: addOn[ + 'si'] + .toString(), + child: Text( + '₹ ${addOn['si']}'), + ); + }).toList(), + ), + ) + ], + ))), + Expanded( + flex: 3, + child: Container( + alignment: + Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment + .end, + children: [ + Switch( + value: + _addOnsDependentSwitcher, + onChanged: (addOnsDependentOpenForEnrollment == + 0 || + (addOnsDependentOpenForEnrollment != + 0 && + addOnsDependentECardDownload != + null)) + ? null + : (value) { + setState(() { + _addOnsDependentSwitcher = + value; + // Add your logic here based on the toggle state + }); + }, + activeColor: Colors + .green, // Color when the switch is ON + inactiveTrackColor: Colors + .grey, // Color of the switch track when OFF + ), + ], + ))), + ], + ), + if (_addOnsDependentSwitcher == true) + SizedBox(height: 10), + if (!Responsive.isDesktop(context) && + _addOnsDependentSwitcher == true) + Row( + children: [ + Expanded( + flex: 3, + child: Container( + width: 50, + alignment: + Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + IgnorePointer( + ignoring: (addOnsDependentOpenForEnrollment == + 0 || + (addOnsDependentOpenForEnrollment != + 0 && + addOnsDependentECardDownload != + null)), + child: + DropdownButtonFormField< + String>( + onChanged: + (value) { + setState(() { + addOnsSelectedDependent = + value; + }); + addOnsDependentCalculation( + value); + // calculationForDependentSumValue( + // 'Edit'); + }, + decoration: + InputDecoration( + border: + OutlineInputBorder(), + hintText: + 'Sum Insured', + labelText: + 'Sum Insured', + contentPadding: + EdgeInsets.symmetric( + vertical: + 5, + horizontal: + 5), + ), + value: + addOnsSelectedDependent, + items: (addOnsDependentSlabRates ?? + []) + .map>( + (addOn) { + return DropdownMenuItem< + String>( + value: addOn[ + 'si'] + .toString(), + child: Text( + '₹ ${addOn['si']}'), + ); + }).toList(), + ), + ) + ], + ))), + ], + ), + SizedBox(height: 20), + if (_addOnsDependentSwitcher == true) + Column( + children: familyFloaterContainers, + ), + if (_addOnsDependentSwitcher) + SizedBox(height: 20), + if (Responsive.isDesktop(context) && + _addOnsDependentSwitcher) + Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Expanded( + flex: 5, + child: Container( + alignment: + Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + Text( + 'Additional Premium', + textAlign: + TextAlign.start, + style: GoogleFonts + .poppins( + fontSize: 20, + fontWeight: + FontWeight + .w500, + ), + ), + Text( + addOnDependentPremiumValue != + null + ? '₹ $addOnDependentPremiumValue/Year' + : 'N/A', + textAlign: + TextAlign.start, + style: GoogleFonts + .poppins( + fontSize: 18, + ), + ), + ], + ))), + Expanded( + flex: 2, + child: Container( + alignment: + Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + Text( + 'GST', + textAlign: + TextAlign.start, + style: GoogleFonts + .poppins( + fontSize: 20, + fontWeight: + FontWeight + .w500, + ), + ), + Text( + addOnsDependentPremiumGst != + null + ? '₹ $addOnsDependentPremiumGst/-' + : 'N/A', + textAlign: + TextAlign.start, + style: GoogleFonts + .poppins( + fontSize: 18, + ), + ), + ], + ))), + Expanded( + flex: 5, + child: Container( + alignment: + Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + Text( + 'Total Payable', + textAlign: + TextAlign.start, + style: GoogleFonts + .poppins( + fontSize: 20, + fontWeight: + FontWeight + .w500, + ), + ), + Text( + addOnsDependentTotalAmt != + null + ? '₹ $addOnsDependentTotalAmt/-' + : 'N/A', + textAlign: + TextAlign.start, + style: GoogleFonts + .poppins( + fontSize: 18, + ), + ), + ], + ))), + ], + ), + if (!Responsive.isDesktop(context) && + _addOnsDependentSwitcher == true) + Container( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment + .centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + Text( + 'Additional Premium', + textAlign: + TextAlign + .start, + style: GoogleFonts + .poppins( + fontSize: + 18, + fontWeight: + FontWeight + .w500, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment + .centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + Text( + addOnDependentPremiumValue != + null + ? '₹ $addOnDependentPremiumValue/Year' + : 'N/A', + textAlign: + TextAlign + .start, + style: GoogleFonts + .poppins( + fontSize: + 16, + ), + ), + ], + ))), + ], + ), + Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment + .centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + Text( + 'GST', + textAlign: + TextAlign + .start, + style: GoogleFonts + .poppins( + fontSize: + 18, + fontWeight: + FontWeight + .w500, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment + .centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + Text( + addOnsDependentPremiumGst != + null + ? '₹ $addOnsDependentPremiumGst/-' + : 'N/A', + textAlign: + TextAlign + .start, + style: GoogleFonts + .poppins( + fontSize: + 16, + ), + ), + ], + ))), + ], + ), + Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment + .centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + Text( + 'Total Payable', + textAlign: + TextAlign + .start, + style: GoogleFonts + .poppins( + fontSize: + 18, + fontWeight: + FontWeight + .w500, + ), + ), + ], + ))), + Expanded( + flex: 5, + child: Container( + alignment: Alignment + .centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + crossAxisAlignment: + CrossAxisAlignment + .center, + children: [ + Text( + addOnsDependentTotalAmt != + null + ? '₹ $addOnsDependentTotalAmt/-' + : 'N/A', + textAlign: + TextAlign + .start, + style: GoogleFonts + .poppins( + fontSize: + 16, + ), + ), + ], + ))), + ], + ), + ])) + ], + )), + SizedBox(height: 15), if (topUpMappedFamilyFloatersSi != null) Container( decoration: BoxDecoration( @@ -2898,594 +3660,6 @@ class _addOnsDetailsState extends State { ], ), ), - SizedBox(height: 15), - if (addOnsDependentMappedFamilyFloatersDependent != - null) - Container( - decoration: BoxDecoration( - color: Color( - 0xFFDDF3FF), // Set background color for the container - borderRadius: BorderRadius.circular( - 5), // Set border radius for the container - ), - padding: Responsive.isDesktop(context) - ? EdgeInsets.all(25) - : EdgeInsets.all(10), - child: Column( - children: [ - Row( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Expanded( - flex: Responsive.isDesktop( - context) - ? 6 - : 8, - child: Container( - alignment: - Alignment.centerLeft, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .start, - crossAxisAlignment: - CrossAxisAlignment - .start, - children: [ - Text( - Responsive.isDesktop( - context) - ? addOnsDependentPolicyName - : addOnsDependentPolicyType, - textAlign: - TextAlign.left, - style: GoogleFonts - .poppins( - fontSize: Responsive - .isDesktop( - context) - ? 20 - : 16, - fontWeight: - FontWeight.w600, - ), - ), - Text( - '', - textAlign: - TextAlign.left, - style: GoogleFonts - .poppins( - fontSize: Responsive - .isDesktop( - context) - ? 18 - : 14, - ), - ), - ], - ))), - if (Responsive.isDesktop(context) && - _addOnsDependentSwitcher) - Expanded( - flex: 3, - child: Container( - width: 50, - alignment: - Alignment.center, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - IgnorePointer( - ignoring: (addOnsDependentOpenForEnrollment == - 0 || - (addOnsDependentOpenForEnrollment != - 0 && - addOnsDependentECardDownload != - null)), - child: - DropdownButtonFormField< - String>( - onChanged: - (value) { - setState(() { - addOnsSelectedDependent = - value; - }); - addOnsDependentCalculation( - value); - // calculationForDependentSumValue( - // 'Edit'); - }, - decoration: - InputDecoration( - border: - OutlineInputBorder(), - hintText: - 'Sum Insured', - labelText: - 'Sum Insured', - contentPadding: - EdgeInsets.symmetric( - vertical: - 5, - horizontal: - 5), - ), - value: - addOnsSelectedDependent, - items: (addOnsDependentSlabRates ?? - []) - .map>( - (addOn) { - return DropdownMenuItem< - String>( - value: addOn[ - 'si'] - .toString(), - child: Text( - '₹ ${addOn['si']}'), - ); - }).toList(), - ), - ) - ], - ))), - Expanded( - flex: 3, - child: Container( - alignment: - Alignment.centerRight, - child: Column( - mainAxisAlignment: - MainAxisAlignment.end, - crossAxisAlignment: - CrossAxisAlignment - .end, - children: [ - Switch( - value: - _addOnsDependentSwitcher, - onChanged: (addOnsDependentOpenForEnrollment == - 0 || - (addOnsDependentOpenForEnrollment != - 0 && - addOnsDependentECardDownload != - null)) - ? null - : (value) { - setState(() { - _addOnsDependentSwitcher = - value; - // Add your logic here based on the toggle state - }); - }, - activeColor: Colors - .green, // Color when the switch is ON - inactiveTrackColor: Colors - .grey, // Color of the switch track when OFF - ), - ], - ))), - ], - ), - if (_addOnsDependentSwitcher == true) - SizedBox(height: 10), - if (!Responsive.isDesktop(context) && - _addOnsDependentSwitcher == true) - Row( - children: [ - Expanded( - flex: 3, - child: Container( - width: 50, - alignment: - Alignment.center, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - IgnorePointer( - ignoring: (addOnsDependentOpenForEnrollment == - 0 || - (addOnsDependentOpenForEnrollment != - 0 && - addOnsDependentECardDownload != - null)), - child: - DropdownButtonFormField< - String>( - onChanged: - (value) { - setState(() { - addOnsSelectedDependent = - value; - }); - addOnsDependentCalculation( - value); - // calculationForDependentSumValue( - // 'Edit'); - }, - decoration: - InputDecoration( - border: - OutlineInputBorder(), - hintText: - 'Sum Insured', - labelText: - 'Sum Insured', - contentPadding: - EdgeInsets.symmetric( - vertical: - 5, - horizontal: - 5), - ), - value: - addOnsSelectedDependent, - items: (addOnsDependentSlabRates ?? - []) - .map>( - (addOn) { - return DropdownMenuItem< - String>( - value: addOn[ - 'si'] - .toString(), - child: Text( - '₹ ${addOn['si']}'), - ); - }).toList(), - ), - ) - ], - ))), - ], - ), - SizedBox(height: 20), - if (_addOnsDependentSwitcher == true) - Column( - children: familyFloaterContainers, - ), - if (_addOnsDependentSwitcher) - SizedBox(height: 20), - if (Responsive.isDesktop(context) && - _addOnsDependentSwitcher) - Row( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Expanded( - flex: 5, - child: Container( - alignment: - Alignment.center, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - Text( - 'Additional Premium', - textAlign: - TextAlign.start, - style: GoogleFonts - .poppins( - fontSize: 20, - fontWeight: - FontWeight - .w500, - ), - ), - Text( - addOnDependentPremiumValue != - null - ? '₹ $addOnDependentPremiumValue/Year' - : 'N/A', - textAlign: - TextAlign.start, - style: GoogleFonts - .poppins( - fontSize: 18, - ), - ), - ], - ))), - Expanded( - flex: 2, - child: Container( - alignment: - Alignment.center, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - Text( - 'GST', - textAlign: - TextAlign.start, - style: GoogleFonts - .poppins( - fontSize: 20, - fontWeight: - FontWeight - .w500, - ), - ), - Text( - addOnsDependentPremiumGst != - null - ? '₹ $addOnsDependentPremiumGst/-' - : 'N/A', - textAlign: - TextAlign.start, - style: GoogleFonts - .poppins( - fontSize: 18, - ), - ), - ], - ))), - Expanded( - flex: 5, - child: Container( - alignment: - Alignment.center, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - Text( - 'Total Payable', - textAlign: - TextAlign.start, - style: GoogleFonts - .poppins( - fontSize: 20, - fontWeight: - FontWeight - .w500, - ), - ), - Text( - addOnsDependentTotalAmt != - null - ? '₹ $addOnsDependentTotalAmt/-' - : 'N/A', - textAlign: - TextAlign.start, - style: GoogleFonts - .poppins( - fontSize: 18, - ), - ), - ], - ))), - ], - ), - if (!Responsive.isDesktop(context) && - _addOnsDependentSwitcher == true) - Container( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Expanded( - flex: 6, - child: Container( - alignment: Alignment - .centerLeft, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - Text( - 'Additional Premium', - textAlign: - TextAlign - .start, - style: GoogleFonts - .poppins( - fontSize: - 18, - fontWeight: - FontWeight - .w500, - ), - ), - ], - ))), - Expanded( - flex: 6, - child: Container( - alignment: Alignment - .centerRight, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - Text( - addOnDependentPremiumValue != - null - ? '₹ $addOnDependentPremiumValue/Year' - : 'N/A', - textAlign: - TextAlign - .start, - style: GoogleFonts - .poppins( - fontSize: - 16, - ), - ), - ], - ))), - ], - ), - Row( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Expanded( - flex: 6, - child: Container( - alignment: Alignment - .centerLeft, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - Text( - 'GST', - textAlign: - TextAlign - .start, - style: GoogleFonts - .poppins( - fontSize: - 18, - fontWeight: - FontWeight - .w500, - ), - ), - ], - ))), - Expanded( - flex: 6, - child: Container( - alignment: Alignment - .centerRight, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - Text( - addOnsDependentPremiumGst != - null - ? '₹ $addOnsDependentPremiumGst/-' - : 'N/A', - textAlign: - TextAlign - .start, - style: GoogleFonts - .poppins( - fontSize: - 16, - ), - ), - ], - ))), - ], - ), - Row( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Expanded( - flex: 6, - child: Container( - alignment: Alignment - .centerLeft, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - Text( - 'Total Payable', - textAlign: - TextAlign - .start, - style: GoogleFonts - .poppins( - fontSize: - 18, - fontWeight: - FontWeight - .w500, - ), - ), - ], - ))), - Expanded( - flex: 5, - child: Container( - alignment: Alignment - .centerRight, - child: Column( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .center, - children: [ - Text( - addOnsDependentTotalAmt != - null - ? '₹ $addOnsDependentTotalAmt/-' - : 'N/A', - textAlign: - TextAlign - .start, - style: GoogleFonts - .poppins( - fontSize: - 16, - ), - ), - ], - ))), - ], - ), - ])) - ], - )), ], ), )), @@ -3559,6 +3733,79 @@ class _addOnsDetailsState extends State { ], ), ), + SizedBox( + height: + Responsive.isDesktop(context) ? 15 : 0), + Container( + // padding: EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: allDisclaimer.isEmpty + ? [] // If allDisclaimer is empty, show nothing + : allDisclaimer.map((entry) { + int id = + entry['id']; // ID of disclaimer + String disclaimer = + entry['text']; // Disclaimer text + bool isChecked = + entry['checked']; // Checked state + + return Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Expanded( + flex: 1, + child: Container( + alignment: + Alignment.centerLeft, + child: Checkbox( + value: + isChecked, // Bind to the checked value + onChanged: (bool? value) { + setState(() { + // Update the checked status + allDisclaimer + .firstWhere( + (item) => + item['id'] == id, + )['checked'] = value!; + print(allDisclaimer); + }); + }, + activeColor: Color( + 0xFFE26728), // Custom color + ), + ), + ), + Expanded( + flex: 11, + child: Container( + alignment: + Alignment.centerLeft, + child: Text( + disclaimer, + textAlign: + Responsive.isDesktop( + context) + ? TextAlign.left + : TextAlign.start, + style: GoogleFonts.poppins( + fontSize: + Responsive.isDesktop( + context) + ? 18 + : 15, + color: Color(0xFF292929), + ), + ), + ), + ), + ], + ); + }).toList(), + ), + ), SizedBox( height: Responsive.isDesktop(context) ? 15 : 0), @@ -3601,8 +3848,9 @@ class _addOnsDetailsState extends State { height: 150, alignment: Alignment.centerRight, child: ElevatedButton( - onPressed: - isChecked ? sendAddOnAPI : null, + onPressed: isSubmitEnabled() + ? sendAddOnAPI + : null, child: Text( 'Submit', style: GoogleFonts.poppins( diff --git a/lib/pages/enrollment/empReview.dart b/lib/pages/enrollment/empReview.dart index bc52643..e342f9e 100644 --- a/lib/pages/enrollment/empReview.dart +++ b/lib/pages/enrollment/empReview.dart @@ -28,10 +28,12 @@ class _empReviewDetailsState extends State { late ApiService apiService; bool isLoading = true; bool isChecked = false; // Declare the _isSwitched variable here + bool disclaimeStatus = false; // Declare the _isSwitched variable here bool topUpSiIsChecked = false; // Declare the _isSwitched variable here bool topUpParentIsChecked = false; // Declare the _isSwitched variable here bool addOnsDependentIsChecked = false; // Declare the _isSwitched variable here + dynamic _token; dynamic empCodeString; dynamic empPrimaryId; @@ -50,6 +52,7 @@ class _empReviewDetailsState extends State { dynamic gpaSelfDetails; dynamic gpaECardDownload; dynamic gmcECardDownload; + dynamic gmcDisclaimer; dynamic gmcClintPolicyId = 0; dynamic gmcMappedFamilyFloaters = []; dynamic gmcSelfName; @@ -137,6 +140,9 @@ class _empReviewDetailsState extends State { dynamic topUpParentOpenForEnrollment; dynamic addOnsDependentOpenForEnrollment; bool gmcEnrollmentStatus = false; + List> allDisclaimer = + []; // Declare this to store all disclaimers + late List checkboxValues; @override void initState() { @@ -148,6 +154,7 @@ class _empReviewDetailsState extends State { isLoading = false; }); }); + checkboxValues = List.filled(allDisclaimer.length, false); } @override @@ -322,6 +329,48 @@ class _empReviewDetailsState extends State { setState(() { gpaPolicies = response['data']; print('gpaPolicies'); + for (var item in gpaPolicies) { + // Extract disclaimer value from each object + dynamic disclaimer = item['disclaimer']; + + if (disclaimer != null && disclaimer.isNotEmpty) { + // Temporary list to hold new entries + List> newEntries = []; + + if (disclaimer is String) { + // Wrap string in a map with id and checked + newEntries.add({ + 'id': allDisclaimer.length + 1, // Unique ID based on length + 'text': disclaimer, + 'checked': false, + }); + } else if (disclaimer is List) { + // Convert each string in the list to a map with id and checked + newEntries.addAll( + List>.from( + disclaimer.map((text) => { + 'id': allDisclaimer.length + newEntries.length + 1, + 'text': text, + 'checked': false, + }), + ), + ); + } else { + print('Unexpected type for disclaimer'); + } + + // Add new entries to the main list, ensuring no duplicate texts + newEntries.forEach((entry) { + if (!allDisclaimer + .any((item) => item['text'] == entry['text'])) { + allDisclaimer.add(entry); + } + }); + + // Update the state + setState(() {}); + } + } }); } else { setState(() { @@ -350,6 +399,48 @@ class _empReviewDetailsState extends State { setState(() { gmcPolicies = response['data']; print('gmcPolicies'); + for (var item in gmcPolicies) { + // Extract disclaimer value from each object + dynamic disclaimer = item['disclaimer']; + + if (disclaimer != null && disclaimer.isNotEmpty) { + // Temporary list to hold new entries + List> newEntries = []; + + if (disclaimer is String) { + // Wrap string in a map with id and checked + newEntries.add({ + 'id': allDisclaimer.length + 1, // Unique ID based on length + 'text': disclaimer, + 'checked': false, + }); + } else if (disclaimer is List) { + // Convert each string in the list to a map with id and checked + newEntries.addAll( + List>.from( + disclaimer.map((text) => { + 'id': allDisclaimer.length + newEntries.length + 1, + 'text': text, + 'checked': false, + }), + ), + ); + } else { + print('Unexpected type for disclaimer'); + } + + // Add new entries to the main list, ensuring no duplicate texts + newEntries.forEach((entry) { + if (!allDisclaimer + .any((item) => item['text'] == entry['text'])) { + allDisclaimer.add(entry); + } + }); + + // Update the state + setState(() {}); + } + } }); // Assuming data is a List print(gmcPolicies); @@ -417,6 +508,45 @@ class _empReviewDetailsState extends State { topUpDisclaimer = await topUpSiPolicies['gmc_si_topup']['disclaimer']; + + if (topUpDisclaimer != null && topUpDisclaimer.isNotEmpty) { + // Temporary list to hold new entries + List> newEntries = []; + + if (topUpDisclaimer is String) { + // Wrap string in a map with id and checked + newEntries.add({ + 'id': allDisclaimer.length + 1, // Unique ID based on length + 'text': topUpDisclaimer, + 'checked': false, + }); + } else if (topUpDisclaimer is List) { + // Convert each string in the list to a map with id and checked + newEntries.addAll( + List>.from( + topUpDisclaimer.map((text) => { + 'id': allDisclaimer.length + newEntries.length + 1, + 'text': text, + 'checked': false, + }), + ), + ); + } else { + print('Unexpected type for disclaimer'); + } + + // Add new entries to the main list, ensuring no duplicate texts + newEntries.forEach((entry) { + if (!allDisclaimer + .any((item) => item['text'] == entry['text'])) { + allDisclaimer.add(entry); + } + }); + + // Update the state + setState(() {}); + } + // allDisclaimer = allDisclaimer.toSet().toList(); // }); } else { print('No data found in the response'); @@ -514,6 +644,45 @@ class _empReviewDetailsState extends State { topUpParentDisclaimer = await topUpSiParentPolicies['gmc_si_parent_topup'] ['disclaimer']; + + if (topUpParentDisclaimer != null && + topUpParentDisclaimer.isNotEmpty) { + // Temporary list to hold new entries + List> newEntries = []; + + if (topUpParentDisclaimer is String) { + // Wrap string in a map with id and checked + newEntries.add({ + 'id': allDisclaimer.length + 1, // Unique ID based on length + 'text': topUpParentDisclaimer, + 'checked': false, + }); + } else if (topUpParentDisclaimer is List) { + // Convert each string in the list to a map with id and checked + newEntries.addAll( + List>.from( + topUpParentDisclaimer.map((text) => { + 'id': allDisclaimer.length + newEntries.length + 1, + 'text': text, + 'checked': false, + }), + ), + ); + } else { + print('Unexpected type for disclaimer'); + } + + // Add new entries to the main list, ensuring no duplicate texts + newEntries.forEach((entry) { + if (!allDisclaimer + .any((item) => item['text'] == entry['text'])) { + allDisclaimer.add(entry); + } + }); + + // Update the state + setState(() {}); + } } else { print('No data found in the response'); } @@ -587,6 +756,45 @@ class _empReviewDetailsState extends State { await addOnsDependentPolicies['gmc_dependent_addon'] ['disclaimer']; + if (addOnsDependentDisclaimer != null && + addOnsDependentDisclaimer.isNotEmpty) { + // Temporary list to hold new entries + List> newEntries = []; + + if (addOnsDependentDisclaimer is String) { + // Wrap string in a map with id and checked + newEntries.add({ + 'id': allDisclaimer.length + 1, // Unique ID based on length + 'text': addOnsDependentDisclaimer, + 'checked': false, + }); + } else if (addOnsDependentDisclaimer is List) { + // Convert each string in the list to a map with id and checked + newEntries.addAll( + List>.from( + addOnsDependentDisclaimer.map((text) => { + 'id': allDisclaimer.length + newEntries.length + 1, + 'text': text, + 'checked': false, + }), + ), + ); + } else { + print('Unexpected type for disclaimer'); + } + + // Add new entries to the main list, ensuring no duplicate texts + newEntries.forEach((entry) { + if (!allDisclaimer + .any((item) => item['text'] == entry['text'])) { + allDisclaimer.add(entry); + } + }); + + // Update the state + setState(() {}); + } + addOnsDependentOpenForEnrollment = await addOnsDependentPolicies['gmc_dependent_addon'] ['OpenForEnrollment']; @@ -795,28 +1003,25 @@ class _empReviewDetailsState extends State { } bool isSubmitEnabled() { - print( - 'topUpOpenForEnrollment: $topUpOpenForEnrollment (type: ${topUpOpenForEnrollment?.runtimeType})'); - print( - 'topUpParentOpenForEnrollment: $topUpParentOpenForEnrollment (type: ${topUpParentOpenForEnrollment?.runtimeType})'); - print( - 'addOnsDependentOpenForEnrollment: $addOnsDependentOpenForEnrollment (type: ${addOnsDependentOpenForEnrollment?.runtimeType})'); + // // Convert to integers and handle null values by defaulting to 0 + // bool enrollmentConditionsMet = + // (int.tryParse(topUpOpenForEnrollment ?? '0') != 0) && + // (int.tryParse(topUpParentOpenForEnrollment ?? '0') != 0) && + // (int.tryParse(addOnsDependentOpenForEnrollment ?? '0') != 0); + // + // print('enrollmentConditionsMet: $enrollmentConditionsMet'); + // print('gmcEnrollmentStatus: $gmcEnrollmentStatus'); - // Convert to integers and handle null values by defaulting to 0 - bool enrollmentConditionsMet = - (int.tryParse(topUpOpenForEnrollment ?? '0') != 0) && - (int.tryParse(topUpParentOpenForEnrollment ?? '0') != 0) && - (int.tryParse(addOnsDependentOpenForEnrollment ?? '0') != 0); + // return isChecked && + // enrollmentConditionsMet && + // gmcEnrollmentStatus && + // (activeSiData == 1 ? topUpSiIsChecked : true) && + // (activeSiParentData == 1 ? topUpParentIsChecked : true) && + // (activeDependentData == 1 ? addOnsDependentIsChecked : true); + disclaimeStatus = allDisclaimer.every((item) => item['checked'] == true); - print('enrollmentConditionsMet: $enrollmentConditionsMet'); - print('gmcEnrollmentStatus: $gmcEnrollmentStatus'); - - return isChecked && - enrollmentConditionsMet && - gmcEnrollmentStatus && - (activeSiData == 1 ? topUpSiIsChecked : true) && - (activeSiParentData == 1 ? topUpParentIsChecked : true) && - (activeDependentData == 1 ? addOnsDependentIsChecked : true); + // Combine the `disclaimeStatus` and `isChecked` conditions + return isChecked && disclaimeStatus; } bool isEnrollmentOpen(List? policyList) { @@ -2212,7 +2417,7 @@ class _empReviewDetailsState extends State { Expanded( flex: 11, child: Container( - alignment: Alignment.centerRight, + alignment: Alignment.centerLeft, child: Column( mainAxisAlignment: MainAxisAlignment.end, @@ -2239,168 +2444,53 @@ class _empReviewDetailsState extends State { ], ), ), - SizedBox(height: 15), - if (activeSiData == 1) - Container( - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 1, - child: Container( - alignment: Alignment.centerLeft, - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Checkbox( - value: topUpSiIsChecked, - onChanged: (bool? value) { - setState(() { - topUpSiIsChecked = value!; - }); - }, - activeColor: - Color(0xFFE26728), - ), - ], - ))), - Expanded( - flex: 11, - child: Container( - alignment: Alignment.centerRight, - child: Column( - mainAxisAlignment: - MainAxisAlignment.end, - crossAxisAlignment: - CrossAxisAlignment.end, - children: [ - Text( - topUpDisclaimer ?? '', - textAlign: - Responsive.isDesktop( - context) - ? TextAlign.left - : TextAlign.start, - style: GoogleFonts.poppins( - fontSize: - Responsive.isDesktop( - context) - ? 18 - : 15, - color: Color(0xFF292929), - ), - ), - ], - ))), - ], - ), - ), - SizedBox(height: 15), - if (activeSiParentData == 1) - Container( - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 1, - child: Container( - alignment: Alignment.centerLeft, - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Checkbox( - value: topUpParentIsChecked, - onChanged: (bool? value) { - setState(() { - topUpParentIsChecked = - value!; - }); - }, - activeColor: - Color(0xFFE26728), - ), - ], - ))), - Expanded( - flex: 11, - child: Container( - alignment: Alignment.centerRight, - child: Column( - mainAxisAlignment: - MainAxisAlignment.end, - crossAxisAlignment: - CrossAxisAlignment.end, - children: [ - Text( - topUpParentDisclaimer ?? '', - textAlign: - Responsive.isDesktop( - context) - ? TextAlign.left - : TextAlign.start, - style: GoogleFonts.poppins( - fontSize: - Responsive.isDesktop( - context) - ? 18 - : 15, - color: Color(0xFF292929), - ), - ), - ], - ))), - ], - ), - ), - SizedBox(height: 15), - if (activeDependentData == 1) - Container( - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 1, - child: Container( - alignment: Alignment.centerLeft, - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Checkbox( + SizedBox(height: 10), + Container( + // padding: EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: allDisclaimer.isEmpty + ? [] // If allDisclaimer is empty, show nothing + : allDisclaimer.map((entry) { + int id = + entry['id']; // ID of disclaimer + String disclaimer = + entry['text']; // Disclaimer text + bool isChecked = + entry['checked']; // Checked state + + return Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Expanded( + flex: 1, + child: Container( + alignment: Alignment.centerLeft, + child: Checkbox( value: - addOnsDependentIsChecked, + isChecked, // Bind to the checked value onChanged: (bool? value) { setState(() { - addOnsDependentIsChecked = - value!; + // Update the checked status + allDisclaimer.firstWhere( + (item) => + item['id'] == id, + )['checked'] = value!; + print(allDisclaimer); }); }, - activeColor: - Color(0xFFE26728), + activeColor: Color( + 0xFFE26728), // Custom color ), - ], - ))), - Expanded( - flex: 11, - child: Container( - alignment: Alignment.centerRight, - child: Column( - mainAxisAlignment: - MainAxisAlignment.end, - crossAxisAlignment: - CrossAxisAlignment.end, - children: [ - Text( - addOnsDependentDisclaimer ?? - '', + ), + ), + Expanded( + flex: 11, + child: Container( + alignment: Alignment.centerLeft, + child: Text( + disclaimer, textAlign: Responsive.isDesktop( context) @@ -2415,11 +2505,13 @@ class _empReviewDetailsState extends State { color: Color(0xFF292929), ), ), - ], - ))), - ], - ), + ), + ), + ], + ); + }).toList(), ), + ), SizedBox( height: Responsive.isDesktop(context) ? 15 : 0), Container( @@ -2585,6 +2677,11 @@ class _empReviewDetailsState extends State { String? gpaPolicyType = item['type']; String? gpaECardDownload = item['eCardDownload']; String? gpaSumInsured; + print('GPA Disclaimer $allDisclaimer'); + setState(() { + checkboxValues = List.generate(allDisclaimer.length, (_) => false); + }); + List gpaMappedFamilyFloaters = []; if (item['mapped_family_floaters'] != null) { @@ -2777,6 +2874,8 @@ class _empReviewDetailsState extends State { gmcECardDownload = item['eCardDownload']; // gmcSumInsured = item['Policy_Terms']['sum_insured']; gmcMappedFamilyFloaters = item['mapped_family_floaters']; + // allDisclaimer = allDisclaimer.toSet().toList(); + print('GPA Disclaimer $allDisclaimer'); dynamic getTrueObjects = gmcMappedFamilyFloaters .where((element) => element['is_value_exist'] == true) .toList(); diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index fc6e2af..f6f23bf 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,13 +6,9 @@ #include "generated_plugin_registrant.h" -#include #include void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) smart_auth_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "SmartAuthPlugin"); - smart_auth_plugin_register_with_registrar(smart_auth_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 4ebc56f..f16b4c3 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - smart_auth url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index a93dc44..a20809d 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -12,8 +12,7 @@ import google_sign_in_ios import local_auth_darwin import path_provider_foundation import shared_preferences_foundation -import smart_auth -import sqflite +import sqflite_darwin import url_launcher_macos import video_player_avfoundation @@ -25,7 +24,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) - SmartAuthPlugin.register(with: registry.registrar(forPlugin: "SmartAuthPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) diff --git a/pubspec.yaml b/pubspec.yaml index 547a9f7..dc3ce2c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,7 +36,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 animated_bottom_navigation_bar: ^1.3.3 - pinput: ^4.0.0 + pinput: ^5.0.0 http: ^1.2.1 shared_preferences: ^2.2.3 flutter_dotenv: ^5.1.0 @@ -65,7 +65,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^3.0.0 + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/web/index.html b/web/index.html index 22954af..7026918 100644 --- a/web/index.html +++ b/web/index.html @@ -59,14 +59,13 @@ // Import the functions you need from the SDKs you need import { initializeApp } from "https://www.gstatic.com/firebasejs/10.12.4/firebase-app.js"; - // Your web app's Firebase configuration const firebaseConfig = { - apiKey: "AIzaSyDg6lonV9STSIwJ4x261tcTGALEhX98LqY", - authDomain: "nhance-app-4fedb.firebaseapp.com", - projectId: "nhance-app-4fedb", - storageBucket: "nhance-app-4fedb.appspot.com", - messagingSenderId: "508866094093", - appId: "1:508866094093:web:82f8ad47ccb63688366144" + apiKey: "AIzaSyCnxkfRZW6EkON2laovunzYRXgHvHEPo0E", + authDomain: "nhance-ee8d1.firebaseapp.com", + projectId: "nhance-ee8d1", + storageBucket: "nhance-ee8d1.firebasestorage.app", + messagingSenderId: "1084115316849", + appId: "1:1084115316849:web:8fc3b1c886349ae86c6bd0" }; // Initialize Firebase diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 6a819e1..b710715 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -9,7 +9,6 @@ #include #include #include -#include #include void RegisterPlugins(flutter::PluginRegistry* registry) { @@ -19,8 +18,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); LocalAuthPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("LocalAuthPlugin")); - SmartAuthPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("SmartAuthPlugin")); UrlLauncherWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index f6d7660..ab79ac5 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -6,7 +6,6 @@ list(APPEND FLUTTER_PLUGIN_LIST firebase_auth firebase_core local_auth_windows - smart_auth url_launcher_windows )