From a3db70ffc644e88db3eaa9b53e8f0e4dbc211600 Mon Sep 17 00:00:00 2001 From: "sridhar.r" Date: Wed, 10 Jun 2026 17:43:21 +0530 Subject: [PATCH] feat: add sound and haptic feedback throughout onboarding and setup flow --- flutter_app/assets/sounds/click.mp3 | Bin 0 -> 2688 bytes flutter_app/assets/sounds/error.mp3 | Bin 0 -> 28800 bytes flutter_app/assets/sounds/select.mp3 | Bin 0 -> 5760 bytes flutter_app/assets/sounds/success.mp3 | Bin 0 -> 98497 bytes flutter_app/ios/Runner/Info.plist | 8 + flutter_app/lib/feedback_helper.dart | 79 ++++ flutter_app/lib/route_transitions.dart | 5 +- .../lib/screens/billing_dashboard_screen.dart | 10 +- .../lib/screens/business_setup_screen.dart | 293 +++++++++++-- .../lib/screens/customize_setup_screen.dart | 17 +- .../lib/screens/mobile_login_screen.dart | 52 ++- .../lib/screens/otp_verification_screen.dart | 52 ++- .../lib/screens/setup_complete_screen.dart | 5 + flutter_app/lib/screens/welcome_screen.dart | 33 +- flutter_app/pubspec.lock | 384 +++++++++++++++++- flutter_app/pubspec.yaml | 12 +- 16 files changed, 882 insertions(+), 68 deletions(-) create mode 100644 flutter_app/assets/sounds/click.mp3 create mode 100644 flutter_app/assets/sounds/error.mp3 create mode 100644 flutter_app/assets/sounds/select.mp3 create mode 100644 flutter_app/assets/sounds/success.mp3 create mode 100644 flutter_app/lib/feedback_helper.dart diff --git a/flutter_app/assets/sounds/click.mp3 b/flutter_app/assets/sounds/click.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..44b2df6739300c59657b668d9775dd066680ba9d GIT binary patch literal 2688 zcmdUxdo+~Y9>*WkVBV2tMjFGRhM5W{LI_Q7Gh>uX?z{*matRfgacM-x+r(tta_5y% zIE_)cbfPHKp$NI<_I9D7DHMsAgV|?vR{!|t{QZ8`+G{`0diMJ6y*~R{`?tYLHXQmt zScL|LNrs>#O$LIHEJ%9;t{Y)(K(LX)jereE<}y7>v9;KzYidfD68v1DB8vzwOoSlT z`Z`dN`#OGp_^bBdhkux{gUx3+8L~-MK2ySh0} z=z2;lOS%a3vcpz+MYCbwcoJ)$)DeuUVk(-gzFQ)J5Z239$BjeqGj?=z>V)YVDkOuT z%mLsYN9@mvdTRk8<{_!nIVnd0gV)R6{hR@wp9jy^?OP$ti-a8+Y;}ai7D*C5=a3}S zj|CxiF^bsgq$JY`2to^^C?~A#>G+EX#_rKHivvzz)NaKJd=I6x=tUg4=03K{H^MxDZ;4+}Qdz15 z;6LW*ZuD0S1|z@u&rX~V8V!f{!&L%_?2qs{E<;fvqCiF#N$iy*zoE)0I5FFQ->lxn zBd8`vl>=d18CcnmAIF&ydT)k_H7+`;`jCZy5?&Q^bv+q*F8U9|4Q_N|)XH=V1SR~^ zS|n???jH%k?t8z#;KOIT+BA+m&4##&-x5|ASr~7fFi?CJwqO22lm>54;vrG!Vl6sE zmTZhx#JAM>)m|;iGq0QKp(@Pm(zP}zF!srxJiwKh{04k^4O_*{0EiIX;6)C2YE#t3 zCOt6!mswm~30#T-xnm)*SScMt8AbIh?(kGZyI@c?2u-~`DN)XMlI_x`{{4}H9j~-VLRH|V)vfItxEQ8dc*{UkAmLr(} zym%PjUnS`?Jt`|MpNp@nhOkAp19_I}etU(VVr=hEwgs3=2XO|iQq!=wcHeS)lahBw z&9A-**05}~)sAs>=eX#FKPl{?eN0k~Onq6^6$VzcW}od}&jvtT77}x_p@NeRs>|R( zk$HTrfN-4Jy8mBTFdoT=`QDZ2oRoqhh2(N=&qNE$ZuOngxxKoO(@;^We3ng3)3gpPK^Q}#4*{++4^;jAUUFRt=q^M{bhEshDA=uycU~*T?{AS za3)1=c?fsiLmK5-I@WfXq+hhX)d|A-@v!+(?WLft5Wk|VM%EiXVA4~4T} zdo_&N`oyFs>u%p_TX`NSc8N4F^6lxMmrzaD)!xaj{-EpY?qI>hWBs6M?O9hrWzX&U zq2gxnEg9!QPnGQZI-T))!;z8Bs2yi~@#R_6cYJeu*i12%7WDpCyWy=O@A6E)aE~v{ z8~M!lQ@0su4T9H0LP6vGTSi{_hjr8fyr=HEG8YHOj>Q1*T+=t;=Pw0x(2K5)d(ksp zsHcq(geZZKUt8KDR?RK$j=U$@9ML+He*G2GI_bL_?5(%clt&(~GjP{LE)chs1vl%d zrycw{nQUbb)(Q(U@e3pA%_rOA>_mtpfuMksAAL5>co~8$6r{pb32yeS=EsCPCq%*W zhF%K{Lb*cR@93>6p95;0NL=B(N6kd2V>(!}x;%Co@!{}n)~7=2|HWDu6J|%}cQ`ju z-Od%{bI#1vC~V67)K3p8Boglx>~=9-_bz#ZGQx2Sk4csvWQL z>WU39mX*V|Zid0p#wR|6Dq?1Ct<5SKu2{wYbH;&~#mPkTp%vdLX1&f!`m6f5S5N|r z0uwr3sZM}p_$g7TG#Yh+O2b9fNKxcGCuDgjF2a0#xiMHS%P33ZEGJ@1fM9z(Dl|b@JyGBR^mvm!J_>l+6-Kf|Mi4z1qlWX^Qu{psTGVe51=0pIHrel`Z4F zhV!*8!?`)a-@a74%u16T>++#Z4)6>_3l0VOkfhirt3PJ%+~lj-E~58l7|L%V^F!n} z;rSsN(iGXQ DN9chL literal 0 HcmV?d00001 diff --git a/flutter_app/assets/sounds/error.mp3 b/flutter_app/assets/sounds/error.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3fe0de5226564bab7b8aaf2e823c2c2fb5d4f01f GIT binary patch literal 28800 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 b7SHu$te1;jsh9A(k6q{#oA3*ESJVFhFsG?t literal 0 HcmV?d00001 diff --git a/flutter_app/assets/sounds/select.mp3 b/flutter_app/assets/sounds/select.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..88c535b41fc0e1b773d921e0b09d6379da36c26e GIT binary patch literal 5760 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 du~^4hdV88865ZT zJ~5<2aDd}DZa|pc=9t7*;xTt_Hlal$ruy92M8;Xa>!i{4?iN>a*nRJ!^f9`8>OTV- z=AiH~Z1L=bsZch(d(5SHxWDyst>>sXm8jYtt&H{unIfTm`)`C`oA|3$a)exbAKN4W zfB`1BG2s*KVSO^{kECFw*iI4#gSqQ_voTuKClf20cYk36a7InZQ~_N_z>6=7K9gCy#Tf%V-2hCV9W!x+_QN=CSa z#jg?h9?8ioT#n?L@RgNA3#G>p3#KA2F4SR(2TqZ?Q6s&K=&ePg zTU%^o>;v{YKh6r-X+>LEy0~y|=va&T@z}CZCG$#DtL6`H&Q!L}E!lV!<@6=iBeJLY zEh+Pl$hbUiuw|V3FABi|^es;NA2agSf_fHDqE9Vaa*Do0TUx>t6X<~Ik z@=B1Nan2n(|4DD_9&)uohG=q8{Fr=S!nF`ypW+ngM=S2!+_rLxD{3e+VEIq})3?<0 z%vv3mnppl7H2DL44gGMu zt^77qHQ$p(@oqRE@TiVn=Mm~8)WL!{Kllxb15rQ0_FAl7ti7$bt*)0ThY=%M0AeW8 ze|$@>-W%8c<6P~2Vo>_i^R2N-`mzgq+mnO(OBGSR*Vei+u2gVH6{+ykD_UD|HC7lG z+7HPm8e}U(FmL7Rv<(09v?EUbezGxsL;f?0aLlKR%V+;|*Ob}g@NivvTkDC4l4NsJ zJO&#V`ydp}8%dHScFCPn|1!p(^zHVG<8YEw|IeUd*PK59SxvYpd4k4rITY_6>i?Z` z%Tk72Qf(_wY>+%4WRb5>`LMtu@@Za%es!>*%7Co2uJY!=Mu$hI1_0kv(C$4buz&LY zr)*Q=@t825nJcinCdvG}XLM@@mdlLg@~DWV4?cL{7!v$~O^}JYi_dPamH5<)vtvx+ z2r7T}+c+I~tW8fEl67rHQo_MQ6#!hF#O}o7@mUz3sh==TPG_{6MruYzPj}LoguJ%x zBSMYyh`pQJ8Kl9=+VrMf3Z{+MP)pud6HPUA5-WrxG86gZx%Kz|syeX1Q{tawVeZVV zL!5QZQpQ`JW-@s?C7e$~Nj~9+8Q(;)T$sr(NazY!eCj_R8m6USx4+8RXs}eptsX@e zU*4~{oLJQ%mRpx?!UXKK5P1?`DU~z955b8E zCT4w8FvEdqYLm&!s7djL`NOYI8+FEo|$3|T}BRnOO%H|6spVcb-_o!7$vGRYH{{a(Ez!U%g literal 0 HcmV?d00001 diff --git a/flutter_app/assets/sounds/success.mp3 b/flutter_app/assets/sounds/success.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..629e4b66bd5210a6f4e9aca42595a20cdaaf29dd GIT binary patch literal 98497 zcmdqIWmHsO^f!KIfT3aNAsvQJhf+X-QO`loY+B-gX^YHS0?e{JyBrGB( zE+Hu;H6t@Ozp%Kh;!|~fV^ecmM_13l(8$=-%-q7#%8&J}oxNX2$EW`;uWzw;&$3aM z)ld`>6hb0#m;YykVsLhxYYhN&^4~b79jb``=feN9J@#ty?gN1<2(%qoVI?*w`WsvT zq-n7#aX?SLR+YQ;IEakN;t`

ba*I_W-VQvUpP<-awAvUknER?%uV`x%J_|A?w6{ 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 BP%8ic literal 0 HcmV?d00001 diff --git a/flutter_app/ios/Runner/Info.plist b/flutter_app/ios/Runner/Info.plist index 0b8b011..8c9cbf0 100644 --- a/flutter_app/ios/Runner/Info.plist +++ b/flutter_app/ios/Runner/Info.plist @@ -51,5 +51,13 @@ PozoApp requires photo gallery access to upload documents and shop facade images. NSContactsUsageDescription PozoApp requires contacts access to let you search and auto-fill mobile numbers during registration and billing. + NSLocationWhenInUseUsageDescription + PozoApp needs your location to automatically fetch and verify your shop's address. + NSLocationAlwaysUsageDescription + PozoApp needs your location to automatically fetch and verify your shop's address. + LSApplicationQueriesSchemes + + tel + diff --git a/flutter_app/lib/feedback_helper.dart b/flutter_app/lib/feedback_helper.dart new file mode 100644 index 0000000..a70a6ac --- /dev/null +++ b/flutter_app/lib/feedback_helper.dart @@ -0,0 +1,79 @@ +import 'package:flutter/services.dart'; +import 'package:audioplayers/audioplayers.dart'; +import 'package:vibration/vibration.dart'; +import 'package:flutter/foundation.dart' show kIsWeb, debugPrint; + +class AppFeedback { + static final AudioPlayer _player = AudioPlayer(); + + /// Play a sound from assets/sounds/ + static Future playSound(String fileName) async { + try { + // AudioPlayer play from assets/sounds/fileName + await _player.play(AssetSource('sounds/$fileName')); + } catch (e) { + // Web might throw security exception if player triggers before user interaction + // or other runtime issues. Catching prevents app crashes. + debugPrint('Audio playback error for $fileName: $e'); + } + } + + /// Light haptic feedback + subtle click sound + static void click() { + HapticFeedback.lightImpact(); + playSound('click.mp3'); + } + + /// Medium haptic + selection sound + static void select() { + HapticFeedback.mediumImpact(); + playSound('select.mp3'); + } + + /// Celebration sound + strong haptic vibration + static void success() { + HapticFeedback.heavyImpact(); + playSound('success.mp3'); + } + + /// Wrong input -> error haptic (double vibrate) + error sound + static void error() { + _doubleVibrate(); + playSound('error.mp3'); + } + + /// Light haptic feedback (e.g. chip selections) + static void lightHaptic() { + HapticFeedback.lightImpact(); + } + + /// Medium haptic feedback + static void mediumHaptic() { + HapticFeedback.mediumImpact(); + } + + /// Heavy haptic feedback + static void heavyHaptic() { + HapticFeedback.heavyImpact(); + } + + /// Subtle haptic feedback (e.g. screen navigation) + static void subtleHaptic() { + HapticFeedback.selectionClick(); + } + + /// Double vibrate pattern using vibration package + static Future _doubleVibrate() async { + try { + if (!kIsWeb && await Vibration.hasVibrator() == true) { + // Double vibrate pattern: wait 0, vibrate 100ms, wait 100ms, vibrate 100ms + Vibration.vibrate(pattern: [0, 100, 100, 100]); + } else { + // Fallback to native HapticFeedback + HapticFeedback.mediumImpact(); + } + } catch (e) { + HapticFeedback.mediumImpact(); + } + } +} diff --git a/flutter_app/lib/route_transitions.dart b/flutter_app/lib/route_transitions.dart index 6a59a28..8056224 100644 --- a/flutter_app/lib/route_transitions.dart +++ b/flutter_app/lib/route_transitions.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; +import 'feedback_helper.dart'; class FadeSlidePageRoute extends PageRouteBuilder { final Widget child; @@ -33,7 +34,9 @@ class FadeSlidePageRoute extends PageRouteBuilder { }, transitionDuration: const Duration(milliseconds: 300), reverseTransitionDuration: const Duration(milliseconds: 200), - ); + ) { + AppFeedback.subtleHaptic(); + } } void showTopAlert( diff --git a/flutter_app/lib/screens/billing_dashboard_screen.dart b/flutter_app/lib/screens/billing_dashboard_screen.dart index 3207a67..b4ca602 100644 --- a/flutter_app/lib/screens/billing_dashboard_screen.dart +++ b/flutter_app/lib/screens/billing_dashboard_screen.dart @@ -1,6 +1,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; import '../route_transitions.dart'; +import '../feedback_helper.dart'; class ProductItem { final String id; @@ -136,6 +137,7 @@ class _BillingDashboardScreenState extends State { } void _simulateBarcodeScan() { + AppFeedback.click(); if (!widget.barcodeScanner) return; final random = Random(); final randomProduct = _products[random.nextInt(_products.length)]; @@ -177,6 +179,7 @@ class _BillingDashboardScreenState extends State { double get _total => _subtotal + _cgst + _sgst; void _handleReviewAndGenerate() { + AppFeedback.success(); final random = Random(); final invoiceVal = 'POZO-${random.nextInt(90000) + 10000}'; setState(() { @@ -186,6 +189,7 @@ class _BillingDashboardScreenState extends State { } void _closeReceiptAndReset() { + AppFeedback.click(); setState(() { _printingInvoice = false; _billingList.clear(); @@ -206,7 +210,10 @@ class _BillingDashboardScreenState extends State { elevation: 4, leading: IconButton( icon: const Icon(Icons.arrow_back, color: Colors.white), - onPressed: () => Navigator.pop(context), + onPressed: () { + AppFeedback.click(); + Navigator.pop(context); + }, ), title: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -964,6 +971,7 @@ class _BillingDashboardScreenState extends State { InteractiveScale( child: ElevatedButton.icon( onPressed: () { + AppFeedback.click(); showTopAlert( context, 'Thermal Printed: $_invoiceNumber successfully!', diff --git a/flutter_app/lib/screens/business_setup_screen.dart b/flutter_app/lib/screens/business_setup_screen.dart index 6654fd3..c00a3d0 100644 --- a/flutter_app/lib/screens/business_setup_screen.dart +++ b/flutter_app/lib/screens/business_setup_screen.dart @@ -2,9 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:permission_handler/permission_handler.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:geocoding/geocoding.dart'; import 'dart:ui'; +import 'dart:io'; import '../theme.dart'; import '../route_transitions.dart'; +import '../feedback_helper.dart'; import 'customize_setup_screen.dart'; class BusinessSetupScreen extends StatefulWidget { @@ -17,10 +21,16 @@ class BusinessSetupScreen extends StatefulWidget { class _BusinessSetupScreenState extends State { final TextEditingController _nameController = TextEditingController(); final TextEditingController _gstinController = TextEditingController(); + final TextEditingController _addressController = TextEditingController(); + String _selectedCategory = 'supermarket'; bool _isNameValid = false; + + bool _isGstinValid = false; + bool _hasGstinInput = false; + final Set _selectedDocs = {'GSTIN', 'FSSAI'}; - final Map _uploadedDocs = {}; + final Map _uploadedDocs = {}; @override void initState() { @@ -30,12 +40,30 @@ class _BusinessSetupScreenState extends State { _isNameValid = _nameController.text.trim().isNotEmpty; }); }); + _gstinController.addListener(_validateGstin); + } + + void _validateGstin() { + final text = _gstinController.text.trim(); + if (text.isEmpty) { + setState(() { + _hasGstinInput = false; + _isGstinValid = false; + }); + return; + } + final RegExp gstinRegex = RegExp(r'^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[0-9]{1}Z[A-Z0-9]{1}$'); + setState(() { + _hasGstinInput = true; + _isGstinValid = gstinRegex.hasMatch(text); + }); } @override void dispose() { _nameController.dispose(); _gstinController.dispose(); + _addressController.dispose(); super.dispose(); } @@ -49,10 +77,16 @@ class _BusinessSetupScreenState extends State { ]; Future _handleImagePick(String docName, ImageSource source) async { + AppFeedback.click(); final permission = source == ImageSource.camera ? Permission.camera : Permission.photos; var status = await permission.status; if (!mounted) return; + if (status.isPermanentlyDenied) { + _showSettingsDialog(source == ImageSource.camera ? 'Camera' : 'Photos'); + return; + } + if (status.isDenied && !kIsWeb) { final String sourceName = source == ImageSource.camera ? 'Camera' : 'Photos/Gallery'; final bool? proceed = await showDialog( @@ -64,11 +98,17 @@ class _BusinessSetupScreenState extends State { ), actions: [ TextButton( - onPressed: () => Navigator.pop(context, false), + onPressed: () { + AppFeedback.click(); + Navigator.pop(context, false); + }, child: const Text('Cancel'), ), TextButton( - onPressed: () => Navigator.pop(context, true), + onPressed: () { + AppFeedback.click(); + Navigator.pop(context, true); + }, child: const Text('Continue'), ), ], @@ -79,6 +119,11 @@ class _BusinessSetupScreenState extends State { if (proceed != true) return; status = await permission.request(); if (!mounted) return; + + if (status.isPermanentlyDenied) { + _showSettingsDialog(sourceName); + return; + } } if (status.isGranted || kIsWeb) { @@ -88,7 +133,7 @@ class _BusinessSetupScreenState extends State { if (!mounted) return; if (file != null) { setState(() { - _uploadedDocs[docName] = file.name; + _uploadedDocs[docName] = file; }); showTopAlert( context, @@ -113,6 +158,110 @@ class _BusinessSetupScreenState extends State { } } + void _showSettingsDialog(String permissionName) { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text('$permissionName Permission Disabled'), + content: Text('Please enable $permissionName access in system settings to proceed.'), + actions: [ + TextButton( + onPressed: () { + AppFeedback.click(); + Navigator.pop(context); + }, + child: const Text('Cancel'), + ), + TextButton( + onPressed: () { + AppFeedback.click(); + Navigator.pop(context); + openAppSettings(); + }, + child: const Text('Open Settings'), + ), + ], + ), + ); + } + + Future _fetchLocationAndAddress() async { + AppFeedback.click(); + bool serviceEnabled; + LocationPermission permission; + + serviceEnabled = await Geolocator.isLocationServiceEnabled(); + if (!serviceEnabled) { + if (mounted) { + showTopAlert(context, 'Location services are disabled.', isError: true); + } + return; + } + + permission = await Geolocator.checkPermission(); + if (permission == LocationPermission.denied) { + permission = await Geolocator.requestPermission(); + if (permission == LocationPermission.denied) { + if (mounted) { + showTopAlert(context, 'Location permissions are denied', isError: true); + } + return; + } + } + + if (permission == LocationPermission.deniedForever) { + if (mounted) { + _showSettingsDialog('Location'); + } + return; + } + + if (mounted) { + showTopAlert(context, 'Fetching location...', icon: Icons.gps_fixed); + } + + try { + Position position = await Geolocator.getCurrentPosition( + desiredAccuracy: LocationAccuracy.high); + + if (kIsWeb) { + // Reverse geocoding might have CORS issues on web without a backend proxy or proper keys depending on provider, + // Mocking for web demonstration unless specifically supported + setState(() { + _addressController.text = 'Web Mock Address: Lat ${position.latitude.toStringAsFixed(4)}, Lng ${position.longitude.toStringAsFixed(4)}\nCity, State, Country'; + }); + if (mounted) { + showTopAlert(context, 'Location detected (Web Mock)', icon: Icons.my_location_outlined); + } + } else { + List placemarks = await placemarkFromCoordinates( + position.latitude, position.longitude); + + if (placemarks.isNotEmpty) { + Placemark place = placemarks[0]; + List parts = []; + if (place.name != null && place.name!.isNotEmpty) parts.add(place.name!); + if (place.subLocality != null && place.subLocality!.isNotEmpty) parts.add(place.subLocality!); + if (place.locality != null && place.locality!.isNotEmpty) parts.add(place.locality!); + if (place.administrativeArea != null && place.administrativeArea!.isNotEmpty) parts.add(place.administrativeArea!); + if (place.postalCode != null && place.postalCode!.isNotEmpty) parts.add(place.postalCode!); + + setState(() { + _addressController.text = parts.join(', '); + }); + + if (mounted) { + showTopAlert(context, 'Address auto-filled successfully!', icon: Icons.my_location_outlined); + } + } + } + } catch (e) { + if (mounted) { + showTopAlert(context, 'Failed to fetch address: $e', isError: true); + } + } + } + void _showFacadePhotoOptions() { showModalBottomSheet( context: context, @@ -124,6 +273,7 @@ class _BusinessSetupScreenState extends State { leading: const Icon(Icons.camera_alt, color: Color(0xFFAF101A)), title: const Text('Take Photo'), onTap: () { + AppFeedback.click(); Navigator.pop(context); _handleImagePick('facade_photo', ImageSource.camera); }, @@ -132,6 +282,7 @@ class _BusinessSetupScreenState extends State { leading: const Icon(Icons.photo_library, color: Color(0xFFAF101A)), title: const Text('Choose from Gallery'), onTap: () { + AppFeedback.click(); Navigator.pop(context); _handleImagePick('facade_photo', ImageSource.gallery); }, @@ -149,13 +300,16 @@ class _BusinessSetupScreenState extends State { return InteractiveScale( child: InkWell( onTap: () { - setState(() { - if (isSelected) { + AppFeedback.lightHaptic(); + if (!isSelected) { + _selectedDocs.add(label); + _showFacadePhotoOptionsForDoc(label); + } else { + setState(() { _selectedDocs.remove(label); - } else { - _selectedDocs.add(label); - } - }); + _uploadedDocs.remove(label); + }); + } }, borderRadius: BorderRadius.circular(8), child: Container( @@ -193,6 +347,38 @@ class _BusinessSetupScreenState extends State { ); } + void _showFacadePhotoOptionsForDoc(String docName) { + showModalBottomSheet( + context: context, + builder: (context) { + return SafeArea( + child: Wrap( + children: [ + ListTile( + leading: const Icon(Icons.camera_alt, color: Color(0xFFAF101A)), + title: const Text('Take Photo'), + onTap: () { + AppFeedback.click(); + Navigator.pop(context); + _handleImagePick(docName, ImageSource.camera); + }, + ), + ListTile( + leading: const Icon(Icons.photo_library, color: Color(0xFFAF101A)), + title: const Text('Choose from Gallery'), + onTap: () { + AppFeedback.click(); + Navigator.pop(context); + _handleImagePick(docName, ImageSource.gallery); + }, + ), + ], + ), + ); + }, + ); + } + Widget _buildUploadSection(String docName, IconData icon) { final theme = Theme.of(context); final isUploaded = _uploadedDocs.containsKey(docName); @@ -231,6 +417,7 @@ class _BusinessSetupScreenState extends State { IconButton( icon: const Icon(Icons.close, size: 18, color: Colors.grey), onPressed: () { + AppFeedback.click(); setState(() { _selectedDocs.remove(docName); }); @@ -258,13 +445,20 @@ class _BusinessSetupScreenState extends State { color: Colors.red[50], borderRadius: BorderRadius.circular(8), ), - child: const Center( - child: Icon( - Icons.insert_drive_file, - color: Color(0xFFAF101A), - size: 24, - ), - ), + clipBehavior: Clip.antiAlias, + child: kIsWeb + ? Image.network( + _uploadedDocs[docName]!.path, + fit: BoxFit.cover, + errorBuilder: (context, error, stackTrace) => + const Icon(Icons.broken_image, color: Color(0xFFAF101A)), + ) + : Image.file( + File(_uploadedDocs[docName]!.path), + fit: BoxFit.cover, + errorBuilder: (context, error, stackTrace) => + const Icon(Icons.broken_image, color: Color(0xFFAF101A)), + ), ), const SizedBox(width: 12), Expanded( @@ -272,7 +466,7 @@ class _BusinessSetupScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - _uploadedDocs[docName] ?? 'Attached_document.pdf', + _uploadedDocs[docName]?.name ?? 'Attached_document.jpg', style: const TextStyle( fontSize: 13, fontWeight: FontWeight.bold, @@ -293,6 +487,7 @@ class _BusinessSetupScreenState extends State { IconButton( icon: const Icon(Icons.delete_outline, color: Colors.red), onPressed: () { + AppFeedback.click(); setState(() { _uploadedDocs.remove(docName); }); @@ -392,7 +587,10 @@ class _BusinessSetupScreenState extends State { appBar: AppBar( leading: IconButton( icon: const Icon(Icons.arrow_back, color: Color(0xFFBA1A20)), - onPressed: () => Navigator.pop(context), + onPressed: () { + AppFeedback.click(); + Navigator.pop(context); + }, ), title: Text( 'PozoApp', @@ -523,6 +721,7 @@ class _BusinessSetupScreenState extends State { return InteractiveScale( child: InkWell( onTap: () { + AppFeedback.select(); setState(() { _selectedCategory = cat['id']; }); @@ -612,8 +811,14 @@ class _BusinessSetupScreenState extends State { child: TextField( controller: _gstinController, textCapitalization: TextCapitalization.characters, - decoration: const InputDecoration( + decoration: InputDecoration( hintText: '15-DIGIT GST NUMBER', + suffixIcon: _hasGstinInput + ? Icon( + _isGstinValid ? Icons.check_circle : Icons.error_outline, + color: _isGstinValid ? Colors.green : Colors.red, + ) + : null, ), style: const TextStyle(fontWeight: FontWeight.bold, letterSpacing: 1.2), ), @@ -622,11 +827,21 @@ class _BusinessSetupScreenState extends State { InteractiveScale( child: ElevatedButton( onPressed: () { - showTopAlert( - context, - 'GSTIN Verified Successfully!', - icon: Icons.verified_outlined, - ); + if (_isGstinValid) { + AppFeedback.success(); + showTopAlert( + context, + 'GSTIN Verified Successfully!', + icon: Icons.verified_outlined, + ); + } else { + AppFeedback.error(); + showTopAlert( + context, + 'Invalid GSTIN Format. Check 15-digit code.', + isError: true, + ); + } }, style: ElevatedButton.styleFrom( minimumSize: const Size(0, 48), @@ -667,13 +882,7 @@ class _BusinessSetupScreenState extends State { const SizedBox(height: 8), InteractiveScale( child: InkWell( - onTap: () { - showTopAlert( - context, - 'Location detected: Sector 62, Noida, UP', - icon: Icons.my_location_outlined, - ); - }, + onTap: _fetchLocationAndAddress, borderRadius: BorderRadius.circular(16), child: Container( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16), @@ -731,6 +940,23 @@ class _BusinessSetupScreenState extends State { ), ), ), + const SizedBox(height: 16), + Text( + 'Shop Address *', + style: theme.textTheme.labelSmall?.copyWith( + color: theme.colorScheme.onSurface, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 8), + TextField( + controller: _addressController, + maxLines: 3, + decoration: const InputDecoration( + hintText: 'Enter complete shop address', + ), + style: const TextStyle(fontWeight: FontWeight.bold), + ), ], ), ), @@ -828,7 +1054,7 @@ class _BusinessSetupScreenState extends State { ), const SizedBox(height: 12), Text( - _uploadedDocs.containsKey('facade_photo') ? _uploadedDocs['facade_photo']! : 'Upload front view', + _uploadedDocs.containsKey('facade_photo') ? _uploadedDocs['facade_photo']!.name : 'Upload front view', style: theme.textTheme.bodyMedium?.copyWith( fontWeight: FontWeight.bold, color: theme.colorScheme.onSurface, @@ -867,6 +1093,7 @@ class _BusinessSetupScreenState extends State { child: ElevatedButton( onPressed: _isNameValid ? () { + AppFeedback.click(); Navigator.push( context, FadeSlidePageRoute( diff --git a/flutter_app/lib/screens/customize_setup_screen.dart b/flutter_app/lib/screens/customize_setup_screen.dart index 6692948..5b144fe 100644 --- a/flutter_app/lib/screens/customize_setup_screen.dart +++ b/flutter_app/lib/screens/customize_setup_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import '../theme.dart'; import '../route_transitions.dart'; +import '../feedback_helper.dart'; import 'setup_complete_screen.dart'; class CustomizeSetupScreen extends StatefulWidget { @@ -33,7 +34,10 @@ class _CustomizeSetupScreenState extends State { appBar: AppBar( leading: IconButton( icon: const Icon(Icons.arrow_back, color: Color(0xFFBA1A20)), - onPressed: () => Navigator.pop(context), + onPressed: () { + AppFeedback.click(); + Navigator.pop(context); + }, ), title: Row( children: const [ @@ -52,6 +56,7 @@ class _CustomizeSetupScreenState extends State { actions: [ TextButton( onPressed: () { + AppFeedback.click(); Navigator.push( context, FadeSlidePageRoute( @@ -194,6 +199,7 @@ class _CustomizeSetupScreenState extends State { child: InteractiveScale( child: ElevatedButton( onPressed: () { + AppFeedback.click(); Navigator.push( context, FadeSlidePageRoute( @@ -235,8 +241,13 @@ class _CustomizeSetupScreenState extends State { ValueChanged onChanged, ThemeData theme, ) { + void wrappedOnChanged(bool val) { + AppFeedback.click(); + onChanged(val); + } + return InteractiveScale( - onTap: () => onChanged(!value), + onTap: () => wrappedOnChanged(!value), child: Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( @@ -290,7 +301,7 @@ class _CustomizeSetupScreenState extends State { ), Switch( value: value, - onChanged: onChanged, + onChanged: wrappedOnChanged, activeColor: Colors.white, activeTrackColor: theme.colorScheme.primary, ), diff --git a/flutter_app/lib/screens/mobile_login_screen.dart b/flutter_app/lib/screens/mobile_login_screen.dart index a119abc..6263587 100644 --- a/flutter_app/lib/screens/mobile_login_screen.dart +++ b/flutter_app/lib/screens/mobile_login_screen.dart @@ -3,8 +3,10 @@ import 'package:flutter/services.dart'; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:permission_handler/permission_handler.dart'; import 'package:flutter_contacts/flutter_contacts.dart'; +import 'package:url_launcher/url_launcher.dart'; import '../theme.dart'; import '../route_transitions.dart'; +import '../feedback_helper.dart'; import 'otp_verification_screen.dart'; class MockContact { @@ -21,19 +23,23 @@ class MockPhone { } class MobileLoginScreen extends StatefulWidget { - const MobileLoginScreen({super.key}); + final String? autoFilledMobileNumber; + + const MobileLoginScreen({super.key, this.autoFilledMobileNumber}); @override State createState() => _MobileLoginScreenState(); } class _MobileLoginScreenState extends State { - final TextEditingController _controller = TextEditingController(); + late final TextEditingController _controller; bool _isValid = false; @override void initState() { super.initState(); + _controller = TextEditingController(text: widget.autoFilledMobileNumber ?? ''); + _isValid = _controller.text.length == 10; _controller.addListener(_validateInput); } @@ -50,6 +56,7 @@ class _MobileLoginScreenState extends State { } Future _pickContact() async { + AppFeedback.click(); const permission = Permission.contacts; var status = await permission.status; if (!mounted) return; @@ -195,6 +202,7 @@ class _MobileLoginScreenState extends State { ), ), onTap: () { + AppFeedback.click(); _selectContactNumber(phone); Navigator.pop(context); }, @@ -207,7 +215,10 @@ class _MobileLoginScreenState extends State { ), actions: [ TextButton( - onPressed: () => Navigator.pop(context), + onPressed: () { + AppFeedback.click(); + Navigator.pop(context); + }, child: const Text('Close'), ) ], @@ -227,7 +238,10 @@ class _MobileLoginScreenState extends State { appBar: AppBar( leading: IconButton( icon: const Icon(Icons.arrow_back, color: Color(0xFFAF101A)), - onPressed: () => Navigator.pop(context), + onPressed: () { + AppFeedback.click(); + Navigator.pop(context); + }, ), title: Text( 'PozoApp', @@ -409,6 +423,7 @@ class _MobileLoginScreenState extends State { const SizedBox(height: 16), ElevatedButton.icon( onPressed: () { + AppFeedback.click(); _controller.text = '9876543210'; setState(() { _isValid = true; @@ -605,6 +620,7 @@ class _MobileLoginScreenState extends State { child: ElevatedButton( onPressed: _isValid ? () { + AppFeedback.click(); Navigator.push( context, FadeSlidePageRoute( @@ -630,12 +646,28 @@ class _MobileLoginScreenState extends State { SizedBox(height: gap / 2), InteractiveScale( child: OutlinedButton( - onPressed: () { - showTopAlert( - context, - 'Connecting with Pozo Support... Please wait.', - icon: Icons.support_agent_outlined, - ); + onPressed: () async { + AppFeedback.click(); + final Uri uri = Uri.parse('tel:7324000011'); + try { + if (await canLaunchUrl(uri)) { + await launchUrl(uri); + } else { + if (!context.mounted) return; + showTopAlert( + context, + 'Could not launch dialer. Call 7324000011', + isError: true, + ); + } + } catch (e) { + if (!context.mounted) return; + showTopAlert( + context, + 'Dialer not available in this environment. Call 7324000011', + isError: true, + ); + } }, style: OutlinedButton.styleFrom( minimumSize: const Size.fromHeight(56), diff --git a/flutter_app/lib/screens/otp_verification_screen.dart b/flutter_app/lib/screens/otp_verification_screen.dart index 53283b4..f7f2d4a 100644 --- a/flutter_app/lib/screens/otp_verification_screen.dart +++ b/flutter_app/lib/screens/otp_verification_screen.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import '../theme.dart'; import '../route_transitions.dart'; +import '../feedback_helper.dart'; import 'business_setup_screen.dart'; class OtpVerificationScreen extends StatefulWidget { @@ -50,6 +51,21 @@ class _OtpVerificationScreenState extends State { super.dispose(); } + void _verifyOtp() { + final code = _controllers.map((c) => c.text.trim()).join(); + if (code.length < 6) { + AppFeedback.error(); + showTopAlert(context, 'Please enter a valid 6-digit OTP code.', isError: true); + return; + } + AppFeedback.success(); + showTopAlert(context, 'OTP Verified Successfully!'); + Navigator.pushReplacement( + context, + FadeSlidePageRoute(child: const BusinessSetupScreen()), + ); + } + String _getFormattedTime() { return '00:${_timeLeft.toString().padLeft(2, '0')}'; } @@ -67,7 +83,10 @@ class _OtpVerificationScreenState extends State { appBar: AppBar( leading: IconButton( icon: const Icon(Icons.arrow_back, color: Color(0xFFBA1A20)), - onPressed: () => Navigator.pop(context), + onPressed: () { + AppFeedback.click(); + Navigator.pop(context); + }, ), title: Text( 'PozoApp', @@ -182,7 +201,10 @@ class _OtpVerificationScreenState extends State { ), const SizedBox(width: 8), InteractiveScale( - onTap: () => Navigator.pop(context), + onTap: () { + AppFeedback.click(); + Navigator.pop(context); + }, child: Text( 'Edit', style: TextStyle( @@ -233,8 +255,15 @@ class _OtpVerificationScreenState extends State { ), ), onChanged: (value) { - if (value.isNotEmpty && fieldIndex < 5) { - _focusNodes[fieldIndex + 1].requestFocus(); + AppFeedback.subtleHaptic(); + if (value.isNotEmpty) { + if (fieldIndex < 5) { + _focusNodes[fieldIndex + 1].requestFocus(); + } else { + _verifyOtp(); + } + } else if (value.isEmpty && fieldIndex > 0) { + _focusNodes[fieldIndex - 1].requestFocus(); } }, ), @@ -304,6 +333,7 @@ class _OtpVerificationScreenState extends State { child: InteractiveScale( child: OutlinedButton.icon( onPressed: () { + AppFeedback.click(); showTopAlert( context, 'WhatsApp verification request sent!', @@ -370,14 +400,7 @@ class _OtpVerificationScreenState extends State { }), InteractiveScale( child: TextButton.icon( - onPressed: () { - Navigator.push( - context, - FadeSlidePageRoute( - child: const BusinessSetupScreen(), - ), - ); - }, + onPressed: _verifyOtp, icon: const Text( 'Verify Manually', style: TextStyle(fontWeight: FontWeight.bold), @@ -407,7 +430,10 @@ class _OtpVerificationScreenState extends State { Widget _buildFooterAction(IconData icon, String label, VoidCallback onTap) { return InteractiveScale( - onTap: onTap, + onTap: () { + AppFeedback.click(); + onTap(); + }, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ diff --git a/flutter_app/lib/screens/setup_complete_screen.dart b/flutter_app/lib/screens/setup_complete_screen.dart index 4e11171..2de5573 100644 --- a/flutter_app/lib/screens/setup_complete_screen.dart +++ b/flutter_app/lib/screens/setup_complete_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import '../theme.dart'; import '../route_transitions.dart'; +import '../feedback_helper.dart'; import 'billing_dashboard_screen.dart'; class SetupCompleteScreen extends StatefulWidget { @@ -77,6 +78,9 @@ class _SetupCompleteScreenState extends State with SingleTi ); _controller.forward(); + WidgetsBinding.instance.addPostFrameCallback((_) { + AppFeedback.success(); + }); } @override @@ -384,6 +388,7 @@ class _SetupCompleteScreenState extends State with SingleTi child: InteractiveScale( child: ElevatedButton( onPressed: () { + AppFeedback.click(); showTopAlert( context, 'Launching Register Dashboard... Enjoy billing!', diff --git a/flutter_app/lib/screens/welcome_screen.dart b/flutter_app/lib/screens/welcome_screen.dart index f185777..0d2e116 100644 --- a/flutter_app/lib/screens/welcome_screen.dart +++ b/flutter_app/lib/screens/welcome_screen.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter/foundation.dart'; +import 'package:mobile_number/mobile_number.dart'; import '../theme.dart'; import '../route_transitions.dart'; +import '../feedback_helper.dart'; import 'mobile_login_screen.dart'; class WelcomeScreen extends StatefulWidget { @@ -18,9 +21,12 @@ class _WelcomeScreenState extends State with SingleTickerProvider late Animation _contentFadeAnimation; late Animation _contentSlideAnimation; + String? _detectedMobileNumber; + @override void initState() { super.initState(); + _initMobileNumberDetection(); _controller = AnimationController( vsync: this, duration: const Duration(milliseconds: 1400), @@ -72,6 +78,30 @@ class _WelcomeScreenState extends State with SingleTickerProvider _controller.forward(); } + Future _initMobileNumberDetection() async { + try { + if (!kIsWeb && defaultTargetPlatform == TargetPlatform.android) { + if (await MobileNumber.hasPhonePermission) { + final String? mobileNumber = await MobileNumber.mobileNumber; + if (mobileNumber != null && mobileNumber.isNotEmpty) { + // Extract 10 digits if possible, else just use the number + final cleaned = mobileNumber.replaceAll(RegExp(r'\D'), ''); + if (cleaned.length >= 10) { + _detectedMobileNumber = cleaned.substring(cleaned.length - 10); + } else { + _detectedMobileNumber = mobileNumber; + } + return; + } + } + } + } catch (e) { + debugPrint('Error getting mobile number: $e'); + } + // Fallback to mock number + _detectedMobileNumber = '9988776655'; + } + @override void dispose() { _controller.dispose(); @@ -493,9 +523,10 @@ class _WelcomeScreenState extends State with SingleTickerProvider InteractiveScale( child: ElevatedButton( onPressed: () { + AppFeedback.click(); Navigator.push( context, - FadeSlidePageRoute(child: const MobileLoginScreen()), + FadeSlidePageRoute(child: MobileLoginScreen(autoFilledMobileNumber: _detectedMobileNumber)), ); }, style: ElevatedButton.styleFrom( diff --git a/flutter_app/pubspec.lock b/flutter_app/pubspec.lock index 53d805e..c82a998 100644 --- a/flutter_app/pubspec.lock +++ b/flutter_app/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" async: dependency: transitive description: @@ -9,6 +17,62 @@ packages: url: "https://pub.dev" source: hosted version: "2.13.0" + audioplayers: + dependency: "direct main" + description: + name: audioplayers + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef + url: "https://pub.dev" + source: hosted + version: "5.2.1" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 + url: "https://pub.dev" + source: hosted + version: "4.0.3" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" + url: "https://pub.dev" + source: hosted + version: "3.1.0" boolean_selector: dependency: transitive description: @@ -65,6 +129,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dbus: + dependency: transitive + description: + name: dbus + sha256: "0ce9b0a839e6dee59a37a623d2fc26a35bbbe6404213e419b0d6411023d62645" + url: "https://pub.dev" + source: hosted + version: "0.7.14" + device_info_plus: + dependency: transitive + description: + name: device_info_plus + sha256: "98f28b42168cc509abc92f88518882fd58061ea372d7999aecc424345c7bff6a" + url: "https://pub.dev" + source: hosted + version: "11.5.0" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f + url: "https://pub.dev" + source: hosted + version: "7.0.3" fake_async: dependency: transitive description: @@ -81,6 +169,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" file_selector_linux: dependency: transitive description: @@ -113,6 +209,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+5" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -126,6 +230,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.9+2" + flutter_haptic_feedback: + dependency: "direct main" + description: + name: flutter_haptic_feedback + sha256: e6a1ac6b5119c9b0964e4de2eaa6bfb66facedc6e33bfe2a902da3f6f9666499 + url: "https://pub.dev" + source: hosted + version: "1.0.1" flutter_lints: dependency: "direct dev" description: @@ -152,6 +264,102 @@ packages: description: flutter source: sdk version: "0.0.0" + geoclue: + dependency: transitive + description: + name: geoclue + sha256: c2a998c77474fc57aa00c6baa2928e58f4b267649057a1c76738656e9dbd2a7f + url: "https://pub.dev" + source: hosted + version: "0.1.1" + geocoding: + dependency: "direct main" + description: + name: geocoding + sha256: "606be036287842d779d7ec4e2f6c9435fc29bbbd3c6da6589710f981d8852895" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + geocoding_android: + dependency: transitive + description: + name: geocoding_android + sha256: ba810da90d6633cbb82bbab630e5b4a3b7d23503263c00ae7f1ef0316dcae5b9 + url: "https://pub.dev" + source: hosted + version: "4.0.1" + geocoding_ios: + dependency: transitive + description: + name: geocoding_ios + sha256: "18ab1c8369e2b0dcb3a8ccc907319334f35ee8cf4cfef4d9c8e23b13c65cb825" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + geocoding_platform_interface: + dependency: transitive + description: + name: geocoding_platform_interface + sha256: "8c2c8226e5c276594c2e18bfe88b19110ed770aeb7c1ab50ede570be8b92229b" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + geolocator: + dependency: "direct main" + description: + name: geolocator + sha256: "79939537046c9025be47ec645f35c8090ecadb6fe98eba146a0d25e8c1357516" + url: "https://pub.dev" + source: hosted + version: "14.0.2" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "179c3cb66dfa674fc9ccbf2be872a02658724d1c067634e2c427cf6df7df901a" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: dbdd8789d5aaf14cf69f74d4925ad1336b4433a6efdf2fce91e8955dc921bf22 + url: "https://pub.dev" + source: hosted + version: "2.3.13" + geolocator_linux: + dependency: transitive + description: + name: geolocator_linux + sha256: d64112a205931926f4363bb6bd48f14cb38e7326833041d170615586cd143797 + url: "https://pub.dev" + source: hosted + version: "0.2.4" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: dde05dae7d584db6e82feb87dd9fb0b4b4c83ed68065667b4bef637be38e13a7 + url: "https://pub.dev" + source: hosted + version: "4.2.7" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: b1ae9bdfd90f861fde8fd4f209c37b953d65e92823cb73c7dee1fa021b06f172 + url: "https://pub.dev" + source: hosted + version: "4.1.3" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "175435404d20278ffd220de83c2ca293b73db95eafbdc8131fe8609be1421eb6" + url: "https://pub.dev" + source: hosted + version: "0.2.5" google_fonts: dependency: "direct main" description: @@ -160,6 +368,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.1.0" + gsettings: + dependency: transitive + description: + name: gsettings + sha256: "1b0ce661f5436d2db1e51f3c4295a49849f03d304003a7ba177d01e3a858249c" + url: "https://pub.dev" + source: hosted + version: "0.2.8" http: dependency: transitive description: @@ -240,6 +456,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.2" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" leak_tracker: dependency: transitive description: @@ -304,6 +528,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" + mobile_number: + dependency: "direct main" + description: + name: mobile_number + sha256: "8dc5b7a19193f7a41fa07aa933c8db8085033e6201b20323f20e4d283ea2a9a8" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "468c26b4254ab01979fa5e4a98cb343ea3631b9acee6f21028997419a80e1a20" + url: "https://pub.dev" + source: hosted + version: "9.0.1" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" + url: "https://pub.dev" + source: hosted + version: "3.2.1" path: dependency: transitive description: @@ -364,18 +612,18 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849" + sha256: fe54465bcc62a4564c6e4db337bbaded6c0c0fa6e10487414436d163114784f6 url: "https://pub.dev" source: hosted - version: "11.4.0" + version: "12.0.3" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc + sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6" url: "https://pub.dev" source: hosted - version: "12.1.0" + version: "13.0.1" permission_handler_apple: dependency: transitive description: @@ -408,6 +656,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675" + url: "https://pub.dev" + source: hosted + version: "7.0.2" platform: dependency: transitive description: @@ -461,6 +717,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 + url: "https://pub.dev" + source: hosted + version: "3.4.0" term_glyph: dependency: transitive description: @@ -485,6 +749,78 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "81777b08c498a292d93ff2feead633174c386291e35612f8da438d6e92c4447e" + url: "https://pub.dev" + source: hosted + version: "6.3.20" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7 + url: "https://pub.dev" + source: hosted + version: "6.3.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f + url: "https://pub.dev" + source: hosted + version: "3.2.3" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" + url: "https://pub.dev" + source: hosted + version: "3.1.5" + uuid: + dependency: transitive + description: + name: uuid + sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489" + url: "https://pub.dev" + source: hosted + version: "4.5.3" vector_math: dependency: transitive description: @@ -493,6 +829,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vibration: + dependency: "direct main" + description: + name: vibration + sha256: "06588a845a4ebc73ab7ff7da555c2b3dbcd9676164b5856a38bf0b2287f1045d" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + vibration_platform_interface: + dependency: transitive + description: + name: vibration_platform_interface + sha256: "6ffeee63547562a6fef53c05a41d4fdcae2c0595b83ef59a4813b0612cd2bc36" + url: "https://pub.dev" + source: hosted + version: "0.0.3" vm_service: dependency: transitive description: @@ -509,6 +861,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + win32: + dependency: transitive + description: + name: win32 + sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e + url: "https://pub.dev" + source: hosted + version: "5.15.0" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae" + url: "https://pub.dev" + source: hosted + version: "2.1.0" xdg_directories: dependency: transitive description: @@ -517,6 +885,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" + url: "https://pub.dev" + source: hosted + version: "6.6.1" sdks: dart: ">=3.8.0 <4.0.0" flutter: ">=3.32.0" diff --git a/flutter_app/pubspec.yaml b/flutter_app/pubspec.yaml index 4f76fa0..ab87a0c 100644 --- a/flutter_app/pubspec.yaml +++ b/flutter_app/pubspec.yaml @@ -10,9 +10,16 @@ dependencies: sdk: flutter cupertino_icons: ^1.0.5 google_fonts: ^5.1.0 - image_picker: ^1.0.4 - permission_handler: ^11.0.1 + image_picker: ^1.2.1 + permission_handler: ^12.0.3 flutter_contacts: ^1.1.9 + geolocator: ^14.0.2 + geocoding: ^4.0.0 + url_launcher: ^6.3.2 + mobile_number: ^3.0.0 + vibration: ^1.8.4 + audioplayers: ^5.2.1 + flutter_haptic_feedback: ^1.0.1 dev_dependencies: flutter_test: @@ -23,3 +30,4 @@ flutter: uses-material-design: true assets: - assets/logo/ + - assets/sounds/