diff --git a/android/app/build.gradle b/android/app/build.gradle index 4e3131e..d1ee905 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,59 +1,68 @@ plugins { id "com.android.application" id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id "dev.flutter.flutter-gradle-plugin" } -def localProperties = new Properties() -def localPropertiesFile = rootProject.file("local.properties") -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader("UTF-8") { reader -> - localProperties.load(reader) - } +// Load key.properties for signing release builds +def keystoreProperties = new Properties() +def keystorePropertiesFile = rootProject.file("key.properties") +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } -def flutterVersionCode = localProperties.getProperty("flutter.versionCode") -if (flutterVersionCode == null) { - flutterVersionCode = "1" -} - -def flutterVersionName = localProperties.getProperty("flutter.versionName") -if (flutterVersionName == null) { - flutterVersionName = "1.0" -} +// Flutter versioning +def flutterVersionCode = 12 +def flutterVersionName = "1.0.4" android { namespace = "com.frontshop.userapp" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion + compileSdk = 35 + ndkVersion = "26.1.10909125" // Optional; only if you use native code - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + defaultConfig { + applicationId = "com.frontshop.userapp" + minSdk = 23 + targetSdk = 35 + versionCode = flutterVersionCode + versionName = flutterVersionName } - defaultConfig - { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.frontshop.userapp" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutterVersionCode.toInteger() - versionName = flutterVersionName + signingConfigs { + release { + storeFile file(keystoreProperties['storeFile']) + storePassword keystoreProperties['storePassword'] + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + } } buildTypes { release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig = signingConfigs.release + minifyEnabled false + shrinkResources false } } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + coreLibraryDesugaringEnabled true + } + + kotlinOptions { + jvmTarget = '1.8' + } } flutter { source = "../.." } + +dependencies { + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' + + // ✅ PhonePe SDK - ensure this matches your maven URL from root `build.gradle` + +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 99334ae..ce4ee10 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,35 +1,35 @@ - + + - - + + + + + + + + + + - - - - - - - - - - - - - - + + + + - + + + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme"/> - + + + + + + + + + + + + - + + + + + + + + + + - + android:value="AIzaSyAi3_Dls63iGs7Nccgdm-4FkS0rhT03-4U"/> + + - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/kotlin/com/frontshop/userapp/MainActivity.kt b/android/app/src/main/kotlin/com/frontshop/userapp/MainActivity.kt index 65c3896..dd18c66 100644 --- a/android/app/src/main/kotlin/com/frontshop/userapp/MainActivity.kt +++ b/android/app/src/main/kotlin/com/frontshop/userapp/MainActivity.kt @@ -1,5 +1,3 @@ package com.frontshop.userapp - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() +import io.flutter.embedding.android.FlutterFragmentActivity +class MainActivity : FlutterFragmentActivity() \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index d2ffbff..7958baa 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,14 +2,18 @@ allprojects { repositories { google() mavenCentral() + + // ✅ Required for PhonePe SDK + maven { + url "https://phonepe.mycloudrepo.io/public/repositories/phonepe-intentsdk-android" + } } } rootProject.buildDir = "../build" + subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { project.evaluationDependsOn(":app") } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index c44290f..6126612 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip + diff --git a/android/settings.gradle b/android/settings.gradle index c5fb685..e61daf1 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -18,7 +18,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false + id "com.android.application" version "8.6.0" apply false id "org.jetbrains.kotlin.android" version "1.9.10" apply false } diff --git a/ios/Podfile b/ios/Podfile index d97f17e..e51a31d 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '12.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 8554444..fe888c0 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -45,5 +45,21 @@ UIApplicationSupportsIndirectInputEvents + LSApplicationQueriesSchemes + + tez + phonepe + paytmmp + bhim + + CFBundleURLTypes + + + CFBundleURLSchemes + + frontshop + + + diff --git a/lib/src/core/constant/api.dart b/lib/src/core/constant/api.dart index e513cde..4fb73eb 100644 --- a/lib/src/core/constant/api.dart +++ b/lib/src/core/constant/api.dart @@ -1,11 +1,11 @@ class APIURL { - static const BASE_URL = "http://210.89.44.183:3333/xam/"; + static const BASE_URL = "https://www.mv.frontshopemporium.in/xam/"; static const String sendOtp = "${BASE_URL}auth/send-otp/customer"; static const String verifyOtp = "${BASE_URL}auth/verify-otp/customer"; static const String loginOtp = "${BASE_URL}auth/login/customer"; static const String login = "${BASE_URL}auth/login/vendor"; static const String customerRegister = "${BASE_URL}auth/register/customer"; - static const String getAllProduct = "${BASE_URL}products"; + static const String getAllProduct = "${BASE_URL}products?order=home"; static const String getProductDetails = "${BASE_URL}products/"; static const String getBanners = "${BASE_URL}banners"; static const String customerLogOut = "${BASE_URL}auth/logout/customer"; @@ -39,6 +39,8 @@ class APIURL { static const String getProduct = "${BASE_URL}products"; static const String getCategoryByLevel = "${BASE_URL}categories/by-level/1"; static const String getMe = "${BASE_URL}auth/me"; + static const String distanctByProduct = "${BASE_URL}distance/delivery-charges-by-distance"; + static const String createProduct = "${BASE_URL}products"; @@ -50,6 +52,7 @@ class APIURL { static const String updateStatus = "${BASE_URL}orders/items/"; static const String checkAddress = "${BASE_URL}distance/by-address/"; + static const String productReview = "${BASE_URL}products/"; static const String upDateDeviceToken = "${BASE_URL}devices/register"; diff --git a/lib/src/logic/provider/addTocart_provider.dart b/lib/src/logic/provider/addTocart_provider.dart index bcd8903..15e2b37 100644 --- a/lib/src/logic/provider/addTocart_provider.dart +++ b/lib/src/logic/provider/addTocart_provider.dart @@ -377,75 +377,66 @@ class AddtocartProvider extends ChangeNotifier { ////////////////////////////COD //////////// - Future paymentCODOrder( - BuildContext context, - double subtotal, - int deliverCharge, - String couponId, - String addressId, - ) async { + Future paymentCODOrder( + BuildContext context, + double subtotal, + int deliverCharge, + String couponId, + String addressId, + ) async { ispaymentLoader = true; notifyListeners(); - var data; - if (couponId.isNotEmpty) { - data = { - "addressId": addressId, - "paymentMethod": "COD", - "paymentStatus": "PENDING", - "orderStatus": "PENDING", - "subtotal": subtotal, - "deliveryCharge": deliverCharge, - "transactionId": "phonepe_transaction_123", - "couponId": couponId - }; - } else { - data = { - "addressId": addressId, - "paymentMethod": "COD", - "paymentStatus": "PENDING", - "orderStatus": "PENDING", - "subtotal": subtotal, - "deliveryCharge": deliverCharge, - }; - } - print("kjfhxgkljfhg ${data}"); + var data = { + "addressId": addressId, + "paymentMethod": "COD", + "paymentStatus": "PENDING", + "orderStatus": "PENDING", + "subtotal": subtotal, + "deliveryCharge": deliverCharge, + }; + + if (couponId.isNotEmpty) { + data["couponId"] = couponId; + data["transactionId"] = "phonepe_transaction_123"; + } try { var result = await _homeRepo.paymentCODOrder(data); return result.fold( - (error) { + (error) { Fluttertoast.showToast( msg: "${error.message}", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, - backgroundColor: Colors.green, + backgroundColor: Colors.red, textColor: Colors.white, fontSize: 14.0, ); ispaymentLoader = false; notifyListeners(); + return false; }, - (response) { - context.clearAndPush(routePath: MyRoutes.SUCCESSPAYMENT); - + (response) { ispaymentLoader = false; notifyListeners(); + return true; }, ); } catch (e) { ispaymentLoader = false; + notifyListeners(); Fluttertoast.showToast( msg: "${e}", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, - backgroundColor: Colors.green, + backgroundColor: Colors.red, textColor: Colors.white, fontSize: 14.0, ); - notifyListeners(); + return false; } } diff --git a/lib/src/ui/card_checkout/card_checkout_screen.dart b/lib/src/ui/card_checkout/card_checkout_screen.dart index 3ab33e0..b662cbb 100644 --- a/lib/src/ui/card_checkout/card_checkout_screen.dart +++ b/lib/src/ui/card_checkout/card_checkout_screen.dart @@ -1,13 +1,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:fluttertoast/fluttertoast.dart'; import 'package:grocery_app/src/common_widget/name_text_field.dart'; import 'package:grocery_app/src/common_widget/network_image.dart'; import 'package:grocery_app/src/logic/provider/addTocart_provider.dart'; +import 'package:grocery_app/src/ui/payment/phonepe_payment.dart'; import 'package:grocery_app/utils/constants/assets_constant.dart'; import 'package:grocery_app/utils/constants/color_constant.dart'; import 'package:grocery_app/utils/extensions/uicontext.dart'; import 'package:provider/provider.dart'; +import '../payment/razorpay_payment.dart'; + class CardCheckoutScreen extends StatefulWidget { int deliveryCharge; // String currency; @@ -15,7 +19,7 @@ class CardCheckoutScreen extends StatefulWidget { // String name; // String phone; // String email; - // String userId; + String userId; String cartId; String addressId; // String remarks; @@ -30,7 +34,7 @@ class CardCheckoutScreen extends StatefulWidget { // required this.name, // required this.phone, // required this.email, - // required this.userId, + required this.userId, required this.cartId, required this.addressId, // required this.remarks, @@ -84,7 +88,7 @@ class _CardCheckoutScreenState extends State { ), Expanded( child: InkWell( - onTap: () { + /* onTap: () { if (paymentProvider.selectedPaymentMethod == "Online") { print("dsjfkhkdfhgdkfghdfg"); paymentProvider.orderPaymnet( @@ -93,7 +97,8 @@ class _CardCheckoutScreenState extends State { widget.cartId, widget.addressId, widget.couponId!); - } else { + } + else { paymentProvider.paymentCODOrder( context, widget.originalAmount, @@ -102,6 +107,68 @@ class _CardCheckoutScreenState extends State { widget.addressId, ); } + },*/ + onTap: (){ + if(paymentProvider.selectedPaymentMethod!=null) { + if (paymentProvider.selectedPaymentMethod == + "razorpay") { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + RazorpayPaymentScreen( + amount: widget.originalAmount + + widget.deliveryCharge, + cartId: widget.cartId, + addressId: widget.addressId, + couponId: widget.couponId, + userId: widget.userId, + ), + ), + ); + } else if (paymentProvider.selectedPaymentMethod == + "phonepe") { + // Navigate to PhonePe screen (optional for now) + // Replace this when you implement PhonePe + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + PhonePePaymentScreen( + amount: widget.originalAmount + + widget.deliveryCharge, + cartId: widget.cartId, + addressId: widget.addressId, + //couponId: widget.couponId, + userId: widget.userId, + ), + ), + ); + /* ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("PhonePe integration coming soon")), + );*/ + } /* + else { + paymentProvider.paymentCODOrder( + context, + widget.originalAmount, + widget.deliveryCharge, + widget.couponId ?? "", + widget.addressId, + ); + }*/ + }else + { + Fluttertoast.showToast( + msg: "Select Payment method", + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + backgroundColor: Colors.green, + textColor: Colors.white, + fontSize: 14.0, + ); + + } }, child: Container( height: 50, @@ -173,16 +240,34 @@ class _CardCheckoutScreenState extends State { ), SizedBox(height: 0), - ListTile( + /* ListTile( leading: Icon(Icons.payment, color: Colors.blue), title: Text("Online Payment"), trailing: paymentProvider.selectedPaymentMethod == "Online" ? Icon(Icons.check_circle, color: Colors.green) : null, onTap: () { - paymentProvider.selectPaymentMethod("Online"); + // paymentProvider.selectPaymentMethod("Online"); // Navigator.pop(context); }, + ),*/ + + RadioListTile( + value: "razorpay", + groupValue: paymentProvider.selectedPaymentMethod, + title: const Text("Razorpay Online Payment"), + onChanged: (value) { + paymentProvider.selectPaymentMethod(value!); + }, + ), + + RadioListTile( + value: "phonepe", + groupValue: paymentProvider.selectedPaymentMethod, + title: const Text("PhonePe Online Payment"), + onChanged: (value) { + paymentProvider.selectPaymentMethod(value!); + }, ), // Cash on Delivery (COD) Option @@ -404,3 +489,4 @@ class _CardCheckoutScreenState extends State { ); } } + diff --git a/lib/src/ui/cart/cartview_screen.dart b/lib/src/ui/cart/cartview_screen.dart index f8ed071..cbe5c51 100644 --- a/lib/src/ui/cart/cartview_screen.dart +++ b/lib/src/ui/cart/cartview_screen.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:carousel_slider/carousel_slider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -15,6 +17,7 @@ import 'package:grocery_app/src/ui/widgets/elevated_button.dart'; import 'package:grocery_app/utils/constants/color_constant.dart'; import 'package:grocery_app/utils/constants/shared_pref_utils.dart'; import 'package:grocery_app/utils/extensions/uicontext.dart'; +import 'package:http/http.dart' as http; import 'package:provider/provider.dart'; import 'package:skeletonizer/skeletonizer.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -1006,6 +1009,8 @@ class _MycartState extends State { ); } + + void _showAddressBottomSheet(BuildContext context) { showModalBottomSheet( context: context, @@ -1140,6 +1145,67 @@ class AddressBottomSheet extends StatefulWidget { } class _AddressBottomSheetState extends State { + Future fetchDeliveryMessage() async { + const String url = 'https://www.mv.frontshopemporium.in/xam/distance/delivery-charges-by-distance'; + + try { + final response = await http.get(Uri.parse(url), headers: { + "Content-Type": "application/json", + "authorization": "Bearer ${await SharedPrefUtils.getToken()}" + }); + + print('continue response'); + print(response.statusCode); + print(response.body); + if (response.statusCode == 200) { + + final Map data = json.decode(response.body); + print(data); + final List nonDeliverableProducts = data['nonDeliverableProducts'] ?? []; + if (nonDeliverableProducts.isNotEmpty) { + final String reason = nonDeliverableProducts[0]['reason']; + print(reason); + return reason; + } else { + return ''; + } + } else { + return 'Failed with status: ${response.statusCode}'; + } + } catch (e) { + return 'Error: $e'; + } + } + Future setDefaultAddress(String addressId) async { + String url = 'https://www.mv.frontshopemporium.in/xam/user/addresses/${addressId}/set-default'; + + try { + final response = await http.put(Uri.parse(url), headers: { + "Content-Type": "application/json", + "authorization": "Bearer ${await SharedPrefUtils.getToken()}" + }); + + print('address response'); + print(response.statusCode); + print(response.body); + if (response.statusCode == 200) { + + /* final Map data = json.decode(response.body); + print(data); + final List nonDeliverableProducts = data['nonDeliverableProducts'] ?? []; + if (nonDeliverableProducts.isNotEmpty) { + final String reason = nonDeliverableProducts[0]['reason']; + return reason; + } else { + return 'No non-deliverable products found'; + }*/ + } else { + return 'Failed with status: ${response.statusCode}'; + } + } catch (e) { + return 'Error: $e'; + } + } @override Widget build(BuildContext context) { return Padding( @@ -1186,8 +1252,8 @@ class _AddressBottomSheetState extends State { Consumer( builder: (context, paymentProvider, child) { return ElevatedButton.icon( - onPressed: () { - if (paymentProvider.selectedAddress.isNotEmpty) { + onPressed: () async{ + /* if (paymentProvider.selectedAddress.isNotEmpty) { if (paymentProvider.isDeliverable) { Navigator.pop(context); Navigator.of(context).push(MaterialPageRoute( @@ -1200,7 +1266,7 @@ class _AddressBottomSheetState extends State { // name: paymentProvider.selecteUserName, // phone: paymentProvider.selecteUserPhone, // email: paymentProvider.selecteEmail, - // userId: paymentProvider.allitem.userId!, + userId: paymentProvider.allitem.userId!, cartId: paymentProvider.allitem.id!, addressId: paymentProvider.selectedAddress, // remarks: paymentProvider.selecteUserName, @@ -1229,17 +1295,97 @@ class _AddressBottomSheetState extends State { textColor: Colors.white, fontSize: 14.0, ); + }*/ + + // Call your API and get the message + String? message = await fetchDeliveryMessage(); // Use the function from earlier + + if (message != null && message.isNotEmpty) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text("Alert"), + content: Text(message), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); // Close the dialog + }, + child: Text("OK"), + ), + ], + ); + }, + ); + } else { + Navigator.pop(context); + Navigator.of(context).push(MaterialPageRoute( + builder: (context) { + return CardCheckoutScreen( + deliveryCharge: paymentProvider.getdeliverycharge, + originalAmount: paymentProvider.grandPrice, + userId: paymentProvider.allitem.userId!, + cartId: paymentProvider.allitem.id!, + addressId: paymentProvider.selectedAddress, + couponId: paymentProvider.couponId, + ); + }, + )); } + + }, + /* + + // Call your API and get the message + await paymentProvider.paymentCODOrder( + context, + paymentProvider.grandPrice, + paymentProvider.getdeliverycharge, + paymentProvider.couponId ?? "", + paymentProvider.selectedAddress, + ); + + */ + /* if (message != null && message.isNotEmpty) { + Fluttertoast.showToast( + msg: message, + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + backgroundColor: Colors.red, + textColor: Colors.white, + fontSize: 14.0, + ); + } else {*/ + /* + Navigator.pop(context); + Navigator.of(context).push(MaterialPageRoute( + builder: (context) { + return CardCheckoutScreen( + deliveryCharge: paymentProvider.getdeliverycharge, + originalAmount: paymentProvider.grandPrice, + userId: paymentProvider.allitem.userId!, + cartId: paymentProvider.allitem.id!, + addressId: paymentProvider.selectedAddress, + couponId: paymentProvider.couponId, + ); + }, + )); + // } + + + },*/ label: Text( "Continue", style: TextStyle(color: Colors.white, fontSize: 16), ), style: ElevatedButton.styleFrom( - backgroundColor: paymentProvider.isDeliverable + backgroundColor:Colors.green, + /*backgroundColor: paymentProvider.isDeliverable ? Colors.green : Colors.grey, - minimumSize: Size(double.infinity, 50), + */minimumSize: Size(double.infinity, 50), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10)), ), @@ -1278,12 +1424,13 @@ class _AddressBottomSheetState extends State { activeColor: Colors.green, onChanged: (value) { addressProvider.checkAddress(context, value); - + setDefaultAddress(address.id); addressProvider.selectAddress( value.toString(), address.phoneNumber, address.name, address.user!.email); + }, ), title: Text( diff --git a/lib/src/ui/myOrder/my_order.dart b/lib/src/ui/myOrder/my_order.dart index e0b3f43..4f48fa7 100644 --- a/lib/src/ui/myOrder/my_order.dart +++ b/lib/src/ui/myOrder/my_order.dart @@ -59,7 +59,7 @@ class _MyOrderScreenState extends State { width: 20, child: InkWell( onTap: () { - context.clearAndPush(routePath: MyRoutes.BOTTOMNAV); + context.clearAndPush(routePath: MyRoutes.HOME); }, child: SvgPicture.asset( APPASSETS.back, diff --git a/lib/src/ui/payment/phonepe_payment.dart b/lib/src/ui/payment/phonepe_payment.dart new file mode 100644 index 0000000..c2a31a5 --- /dev/null +++ b/lib/src/ui/payment/phonepe_payment.dart @@ -0,0 +1,271 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:http/http.dart' as http; +import 'package:phonepe_payment_sdk/phonepe_payment_sdk.dart'; +import 'package:uuid/uuid.dart'; +import 'dart:convert'; +import 'dart:async'; +import 'package:app_links/app_links.dart'; +import '../../../utils/constants/shared_pref_utils.dart'; +import '../../core/routes/routes.dart'; +import '../myOrder/my_order.dart'; +class PhonePePaymentScreen extends StatefulWidget { + final double amount; + final String cartId; + final String addressId; + final String userId; + + const PhonePePaymentScreen({ + required this.amount, + required this.cartId, + required this.addressId, + required this.userId, + super.key, + }); + + @override + State createState() => _PhonePePaymentScreenState(); +} + +class _PhonePePaymentScreenState extends State { + String _statusMessage = "Initiating payment..."; + bool _isLoading = true; + + final AppLinks _appLinks = AppLinks(); + StreamSubscription? _linkSub; + + @override + void initState() { + super.initState(); + _listenForRedirect(); + _initiateAndStartPayment(); + } + + @override + void dispose() { + _linkSub?.cancel(); + super.dispose(); + } + + void _listenForRedirect() { + print("Listening for redirect..."); + _linkSub = _appLinks.uriLinkStream.listen((Uri uri) { + print("Deep link received: $uri"); + final transactionId = uri.queryParameters['transactionId']; + final status = uri.queryParameters['status']; + + if (transactionId != null && status == "SUCCESS") { + //_verifyPayment(transactionId); + } else if (status == "CANCEL") { + setState(() { + _statusMessage = "Payment cancelled by user."; + _isLoading = false; + }); + Navigator.pop(context, false); // 👈 Return failure + } else { + setState(() { + _statusMessage = "Payment failed or unknown status."; + _isLoading = false; + }); + Navigator.pop(context, false); // 👈 Return failure + } + }, onError: (err) { + print("Deep link error: $err"); + setState(() { + _statusMessage = "Error handling redirect: $err"; + _isLoading = false; + }); + Navigator.pop(context, false); // 👈 Return failure + }); + } + + Future _initiateAndStartPayment() async { + try { + final uri = Uri.parse("https://www.mv.frontshopemporium.in/xam/payment/phonepe/sdk/initiate"); + + print("Calling backend initiate API..."); + final response = await http.post( + uri, + headers: { + "Content-Type": "application/json", + "authorization": "Bearer ${await SharedPrefUtils.getToken()}", + }, + body: jsonEncode({ + "amount": widget.amount, + "cartId": widget.cartId, + "addressId": widget.addressId, + }), + ); + + print("Response code: ${response.statusCode}"); + print("Response body: ${response.body}"); + + if (response.statusCode != 200 && response.statusCode != 201) { + setState(() { + _statusMessage = "Failed to initiate payment."; + _isLoading = false; + }); + return; + } + + final data = jsonDecode(response.body); + final String? orderId = data['orderId']; + final String? merchantId = data['merchantId']; + final String? token = data['token']; + + const String environment = "PRODUCTION"; + const String appSchema = "frontshop"; + final String flowId = 'FLWID_${Uuid().v4()}'; + + if (orderId == null || merchantId == null || token == null) { + print("Invalid response from backend. Missing fields."); + setState(() { + _statusMessage = "Invalid response from backend."; + _isLoading = false; + }); + return; + } + + print("Initializing SDK..."); + + PhonePePaymentSdk.init(environment, merchantId, flowId, true); + + final payload = { + "orderId": orderId, + "merchantId": merchantId, + "token": token, + "paymentMode": {"type": "PAY_PAGE"}, + }; + String request = jsonEncode(payload); + + print("Starting transaction with payload: $request"); + + final result = await PhonePePaymentSdk.startTransaction(request, appSchema); + print("Transaction result: $result"); + + if (result != null) { + final status = result['status']?.toString() ?? ''; + final error = result['error']?.toString() ?? ''; + + if (status == 'SUCCESS') { + final txnId = data['merchantOrderId']?? ''; + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("Payment Successful!")), + ); + _verifyPayment(txnId); + context.push(MyRoutes.MYORDER); + } else if (status == 'CANCELLED') { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("Payment Cancelled by User")), + ); + setState(() { + _statusMessage = "Payment cancelled."; + _isLoading = false; + }); + Navigator.pop(context, false); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("Payment Failed: $error")), + ); + setState(() { + _statusMessage = "Payment failed."; + _isLoading = false; + }); + Navigator.pop(context, false); + } + } else { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("No response from PhonePe")), + ); + setState(() { + _statusMessage = "No response."; + _isLoading = false; + }); + Navigator.pop(context, false); + } + + } catch (e) { + print("Error during payment: $e"); + setState(() { + _statusMessage = "Error: ${e.toString()}"; + _isLoading = false; + }); + Navigator.pop(context, false); // 👈 Exit with failure + } + } + + Future _verifyPayment(String transactionId) async { + try { + + + + final verifyUri = Uri.parse( + "https://mv.frontshopemporium.in/xam/payment/phonepe/sdk/status/$transactionId", + ); + + final response = await http.get( + verifyUri, + headers: { + "Content-Type": "application/json", + "authorization": "Bearer ${await SharedPrefUtils.getToken()}", + }, + ); + + print("Status check response: ${response.body}"); + + if (response.statusCode == 200) { + final statusData = jsonDecode(response.body); + final paymentStatus = statusData['status']; + + if (paymentStatus == "SUCCESS") { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("Order Placed Successfully")), + ); + Navigator.pushAndRemoveUntil( + context, + MaterialPageRoute(builder: (_) => MyOrderScreen()), + (route) => false, + ); + + } + + else { + setState(() { + _statusMessage = "Payment verification failed: $paymentStatus"; + _isLoading = false; + }); + Navigator.pop(context, false); // ❌ Return failure + } + } else { + setState(() { + _statusMessage = "Failed to verify payment."; + _isLoading = false; + }); + Navigator.pop(context, false); + } + } catch (e) { + print("Verification error: $e"); + setState(() { + _statusMessage = "Verification error: ${e.toString()}"; + _isLoading = false; + }); + Navigator.pop(context, false); // ❌ Return failure + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text("PhonePe Payment")), + body: Center( + child: _isLoading + ? const CircularProgressIndicator() + : Text( + _statusMessage, + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 16), + ), + ), + ); + } +} diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 7299b5c..e12c657 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -7,12 +7,16 @@ #include "generated_plugin_registrant.h" #include +#include #include void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); file_selector_plugin_register_with_registrar(file_selector_linux_registrar); + g_autoptr(FlPluginRegistrar) gtk_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "GtkPlugin"); + gtk_plugin_register_with_registrar(gtk_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 786ff5c..4453582 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST file_selector_linux + gtk url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 94d3065..7b46b19 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,7 @@ import FlutterMacOS import Foundation +import app_links import connectivity_plus import file_selector_macos import firebase_core @@ -15,10 +16,11 @@ import geolocator_apple import package_info_plus import path_provider_foundation import shared_preferences_foundation -import sqflite +import sqflite_darwin import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin")) ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) diff --git a/pubspec.lock b/pubspec.lock index c982a3c..1c50acd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: de9ecbb3ddafd446095f7e833c853aff2fa1682b017921fe63a833f9d6f0e422 + sha256: "50e24b769bd1e725732f0aff18b806b8731c1fbcf4e8018ab98e7c4805a2a52f" url: "https://pub.dev" source: hosted - version: "1.3.54" + version: "1.3.57" animation_list: dependency: "direct main" description: @@ -25,14 +25,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.11" + app_links: + dependency: "direct main" + description: + name: app_links + sha256: "3ced568a5d9e309e99af71285666f1f3117bddd0bd5b3317979dccc1a40cada4" + url: "https://pub.dev" + source: hosted + version: "3.5.1" args: dependency: transitive description: name: args - sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.7.0" art_sweetalert: dependency: "direct main" description: @@ -45,10 +53,10 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.12.0" back_button_interceptor: dependency: transitive description: @@ -61,50 +69,50 @@ packages: dependency: "direct main" description: name: blur - sha256: c17450404bceea429100e0838d19bbfaa6ad1f3053e7bac78a0264bbd60cfe01 + sha256: "1318cf79c735784eda8dffc77b1085b757373d233c1c8d94dc0cfd81530a3574" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.2" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" cached_network_image: dependency: "direct main" description: name: cached_network_image - sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" + sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.1" cached_network_image_platform_interface: dependency: transitive description: name: cached_network_image_platform_interface - sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" + sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.1.1" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - sha256: "205d6a9f1862de34b93184f22b9d2d94586b2f05c581d546695e3d8f6a805cd7" + sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.1" carousel_slider: dependency: "direct main" description: name: carousel_slider - sha256: "7b006ec356205054af5beaef62e2221160ea36b90fb70a35e4deacd49d0349ae" + sha256: bcc61735345c9ab5cb81073896579e735f81e35fd588907a393143ea986be8ff url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.1.1" change_app_package_name: dependency: "direct main" description: @@ -117,34 +125,34 @@ packages: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" collection: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.1" connectivity_plus: dependency: "direct main" description: name: connectivity_plus - sha256: "04bf81bb0b77de31557b58d052b24b3eee33f09a6e7a8c68a3e247c7df19ec27" + sha256: "051849e2bd7c7b3bc5844ea0d096609ddc3a859890ec3a9ac4a65a2620cc1f99" url: "https://pub.dev" source: hosted - version: "6.1.3" + version: "6.1.4" connectivity_plus_platform_interface: dependency: transitive description: @@ -205,18 +213,18 @@ packages: dependency: transitive description: name: dio_web_adapter - sha256: e485c7a39ff2b384fa1d7e09b4e25f755804de8384358049124830b04fc4f93a + sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" dots_indicator: dependency: "direct main" description: name: dots_indicator - sha256: "58b6a365744aa62aa1b70c4ea29e5106fbe064f5edaf7e9652e9b856edbfd9bb" + sha256: "2a53e0321a3f0d87e38ef30f6e9ff1deb5d6c0e2c5708e057d26cdaa94a95f10" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.1.0" dotted_border: dependency: "direct main" description: @@ -225,22 +233,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + eventify: + dependency: transitive + description: + name: eventify + sha256: b829429f08586cc2001c628e7499e3e3c2493a1d895fd73b00ecb23351aa5a66 + url: "https://pub.dev" + source: hosted + version: "1.0.1" fake_async: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" ffi: dependency: transitive description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" file: dependency: transitive description: @@ -261,10 +277,10 @@ packages: dependency: transitive description: name: file_selector_macos - sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + sha256: "8c9250b2bd2d8d4268e39c82543bacbaca0fda7d29e0728c3c4bbb7c820fd711" url: "https://pub.dev" source: hosted - version: "0.9.4+2" + version: "0.9.4+3" file_selector_platform_interface: dependency: transitive description: @@ -277,58 +293,58 @@ packages: dependency: transitive description: name: file_selector_windows - sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" + sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" url: "https://pub.dev" source: hosted - version: "0.9.3+3" + version: "0.9.3+4" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "017d17d9915670e6117497e640b2859e0b868026ea36bf3a57feb28c3b97debe" + sha256: "5bba5924139e91d26446fd2601c18a6aa62c1161c768a989bb5e245dcdc20644" url: "https://pub.dev" source: hosted - version: "3.13.0" + version: "3.15.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: d7253d255ff10f85cfd2adaba9ac17bae878fa3ba577462451163bd9f1d1f0bf + sha256: "5d2ab45779d91af2aa0252dec9fe4ee1caa015d83377de255454dcaa1526a0e0" url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "5.4.1" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: "129a34d1e0fb62e2b488d988a1fc26cc15636357e50944ffee2862efe8929b23" + sha256: eb3afccfc452b2b2075acbe0c4b27de62dd596802b4e5e19869c1e926cbb20b3 url: "https://pub.dev" source: hosted - version: "2.22.0" + version: "2.24.0" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: "5f8918848ee0c8eb172fc7698619b2bcd7dda9ade8b93522c6297dd8f9178356" + sha256: c6711cf2f455532b84a94022c7aaf85088849763af2f01b775ca79d82d10a01a url: "https://pub.dev" source: hosted - version: "15.2.5" + version: "15.2.8" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: "0bbea00680249595fc896e7313a2bd90bd55be6e0abbe8b9a39d81b6b306acb6" + sha256: "1c9dacccb1aee1bf17ba519dda5563a16fdd2ec1e79b5f2e421cb4bf75a166f7" url: "https://pub.dev" source: hosted - version: "4.6.5" + version: "4.6.8" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: ffb392ce2a7e8439cd0a9a80e3c702194e73c927e5c7b4f0adf6faa00b245b17 + sha256: "54317c26fa92f0d90a2017977ac791cb0504eca29fcf397f06adf727d4a7a2d5" url: "https://pub.dev" source: hosted - version: "3.10.5" + version: "3.10.8" fixnum: dependency: transitive description: @@ -354,34 +370,26 @@ packages: dependency: transitive description: name: flutter_cache_manager - sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" + sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" url: "https://pub.dev" source: hosted - version: "3.3.1" - flutter_google_places: - dependency: "direct main" - description: - name: flutter_google_places - sha256: e9fb23ceacdc7359aa759627550146f7fd3ae6c067d16f39f3c50d8feebf4809 - url: "https://pub.dev" - source: hosted - version: "0.3.0" + version: "3.4.1" flutter_inappwebview: dependency: "direct main" description: name: flutter_inappwebview - sha256: "3e9a443a18ecef966fb930c3a76ca5ab6a7aafc0c7b5e14a4a850cf107b09959" + sha256: "80092d13d3e29b6227e25b67973c67c7210bd5e35c4b747ca908e31eb71a46d5" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.1.5" flutter_inappwebview_android: dependency: transitive description: name: flutter_inappwebview_android - sha256: d247f6ed417f1f8c364612fa05a2ecba7f775c8d0c044c1d3b9ee33a6515c421 + sha256: "62557c15a5c2db5d195cb3892aab74fcaec266d7b86d59a6f0027abd672cddba" url: "https://pub.dev" source: hosted - version: "1.0.13" + version: "1.1.3" flutter_inappwebview_internal_annotations: dependency: transitive description: @@ -394,34 +402,42 @@ packages: dependency: transitive description: name: flutter_inappwebview_ios - sha256: f363577208b97b10b319cd0c428555cd8493e88b468019a8c5635a0e4312bd0f + sha256: "5818cf9b26cf0cbb0f62ff50772217d41ea8d3d9cc00279c45f8aabaa1b4025d" url: "https://pub.dev" source: hosted - version: "1.0.13" + version: "1.1.2" flutter_inappwebview_macos: dependency: transitive description: name: flutter_inappwebview_macos - sha256: b55b9e506c549ce88e26580351d2c71d54f4825901666bd6cfa4be9415bb2636 + sha256: c1fbb86af1a3738e3541364d7d1866315ffb0468a1a77e34198c9be571287da1 url: "https://pub.dev" source: hosted - version: "1.0.11" + version: "1.1.2" flutter_inappwebview_platform_interface: dependency: transitive description: name: flutter_inappwebview_platform_interface - sha256: "545fd4c25a07d2775f7d5af05a979b2cac4fbf79393b0a7f5d33ba39ba4f6187" + sha256: cf5323e194096b6ede7a1ca808c3e0a078e4b33cc3f6338977d75b4024ba2500 url: "https://pub.dev" source: hosted - version: "1.0.10" + version: "1.3.0+1" flutter_inappwebview_web: dependency: transitive description: name: flutter_inappwebview_web - sha256: d8c680abfb6fec71609a700199635d38a744df0febd5544c5a020bd73de8ee07 + sha256: "55f89c83b0a0d3b7893306b3bb545ba4770a4df018204917148ebb42dc14a598" url: "https://pub.dev" source: hosted - version: "1.0.8" + version: "1.1.2" + flutter_inappwebview_windows: + dependency: transitive + description: + name: flutter_inappwebview_windows + sha256: "8b4d3a46078a2cdc636c4a3d10d10f2a16882f6be607962dbfff8874d1642055" + url: "https://pub.dev" + source: hosted + version: "0.6.0" flutter_lints: dependency: "direct dev" description: @@ -458,10 +474,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" + sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e url: "https://pub.dev" source: hosted - version: "2.0.22" + version: "2.0.28" flutter_rating_bar: dependency: "direct main" description: @@ -498,10 +514,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: cd57f7969b4679317c17af6fd16ee233c1e60a82ed209d8a475c54fd6fd6f845 url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.2.0" flutter_test: dependency: "direct dev" description: flutter @@ -524,10 +540,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "8971efe7e59585e9149052e33718d84bca51e806f063d1467622b3dcb2878b6c" + sha256: "25e51620424d92d3db3832464774a6143b5053f15e382d8ffbfd40b6e795dcf1" url: "https://pub.dev" source: hosted - version: "8.2.11" + version: "8.2.12" fpdart: dependency: "direct main" description: @@ -548,26 +564,26 @@ packages: dependency: "direct main" description: name: geocoding - sha256: d580c801cba9386b4fac5047c4c785a4e19554f46be42f4f5e5b7deacd088a66 + sha256: "606be036287842d779d7ec4e2f6c9435fc29bbbd3c6da6589710f981d8852895" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" geocoding_android: dependency: transitive description: name: geocoding_android - sha256: "1b13eca79b11c497c434678fed109c2be020b158cec7512c848c102bc7232603" + sha256: ba810da90d6633cbb82bbab630e5b4a3b7d23503263c00ae7f1ef0316dcae5b9 url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "4.0.1" geocoding_ios: dependency: transitive description: name: geocoding_ios - sha256: "94ddba60387501bd1c11e18dca7c5a9e8c645d6e3da9c38b9762434941870c24" + sha256: "43bde988312feb1a3cb6c3d514e9f4b04b564d1884fa56bd8241030bbb3bde36" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" geocoding_platform_interface: dependency: transitive description: @@ -580,50 +596,50 @@ packages: dependency: "direct main" description: name: geolocator - sha256: d2ec66329cab29cb297d51d96c067d457ca519dca8589665fa0b82ebacb7dbe4 + sha256: ee2212a3df8292ec4c90b91183b8001d3f5a800823c974b570c5f9344ca320dc url: "https://pub.dev" source: hosted - version: "13.0.2" + version: "14.0.1" geolocator_android: dependency: transitive description: name: geolocator_android - sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + sha256: "179c3cb66dfa674fc9ccbf2be872a02658724d1c067634e2c427cf6df7df901a" url: "https://pub.dev" source: hosted - version: "4.6.1" + version: "5.0.2" geolocator_apple: dependency: transitive description: name: geolocator_apple - sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + sha256: dbdd8789d5aaf14cf69f74d4925ad1336b4433a6efdf2fce91e8955dc921bf22 url: "https://pub.dev" source: hosted - version: "2.3.8+1" + version: "2.3.13" geolocator_platform_interface: dependency: transitive description: name: geolocator_platform_interface - sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + sha256: "30cb64f0b9adcc0fb36f628b4ebf4f731a2961a0ebd849f4b56200205056fe67" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "4.2.6" geolocator_web: dependency: transitive description: name: geolocator_web - sha256: "2ed69328e05cd94e7eb48bb0535f5fc0c0c44d1c4fa1e9737267484d05c29b5e" + sha256: b1ae9bdfd90f861fde8fd4f209c37b953d65e92823cb73c7dee1fa021b06f172 url: "https://pub.dev" source: hosted - version: "4.1.1" + version: "4.1.3" geolocator_windows: dependency: transitive description: name: geolocator_windows - sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + sha256: "175435404d20278ffd220de83c2ca293b73db95eafbdc8131fe8609be1421eb6" url: "https://pub.dev" source: hosted - version: "0.2.3" + version: "0.2.5" get_it: dependency: "direct main" description: @@ -636,26 +652,26 @@ packages: dependency: "direct main" description: name: go_router - sha256: "04539267a740931c6d4479a10d466717ca5901c6fdfd3fcda09391bbb8ebd651" + sha256: f02fd7d2a4dc512fec615529824fdd217fecb3a3d3de68360293a551f21634b3 url: "https://pub.dev" source: hosted - version: "14.8.0" + version: "14.8.1" google_api_headers: dependency: "direct main" description: name: google_api_headers - sha256: b27a55935d5c51cedda8a925f5df8388cc327c94a47fef5a4335e8707e089878 + sha256: "16c26ed3f65e59282b060f5c9eff29c603cb21acde96a5272ad430bccb1ce21a" url: "https://pub.dev" source: hosted - version: "1.6.0" + version: "4.4.2" google_fonts: dependency: "direct main" description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "6.2.1" google_maps: dependency: transitive description: @@ -668,74 +684,82 @@ packages: dependency: "direct main" description: name: google_maps_flutter - sha256: "209856c8e5571626afba7182cf634b2910069dc567954e76ec3e3fb37f5e9db3" + sha256: e1805e5a5885bd14a1c407c59229f478af169bf4d04388586b19f53145a5db3a url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.12.3" google_maps_flutter_android: dependency: transitive description: name: google_maps_flutter_android - sha256: "10cf27bee8c560f8e69992b3a0f27ddf1d7acbea622ddb13ef3f587848a73f26" + sha256: "356ee9c65f38a104f7c4988e6952e52addb3b6cb1601839dd2010d7a502afcf0" url: "https://pub.dev" source: hosted - version: "2.14.7" + version: "2.16.2" google_maps_flutter_ios: dependency: transitive description: name: google_maps_flutter_ios - sha256: "6f798adb0aa1db5adf551f2e39e24bd06c8c0fbe4de912fb2d9b5b3f48147b02" + sha256: d03678415da9de8ce7208c674b264fc75946f326e696b4b7f84c80920fc58df6 url: "https://pub.dev" source: hosted - version: "2.13.2" + version: "2.15.4" google_maps_flutter_platform_interface: dependency: transitive description: name: google_maps_flutter_platform_interface - sha256: "72957351f91656128d8f1090ce9e624486a8a7dada21e615ebc9af9fadffdedd" + sha256: f8293f072ed8b068b092920a72da6693aa8b3d62dc6b5c5f0bc44c969a8a776c url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.12.1" google_maps_flutter_web: dependency: transitive description: name: google_maps_flutter_web - sha256: ff39211bd25d7fad125d19f757eba85bd154460907cd4d135e07e3d0f98a4130 + sha256: ce2cac714e5462bf761ff2fdfc3564c7e5d7ed0578268dccb0a54dbdb1e6214e url: "https://pub.dev" source: hosted - version: "0.5.10" - google_maps_webservice: + version: "0.5.12+2" + google_places_flutter: + dependency: "direct main" + description: + name: google_places_flutter + sha256: "5048f8c3e97dcb8ecfbf478bc336fefd8c4f9b903bfabcd3839c4b17eb8724eb" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + gtk: dependency: transitive description: - name: google_maps_webservice - sha256: d0ae4e4508afd74a3f051565261a3cdbae59db29448f9b6e6beb5674545e1eb7 + name: gtk + sha256: e8ce9ca4b1df106e4d72dad201d345ea1a036cc12c360f1a7d5a758f78ffa42c url: "https://pub.dev" source: hosted - version: "0.0.20-nullsafety.5" + version: "2.1.0" html: dependency: transitive description: name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" url: "https://pub.dev" source: hosted - version: "0.15.5" + version: "0.15.6" http: - dependency: transitive + dependency: "direct main" description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.4.0" http_parser: dependency: transitive description: name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.1.2" image_picker: dependency: "direct main" description: @@ -748,10 +772,10 @@ packages: dependency: transitive description: name: image_picker_android - sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + sha256: "317a5d961cec5b34e777b9252393f2afbd23084aa6e60fcf601dcf6341b9ebeb" url: "https://pub.dev" source: hosted - version: "0.8.12+12" + version: "0.8.12+23" image_picker_for_web: dependency: transitive description: @@ -772,10 +796,10 @@ packages: dependency: transitive description: name: image_picker_linux - sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + sha256: "34a65f6740df08bbbeb0a1abd8e6d32107941fd4868f67a507b25601651022c9" url: "https://pub.dev" source: hosted - version: "0.2.1+1" + version: "0.2.1+2" image_picker_macos: dependency: transitive description: @@ -808,38 +832,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.20.2" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.8" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: @@ -876,18 +884,18 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" material_design_icons_flutter: dependency: "direct main" description: @@ -900,10 +908,10 @@ packages: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.16.0" mime: dependency: transitive description: @@ -948,26 +956,26 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" + sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "8.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.2.0" path: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_drawing: dependency: transitive description: @@ -996,10 +1004,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" + sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 url: "https://pub.dev" source: hosted - version: "2.2.10" + version: "2.2.17" path_provider_foundation: dependency: transitive description: @@ -1036,18 +1044,18 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" + sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849" url: "https://pub.dev" source: hosted - version: "11.3.1" + version: "11.4.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" + sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc url: "https://pub.dev" source: hosted - version: "12.0.13" + version: "12.1.0" permission_handler_apple: dependency: transitive description: @@ -1068,10 +1076,10 @@ packages: dependency: transitive description: name: permission_handler_platform_interface - sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 + sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878 url: "https://pub.dev" source: hosted - version: "4.2.3" + version: "4.3.0" permission_handler_windows: dependency: transitive description: @@ -1084,10 +1092,18 @@ packages: dependency: transitive description: name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "6.1.0" + phonepe_payment_sdk: + dependency: "direct main" + description: + name: phonepe_payment_sdk + sha256: "33f541e788e41173ce853752d60e94635543f47a82d1e6dfbe2512cff4f3b666" + url: "https://pub.dev" + source: hosted + version: "3.0.0" platform: dependency: transitive description: @@ -1116,10 +1132,18 @@ packages: dependency: "direct main" description: name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.5" + razorpay_flutter: + dependency: "direct main" + description: + name: razorpay_flutter + sha256: "7d86b2a2ba2c3a71366bbfb65664236ba4b12fd6aeaed4c13dfc5c998786b2d6" + url: "https://pub.dev" + source: hosted + version: "1.4.0" readmore: dependency: "direct main" description: @@ -1132,10 +1156,10 @@ packages: dependency: transitive description: name: rxdart - sha256: "2ef8b4e91cb3b55d155e0e34eeae0ac7107974e451495c955ac04ddee8cc21fd" + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" url: "https://pub.dev" source: hosted - version: "0.26.0" + version: "0.27.7" sanitize_html: dependency: transitive description: @@ -1148,18 +1172,18 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "95f9997ca1fb9799d494d0cb2a780fd7be075818d59f00c43832ed112b158a82" + sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.5.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e" + sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.10" shared_preferences_foundation: dependency: transitive description: @@ -1188,10 +1212,10 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.3" shared_preferences_windows: dependency: transitive description: @@ -1220,15 +1244,15 @@ packages: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" source_span: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" sprintf: dependency: transitive description: @@ -1241,34 +1265,58 @@ packages: dependency: transitive description: name: sqflite - sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d + sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03 url: "https://pub.dev" source: hosted - version: "2.3.3+1" + version: "2.4.2" + sqflite_android: + dependency: transitive + description: + name: sqflite_android + sha256: "2b3070c5fa881839f8b402ee4a39c1b4d561704d4ebbbcfb808a119bc2a1701b" + url: "https://pub.dev" + source: hosted + version: "2.4.1" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4" + sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b" url: "https://pub.dev" source: hosted - version: "2.5.4" + version: "2.5.5" + sqflite_darwin: + dependency: transitive + description: + name: sqflite_darwin + sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + sqflite_platform_interface: + dependency: transitive + description: + name: sqflite_platform_interface + sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" + url: "https://pub.dev" + source: hosted + version: "2.4.0" stack_trace: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" stream_transform: dependency: transitive description: @@ -1281,50 +1329,50 @@ packages: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.4.1" synchronized: dependency: transitive description: name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + sha256: "0669c70faae6270521ee4f05bffd2919892d42d1276e6c495be80174b6bc0ef6" url: "https://pub.dev" source: hosted - version: "3.1.0+1" + version: "3.3.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.7.4" timezone: dependency: transitive description: name: timezone - sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" + sha256: dd14a3b83cfd7cb19e7888f1cbc20f258b8d71b54c06f79ac585f14093a287d1 url: "https://pub.dev" source: hosted - version: "0.9.4" + version: "0.10.1" typed_data: dependency: transitive description: name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" url_launcher: dependency: "direct main" description: @@ -1337,18 +1385,18 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" url: "https://pub.dev" source: hosted - version: "6.3.9" + version: "6.3.16" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.3.3" url_launcher_linux: dependency: transitive description: @@ -1377,10 +1425,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.4.1" url_launcher_windows: dependency: transitive description: @@ -1390,7 +1438,7 @@ packages: source: hosted version: "3.1.4" uuid: - dependency: transitive + dependency: "direct main" description: name: uuid sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff @@ -1401,26 +1449,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6 url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.19" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.13" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "557a315b7d2a6dbb0aaaff84d857967ce6bdc96a63dc6ee2a57ce5a6ee5d3331" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.17" vector_math: dependency: transitive description: @@ -1433,26 +1481,26 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "14.3.1" web: dependency: transitive description: name: web - sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" win32: dependency: transitive description: name: win32 - sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" + sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba" url: "https://pub.dev" source: hosted - version: "5.5.4" + version: "5.13.0" xdg_directories: dependency: transitive description: @@ -1470,5 +1518,5 @@ packages: source: hosted version: "6.5.0" sdks: - dart: ">=3.4.0 <4.0.0" - flutter: ">=3.22.0" + dart: ">=3.7.0 <4.0.0" + flutter: ">=3.29.1" diff --git a/pubspec.yaml b/pubspec.yaml index f26fb6a..762f1da 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: grocery_app description: "CustomerApp" publish_to: 'none' -version: 1.0.0+1 +version: 1.0.3+25 environment: sdk: '>=3.4.0 <4.0.0' @@ -24,20 +24,25 @@ dependencies: flutter_toggle_tab: ^1.4.1 dotted_border: ^2.1.0 go_router: ^14.2.0 + uuid: ^4.0.0 + phonepe_payment_sdk: ^3.0.0 google_maps_flutter: geolocator: - geocoding: - flutter_google_places: - google_api_headers: + geocoding: + app_links: ^3.0.0 + google_places_flutter: ^2.1.0 + google_api_headers: ^4.4.1 fluttertoast: flutter_rating_stars: ^1.1.0 url_launcher: ^6.3.1 skeletonizer: ^1.4.3 art_sweetalert: ^0.0.5 + + blur: flutter_rating_bar: change_app_package_name: ^1.5.0 - permission_handler: ^11.3.1 + permission_handler: ^11.3.1 flutter_local_notifications: ^18.0.1 firebase_core: firebase_messaging: @@ -75,6 +80,10 @@ dependencies: image_picker: any shimmer: ^3.0.0 flutter_inappwebview: ^6.0.0 + razorpay_flutter: ^1.3.7 + http: ^1.1.0 + + dev_dependencies: diff --git a/test/widget_test.dart b/test/widget_test.dart deleted file mode 100644 index a8930cc..0000000 --- a/test/widget_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility in the flutter_test package. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:grocery_app/main.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(const MyApplication()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -} diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 41223e8..90f6e17 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,20 +6,26 @@ #include "generated_plugin_registrant.h" +#include #include #include #include +#include #include #include #include void RegisterPlugins(flutter::PluginRegistry* registry) { + AppLinksPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("AppLinksPluginCApi")); ConnectivityPlusWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); FileSelectorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("FileSelectorWindows")); FirebaseCorePluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); + FlutterInappwebviewWindowsPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FlutterInappwebviewWindowsPluginCApi")); GeolocatorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("GeolocatorWindows")); PermissionHandlerWindowsPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 41960ae..08ab0ba 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,9 +3,11 @@ # list(APPEND FLUTTER_PLUGIN_LIST + app_links connectivity_plus file_selector_windows firebase_core + flutter_inappwebview_windows geolocator_windows permission_handler_windows url_launcher_windows