From 2c3e7e2992195f67ec9fb98103e89137cfd65163 Mon Sep 17 00:00:00 2001 From: bestonemitRam Date: Sat, 22 Feb 2025 12:35:25 +0530 Subject: [PATCH] fixedlocationhomepage --- .DS_Store | Bin 10244 -> 10244 bytes .dart_tool/package_config.json | 2 +- .flutter-plugins-dependencies | 2 +- .../logic/provider/addTocart_provider.dart | 11 +- lib/src/logic/provider/home_provider.dart | 112 ++++++++++++++++-- lib/src/logic/provider/order_provider.dart | 2 + lib/src/logic/provider/profile_provider.dart | 12 +- lib/src/ui/header.dart | 101 ++++++++-------- lib/src/ui/home/home_screen.dart | 41 +++++-- lib/src/ui/login/login_screen.dart | 3 +- lib/src/ui/login/signup_screen.dart | 2 + lib/src/ui/map/add_locations.dart | 3 + lib/src/ui/otp/login_otp.dart | 3 +- lib/src/ui/profilepage/profile_screen.dart | 55 ++++----- lib/src/ui/splash/splash_screen.dart | 9 +- lib/utils/constants/shared_pref_utils.dart | 2 +- 16 files changed, 244 insertions(+), 116 deletions(-) diff --git a/.DS_Store b/.DS_Store index facfede0e1472e202f7eba41bd11aabd0ad7de82..dcd313c2cf546f6a4ed979a908fc1c91e817aa0c 100644 GIT binary patch delta 212 zcmZn(XbG6$&uFtTU^hRb&Ey0DiODJgCTxCz|8_juG&xQ{4Z)O}yhK2gS?9^)$rl79 z*y0PON#EZz`JI3ijL9b`&17gWSzB-h^UGsglaC2zGrig{*;wfCWCh^{Q8P0m9R)*k z<60esYC|(qLmdT66N}ATg`*i|xjkMpFfcGP(); @@ -95,21 +103,24 @@ class ProductProvider extends ChangeNotifier { List homeproducts = []; - - Future getHomeProduct(BuildContext context,String id, String search) async - { + Future getHomeProduct(BuildContext context, String id, String search, + String minPrice, String maxprice, orderby) async { isHomeLoadingg = true; notifyListeners(); - var data = {"minPrice": "", "minPrice": "", "search": search}; - var result = await _homeRepo.getAllProduct(data, context,id); + var data = { + "minPrice": "${minPrice}", + "minPrice": "${maxprice}", + "search": search, + "sortBy": orderby + }; + var result = await _homeRepo.getAllProduct(data, context, id); return result.fold( (error) { isLoadingg = false; notifyListeners(); }, - (response) - { + (response) { homeproducts = response.data!; isHomeLoadingg = false; @@ -147,11 +158,10 @@ class ProductProvider extends ChangeNotifier { bool isBestdealingloading = true; - Future getBestDealProduct(BuildContext context,String search) async - { + Future getBestDealProduct(BuildContext context, String search) async { isBestdealingloading = true; notifyListeners(); - var data = {"minPrice": "", "minPrice": "", "search": search}; + var data = {"minPrice": "", "minPrice": "", "search": search}; var result = await _homeRepo.getBestDealProduct(data, context); return result.fold( (error) { @@ -166,9 +176,6 @@ class ProductProvider extends ChangeNotifier { ); } - - - List categoryList = []; bool iscategroyloading = true; @@ -675,4 +682,83 @@ class ProductProvider extends ChangeNotifier { _selectedIndex = index; notifyListeners(); } + + Future determinePosition() async { + bool serviceEnabled = await Geolocator.isLocationServiceEnabled(); + if (!serviceEnabled) { + return; + } + + LocationPermission permission = await Geolocator.requestPermission(); + if (permission == LocationPermission.denied) { + return; + } + + Position position = await Geolocator.getCurrentPosition( + desiredAccuracy: LocationAccuracy.high, + ); + LatLng currentLatLng = LatLng(position.latitude, position.longitude); + + _getAddressFromLatLng(position.latitude, position.longitude); + } + + String googleApiKey = "AIzaSyAi3_Dls63iGs7Nccgdm-4FkS0rhT03-4U"; + + String getCurrentAdd = ''; + + Future _getAddressFromLatLng(double lat, double lng) async { + final String url = + "https://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$lng&key=$googleApiKey"; + + try { + final response = await http.get(Uri.parse(url)); + if (response.statusCode == 200) { + final data = json.decode(response.body); + if (data["status"] == "OK") { + var result = data["results"][0]; // First result is most accurate + + // _RoadController.text = result["formatted_address"]; + List components = result["address_components"]; + + String roadName = ""; + String colony = ""; + String buildingName = ""; + String pincode = ""; + + for (var component in components) { + List types = component["types"]; + if (types.contains("route")) { + roadName = component["long_name"]; // Road Name + } else if (types.contains("sublocality_level_1") || + types.contains("locality")) { + colony = component["long_name"]; // Colony Name + } else if (types.contains("premise") || + types.contains("street_number")) { + buildingName = component["long_name"]; // Building Name + } else if (types.contains("postal_code")) { + pincode = component["long_name"]; // Extract Pin Code + } + } + + // setState(() { + // // _address = formattedAddress; + // _roadName = roadName; + // _colony = colony; + // _buildingName = buildingName; + // }); + + getCurrentAdd = result["formatted_address"] + pincode; + notifyListeners(); + + print( + "Full Address: ${result["formatted_address"]} ${response.body} sdfsgd ${pincode}"); + print("Road Name: $roadName"); + print("Colony: $colony"); + print("Building Name: $buildingName"); + } else {} + } else {} + } catch (e) { + print("Error fetching address: $e"); + } + } } diff --git a/lib/src/logic/provider/order_provider.dart b/lib/src/logic/provider/order_provider.dart index 38bb151..1f9fc43 100644 --- a/lib/src/logic/provider/order_provider.dart +++ b/lib/src/logic/provider/order_provider.dart @@ -35,4 +35,6 @@ class OrderProvider extends ChangeNotifier { notifyListeners(); } } + + } diff --git a/lib/src/logic/provider/profile_provider.dart b/lib/src/logic/provider/profile_provider.dart index 13c7d92..d71bb5f 100644 --- a/lib/src/logic/provider/profile_provider.dart +++ b/lib/src/logic/provider/profile_provider.dart @@ -122,13 +122,13 @@ class ProfileProvider extends ChangeNotifier { await SharedPrefUtils.saveUser(user: response); allitem = response!; - _profile = response.img; - _name = response.firstName + " " + response.lastName; - _email = response.email; + _profile = response.img ?? ''; + _name = response.firstName ?? "" + " " + response.lastName ?? ''; + _email = response.email ?? ""; - APPSTRING.userName = response.firstName; - APPSTRING.userLastName = response.lastName; - APPSTRING.userProfile = response.img; + APPSTRING.userName = response.firstName ?? ""; + APPSTRING.userLastName = response.lastName ?? ""; + APPSTRING.userProfile = response.img ?? ""; isLoading = false; notifyListeners(); }, diff --git a/lib/src/ui/header.dart b/lib/src/ui/header.dart index 00272d4..7a93cf1 100644 --- a/lib/src/ui/header.dart +++ b/lib/src/ui/header.dart @@ -1,60 +1,65 @@ import 'package:flutter/material.dart'; +import 'package:grocery_app/src/logic/provider/home_provider.dart'; import 'package:grocery_app/utils/constants/color_constant.dart'; import 'package:grocery_app/utils/extensions/uicontext.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:provider/provider.dart'; class Header extends StatelessWidget { const Header({super.key}); @override Widget build(BuildContext context) { - return Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Icon( - MdiIcons.mapMarkerOutline, - color: APPCOLOR.appGreen, - size: 30, - ), - const SizedBox( - width: 10, - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Text( - "Home", - style: context.customMedium(APPCOLOR.black333333, 18), - ), - const SizedBox( - width: 5, - ), - Icon( - MdiIcons.chevronDown, - color: APPCOLOR.black333333, - size: 30, - ) - ], - ), - Text( - "639| Elgin St. Celina, Delaware 10299", - style: context.customMedium(APPCOLOR.grey666666, 14), - ), - ], - )), - const SizedBox( - width: 10, - ), - Icon( - MdiIcons.shoppingOutline, - color: APPCOLOR.balck1A1A1A, - size: 30, - ), - ], - ); + return Consumer(builder: (context, provider, child) { + return Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Icon( + MdiIcons.mapMarkerOutline, + color: APPCOLOR.appGreen, + size: 30, + ), + const SizedBox( + width: 10, + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + "Home", + style: context.customMedium(APPCOLOR.black333333, 18), + ), + const SizedBox( + width: 5, + ), + Icon( + MdiIcons.chevronDown, + color: APPCOLOR.black333333, + size: 30, + ) + ], + ), + Text( + provider.getCurrentAdd, + // "639| Elgin St. Celina, Delaware 10299", + style: context.customMedium(APPCOLOR.grey666666, 14), + ), + ], + )), + const SizedBox( + width: 10, + ), + // Icon( + // MdiIcons.shoppingOutline, + // color: APPCOLOR.balck1A1A1A, + // size: 30, + // ), + ], + ); + }); } } diff --git a/lib/src/ui/home/home_screen.dart b/lib/src/ui/home/home_screen.dart index 7475643..9326e62 100644 --- a/lib/src/ui/home/home_screen.dart +++ b/lib/src/ui/home/home_screen.dart @@ -33,12 +33,14 @@ class _HomeScreenState extends State { WidgetsBinding.instance.addPostFrameCallback((_) { final productProvider = Provider.of(context, listen: false); + productProvider .determinePosition(); productProvider.getBanners(context); - productProvider.getHomeProduct(context, "", ''); - productProvider.getBestDealProduct(context,''); + productProvider.getHomeProduct(context, "", '', '', '', ''); + productProvider.getBestDealProduct(context, ''); productProvider.getAllcategory(context); + getUserDetails(); }); } @@ -69,7 +71,8 @@ class _HomeScreenState extends State { Row( children: [ Consumer( - builder: (context, provider, child) { + builder: (context, provider, child) + { return Expanded( child: Container( height: 50, @@ -86,8 +89,8 @@ class _HomeScreenState extends State { fillColor: Colors.transparent, suffixIcon: InkWell( onTap: () { - provider.getHomeProduct( - context, "", provider.searchValue); + provider.getHomeProduct(context, "", + provider.searchValue, '', '', ''); }, child: Icon(MdiIcons.magnify)), hintText: 'Search', @@ -659,7 +662,7 @@ class _HomeScreenState extends State { }, ) : provider.homeproducts.isEmpty - ? Center(child: Text('No products available')) + ? Center(child: Text('')) : GridView.builder( shrinkWrap: true, itemCount: provider.homeproducts.length, @@ -735,10 +738,11 @@ class _HomeScreenState extends State { Divider( thickness: 0.2, ), - _buildSortOption(context, sortProvider, 0, "Relevance"), - _buildSortOption(context, sortProvider, 1, "Popularity"), + _buildSortOption(context, sortProvider, 0, "All"), + _buildSortOption(context, sortProvider, 1, "Relevance"), + _buildSortOption(context, sortProvider, 2, "Popularity"), _buildSortOption( - context, sortProvider, 2, "Price: Low to High"), + context, sortProvider, 3, "Price: Low to High"), ], ), ); @@ -758,7 +762,24 @@ class _HomeScreenState extends State { ? Icon(Icons.check_circle, color: Colors.green) : Icon(Icons.radio_button_unchecked, color: Colors.grey), onTap: () { - provider.getHomeProduct(context, '', ''); + switch (index) { + case 0: + provider.getHomeProduct(context, '', '', "", "", ''); + break; + case 1: + provider.getHomeProduct(context, '', '', "", "", "featured"); + break; + case 2: + provider.getHomeProduct(context, '', '', "", "", "popularity"); + break; + case 3: + provider.getHomeProduct(context, '', '', "100", "100000000", ''); + break; + default: + provider.getHomeProduct(context, '', '', "", "", ''); + } + + // provider.getHomeProduct(context, '', '', "100", "100000000"); provider.setSelectedIndex(context, index); Navigator.pop(context); // Close the bottom sheet }, diff --git a/lib/src/ui/login/login_screen.dart b/lib/src/ui/login/login_screen.dart index 20966aa..75839a1 100644 --- a/lib/src/ui/login/login_screen.dart +++ b/lib/src/ui/login/login_screen.dart @@ -86,7 +86,8 @@ class _LoginScreenState extends State { padding: context.bodyAllPadding.copyWith(bottom: 20), child: Center( child: InkWell( - onTap: () async { + onTap: () async + { if (_formKey.currentState?.validate() ?? false) { final success = await pageNotifier.sendOtp(phoneController.text, context); diff --git a/lib/src/ui/login/signup_screen.dart b/lib/src/ui/login/signup_screen.dart index a58e066..35acd54 100644 --- a/lib/src/ui/login/signup_screen.dart +++ b/lib/src/ui/login/signup_screen.dart @@ -93,6 +93,8 @@ class _SingnuScreenState extends State { }, ), ])), + + Text( "", style: context.customMedium(APPCOLOR.balck1A1A1A, 18), diff --git a/lib/src/ui/map/add_locations.dart b/lib/src/ui/map/add_locations.dart index 1213348..9d098c9 100644 --- a/lib/src/ui/map/add_locations.dart +++ b/lib/src/ui/map/add_locations.dart @@ -120,6 +120,9 @@ class _AddLocationAddressState extends State { } } + + + void _onMapTapped(LatLng tappedPoint) { setState(() { _selectedLocation = tappedPoint; diff --git a/lib/src/ui/otp/login_otp.dart b/lib/src/ui/otp/login_otp.dart index a03ad23..42dfd67 100644 --- a/lib/src/ui/otp/login_otp.dart +++ b/lib/src/ui/otp/login_otp.dart @@ -85,7 +85,8 @@ class _LoginOtpScreenState extends State { style: const TextStyle(fontSize: 17), textFieldAlignment: MainAxisAlignment.spaceBetween, fieldStyle: FieldStyle.box, - onCompleted: (pin) async { + onCompleted: (pin) async + { final success = await pageNotifier.loginOtp(pin, context); if (success) diff --git a/lib/src/ui/profilepage/profile_screen.dart b/lib/src/ui/profilepage/profile_screen.dart index 39008a5..45eb98a 100644 --- a/lib/src/ui/profilepage/profile_screen.dart +++ b/lib/src/ui/profilepage/profile_screen.dart @@ -32,8 +32,7 @@ class _ProfileScreenState extends State { var top = 0.0; @override - void initState() - { + void initState() { Provider.of(context, listen: false).getProfile(context); getUserDetails(); super.initState(); @@ -53,8 +52,7 @@ class _ProfileScreenState extends State { body: NestedScrollView( headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return [ - Consumer(builder: (context, provider, child) - { + Consumer(builder: (context, provider, child) { return SliverAppBar( expandedHeight: 180.0, floating: false, @@ -187,18 +185,18 @@ class _ProfileScreenState extends State { title: const Text('Change Password'), trailing: Icon(MdiIcons.chevronRight), ), - ListTile( - onTap: () { - // Navigator.of(context).push(MaterialPageRoute( - // builder: (context) { - // return const CardCheckoutScreen(); - // }, - // )); - }, - leading: Icon(MdiIcons.cardOutline), - title: const Text('Payment Method'), - trailing: Icon(MdiIcons.chevronRight), - ), + // ListTile( + // onTap: () { + // // Navigator.of(context).push(MaterialPageRoute( + // // builder: (context) { + // // return const CardCheckoutScreen(); + // // }, + // // )); + // }, + // leading: Icon(MdiIcons.cardOutline), + // title: const Text('Payment Method'), + // trailing: Icon(MdiIcons.chevronRight), + // ), ListTile( onTap: () { context.push(MyRoutes.MYORDER); @@ -207,18 +205,18 @@ class _ProfileScreenState extends State { title: const Text('My Order'), trailing: Icon(MdiIcons.chevronRight), ), - ListTile( - onTap: () { - Navigator.of(context).push(MaterialPageRoute( - builder: (context) { - return const NotificationScreen(); - }, - )); - }, - leading: Icon(MdiIcons.bellOutline), - title: const Text('Notifications'), - trailing: Icon(MdiIcons.chevronRight), - ), + // ListTile( + // onTap: () { + // Navigator.of(context).push(MaterialPageRoute( + // builder: (context) { + // return const NotificationScreen(); + // }, + // )); + // }, + // leading: Icon(MdiIcons.bellOutline), + // title: const Text('Notifications'), + // trailing: Icon(MdiIcons.chevronRight), + // ), // ListTile( // onTap: () { // Navigator.of(context).push(MaterialPageRoute( @@ -284,7 +282,6 @@ class _ProfileScreenState extends State { ), InkWell( onTap: () { - print("fjnghkjfjghj"); Provider.of(context, listen: false) .customerLogOut(context); }, diff --git a/lib/src/ui/splash/splash_screen.dart b/lib/src/ui/splash/splash_screen.dart index a5b068f..a2a1b2a 100644 --- a/lib/src/ui/splash/splash_screen.dart +++ b/lib/src/ui/splash/splash_screen.dart @@ -29,11 +29,12 @@ class _SplashScreenState extends State { @override void initState() { - Future.delayed(const Duration(seconds: 2), () async { + Future.delayed(const Duration(seconds: 2), () async + { - Provider.of(context, listen: false) - .refreshToken(context); - if (await SharedPrefUtils.isFreshInstall()) { + Provider.of(context, listen: false) .refreshToken(context); + if (await SharedPrefUtils.isFreshInstall()) + { context.clearAndPush(routePath: MyRoutes.ONBOARDING); } else { context.clearAndPush(routePath: MyRoutes.BOTTOMNAV); diff --git a/lib/utils/constants/shared_pref_utils.dart b/lib/utils/constants/shared_pref_utils.dart index 5dab2f8..47e5b46 100644 --- a/lib/utils/constants/shared_pref_utils.dart +++ b/lib/utils/constants/shared_pref_utils.dart @@ -46,7 +46,7 @@ class SharedPrefUtils { }) async { SharedPreferences prefs = await SharedPreferences.getInstance(); - print("lkdjglkdfhgkhl ${user.firstName}"); + print("lkdjglkdfhgkhl ${user.firstName ?? " "}"); await prefs.setString(KEY_FIRSTNAME, user.firstName ?? ""); await prefs.setString(KEY_LAST_NAME, user.lastName ?? ""); await prefs.setString(KEY_EMAIL, user.email ?? " ");