updateProfile

This commit is contained in:
2025-02-03 01:29:42 +05:30
parent 42aaa7cdad
commit 1f7254ecaa
48 changed files with 6088 additions and 2473 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -10,8 +10,10 @@ import 'package:connectivity_plus/src/connectivity_plus_web.dart';
import 'package:fluttertoast/fluttertoast_web.dart'; import 'package:fluttertoast/fluttertoast_web.dart';
import 'package:geolocator_web/geolocator_web.dart'; import 'package:geolocator_web/geolocator_web.dart';
import 'package:google_maps_flutter_web/google_maps_flutter_web.dart'; import 'package:google_maps_flutter_web/google_maps_flutter_web.dart';
import 'package:image_picker_for_web/image_picker_for_web.dart';
import 'package:package_info_plus/src/package_info_plus_web.dart'; import 'package:package_info_plus/src/package_info_plus_web.dart';
import 'package:shared_preferences_web/shared_preferences_web.dart'; import 'package:shared_preferences_web/shared_preferences_web.dart';
import 'package:url_launcher_web/url_launcher_web.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart';
void registerPlugins([final Registrar? pluginRegistrar]) { void registerPlugins([final Registrar? pluginRegistrar]) {
@@ -20,7 +22,9 @@ void registerPlugins([final Registrar? pluginRegistrar]) {
FluttertoastWebPlugin.registerWith(registrar); FluttertoastWebPlugin.registerWith(registrar);
GeolocatorPlugin.registerWith(registrar); GeolocatorPlugin.registerWith(registrar);
GoogleMapsPlugin.registerWith(registrar); GoogleMapsPlugin.registerWith(registrar);
ImagePickerPlugin.registerWith(registrar);
PackageInfoPlusWebPlugin.registerWith(registrar); PackageInfoPlusWebPlugin.registerWith(registrar);
SharedPreferencesPlugin.registerWith(registrar); SharedPreferencesPlugin.registerWith(registrar);
UrlLauncherPlugin.registerWith(registrar);
registrar.registerMessageHandler(); registrar.registerMessageHandler();
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,533 +1,629 @@
animation_list animation_list
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/animation_list-3.1.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/animation_list-3.1.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/animation_list-3.1.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/animation_list-3.1.0/lib/
animations animations
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/animations-2.0.11/ file:///Users/apple/.pub-cache/hosted/pub.dev/animations-2.0.11/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/animations-2.0.11/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/animations-2.0.11/lib/
args args
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/args-2.6.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/args-2.6.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/args-2.6.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/args-2.6.0/lib/
async async
2.18 2.18
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/async-2.11.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/async-2.11.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/async-2.11.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/async-2.11.0/lib/
back_button_interceptor back_button_interceptor
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/back_button_interceptor-8.0.3/ file:///Users/apple/.pub-cache/hosted/pub.dev/back_button_interceptor-8.0.3/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/back_button_interceptor-8.0.3/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/back_button_interceptor-8.0.3/lib/
boolean_selector boolean_selector
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/lib/
cached_network_image cached_network_image
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/lib/
cached_network_image_platform_interface cached_network_image_platform_interface
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/lib/
cached_network_image_web cached_network_image_web
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image_web-1.2.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_web-1.2.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image_web-1.2.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_web-1.2.0/lib/
carousel_slider carousel_slider
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/carousel_slider-5.0.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/carousel_slider-5.0.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/carousel_slider-5.0.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/carousel_slider-5.0.0/lib/
characters characters
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/characters-1.3.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/characters-1.3.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/characters-1.3.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/characters-1.3.0/lib/
clock clock
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/clock-1.1.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/clock-1.1.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/clock-1.1.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/clock-1.1.1/lib/
collection collection
2.18 2.18
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/collection-1.18.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/collection-1.18.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/
connectivity_plus connectivity_plus
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/lib/
connectivity_plus_platform_interface connectivity_plus_platform_interface
2.18 2.18
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus_platform_interface-2.0.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus_platform_interface-2.0.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus_platform_interface-2.0.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus_platform_interface-2.0.1/lib/
cross_file
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/cross_file-0.3.4+2/
file:///Users/apple/.pub-cache/hosted/pub.dev/cross_file-0.3.4+2/lib/
crypto crypto
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/crypto-3.0.6/ file:///Users/apple/.pub-cache/hosted/pub.dev/crypto-3.0.6/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/crypto-3.0.6/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/crypto-3.0.6/lib/
csslib csslib
3.1 3.1
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/csslib-1.0.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/csslib-1.0.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/csslib-1.0.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/csslib-1.0.2/lib/
cupertino_icons cupertino_icons
3.1 3.1
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/ file:///Users/apple/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/lib/
dbus dbus
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dbus-0.7.11/ file:///Users/apple/.pub-cache/hosted/pub.dev/dbus-0.7.11/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dbus-0.7.11/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/dbus-0.7.11/lib/
dio dio
2.18 2.18
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dio-5.7.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/dio-5.7.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dio-5.7.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/dio-5.7.0/lib/
dio_web_adapter dio_web_adapter
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0/lib/
dots_indicator dots_indicator
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dots_indicator-3.0.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/dots_indicator-3.0.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dots_indicator-3.0.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/dots_indicator-3.0.0/lib/
dotted_border dotted_border
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dotted_border-2.1.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/dotted_border-2.1.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dotted_border-2.1.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/dotted_border-2.1.0/lib/
fake_async fake_async
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fake_async-1.3.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/fake_async-1.3.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fake_async-1.3.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/fake_async-1.3.1/lib/
ffi ffi
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/ffi-2.1.3/ file:///Users/apple/.pub-cache/hosted/pub.dev/ffi-2.1.3/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/ffi-2.1.3/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/ffi-2.1.3/lib/
file file
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/file-7.0.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/file-7.0.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/file-7.0.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/file-7.0.1/lib/
file_selector_linux
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/lib/
file_selector_macos
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+2/
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+2/lib/
file_selector_platform_interface
3.0
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_platform_interface-2.6.2/
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_platform_interface-2.6.2/lib/
file_selector_windows
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+3/
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+3/lib/
fixnum fixnum
3.1 3.1
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fixnum-1.1.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/fixnum-1.1.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fixnum-1.1.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/fixnum-1.1.1/lib/
flutter_animate flutter_animate
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_animate-4.5.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_animate-4.5.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_animate-4.5.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_animate-4.5.2/lib/
flutter_cache_manager flutter_cache_manager
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/lib/
flutter_google_places flutter_google_places
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_google_places-0.3.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_google_places-0.3.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_google_places-0.3.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_google_places-0.3.0/lib/
flutter_lints flutter_lints
3.1 3.1
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_lints-3.0.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_lints-3.0.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_lints-3.0.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_lints-3.0.2/lib/
flutter_plugin_android_lifecycle flutter_plugin_android_lifecycle
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/lib/
flutter_rating_stars flutter_rating_stars
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_rating_stars-1.1.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_rating_stars-1.1.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_rating_stars-1.1.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_rating_stars-1.1.0/lib/
flutter_screenutil flutter_screenutil
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3/lib/
flutter_shaders flutter_shaders
2.19 2.19
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_shaders-0.1.3/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_shaders-0.1.3/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_shaders-0.1.3/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_shaders-0.1.3/lib/
flutter_svg flutter_svg
2.19 2.19
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_svg-2.0.9/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_svg-2.0.9/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_svg-2.0.9/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_svg-2.0.9/lib/
flutter_toggle_tab flutter_toggle_tab
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_toggle_tab-1.5.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_toggle_tab-1.5.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_toggle_tab-1.5.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_toggle_tab-1.5.1/lib/
fluttertoast fluttertoast
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/ file:///Users/apple/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/lib/
fpdart fpdart
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fpdart-1.1.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/fpdart-1.1.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fpdart-1.1.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/fpdart-1.1.1/lib/
gap gap
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/gap-3.0.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/gap-3.0.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/gap-3.0.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/gap-3.0.1/lib/
geocoding geocoding
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding-3.0.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding-3.0.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding-3.0.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding-3.0.0/lib/
geocoding_android geocoding_android
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/lib/
geocoding_ios geocoding_ios
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/lib/
geocoding_platform_interface geocoding_platform_interface
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_platform_interface-3.2.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_platform_interface-3.2.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_platform_interface-3.2.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_platform_interface-3.2.0/lib/
geolocator geolocator
2.15 2.15
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator-13.0.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator-13.0.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator-13.0.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator-13.0.2/lib/
geolocator_android geolocator_android
2.15 2.15
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/lib/
geolocator_apple geolocator_apple
2.15 2.15
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/lib/
geolocator_platform_interface geolocator_platform_interface
2.15 2.15
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_platform_interface-4.2.4/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_platform_interface-4.2.4/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_platform_interface-4.2.4/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_platform_interface-4.2.4/lib/
geolocator_web geolocator_web
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/lib/
geolocator_windows geolocator_windows
2.15 2.15
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/lib/
get_it get_it
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/get_it-8.0.3/ file:///Users/apple/.pub-cache/hosted/pub.dev/get_it-8.0.3/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/get_it-8.0.3/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/get_it-8.0.3/lib/
go_router go_router
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/go_router-14.7.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/go_router-14.7.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/go_router-14.7.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/go_router-14.7.1/lib/
google_api_headers google_api_headers
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/lib/
google_fonts google_fonts
2.14 2.14
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_fonts-4.0.4/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_fonts-4.0.4/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_fonts-4.0.4/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_fonts-4.0.4/lib/
google_maps google_maps
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps-8.1.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps-8.1.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps-8.1.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps-8.1.1/lib/
google_maps_flutter google_maps_flutter
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/lib/
google_maps_flutter_android google_maps_flutter_android
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/lib/
google_maps_flutter_ios google_maps_flutter_ios
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/lib/
google_maps_flutter_platform_interface google_maps_flutter_platform_interface
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_platform_interface-2.9.5/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_platform_interface-2.9.5/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_platform_interface-2.9.5/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_platform_interface-2.9.5/lib/
google_maps_flutter_web google_maps_flutter_web
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/lib/
google_maps_webservice google_maps_webservice
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_webservice-0.0.20-nullsafety.5/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_webservice-0.0.20-nullsafety.5/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_webservice-0.0.20-nullsafety.5/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_webservice-0.0.20-nullsafety.5/lib/
html html
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/html-0.15.5/ file:///Users/apple/.pub-cache/hosted/pub.dev/html-0.15.5/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/html-0.15.5/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/html-0.15.5/lib/
http http
2.19 2.19
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/http-0.13.6/ file:///Users/apple/.pub-cache/hosted/pub.dev/http-0.13.6/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/http-0.13.6/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/http-0.13.6/lib/
http_parser http_parser
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/http_parser-4.0.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/http_parser-4.0.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/http_parser-4.0.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/http_parser-4.0.2/lib/
image_picker
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker-1.1.2/
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker-1.1.2/lib/
image_picker_android
3.5
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+20/
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+20/lib/
image_picker_for_web
3.4
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/lib/
image_picker_ios
3.4
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/lib/
image_picker_linux
2.19
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/lib/
image_picker_macos
3.4
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/lib/
image_picker_platform_interface
3.4
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_platform_interface-2.10.1/
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_platform_interface-2.10.1/lib/
image_picker_windows
2.19
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/lib/
intl intl
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/intl-0.19.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/intl-0.19.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/intl-0.19.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/intl-0.19.0/lib/
json_annotation json_annotation
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/lib/
leak_tracker leak_tracker
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker-10.0.4/ file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker-10.0.4/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/
leak_tracker_flutter_testing leak_tracker_flutter_testing
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.3/ file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.3/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/
leak_tracker_testing leak_tracker_testing
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib/
lints lints
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/lints-3.0.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/lints-3.0.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/lints-3.0.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/lints-3.0.0/lib/
loader_overlay loader_overlay
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/loader_overlay-4.0.4+1/ file:///Users/apple/.pub-cache/hosted/pub.dev/loader_overlay-4.0.4+1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/loader_overlay-4.0.4+1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/loader_overlay-4.0.4+1/lib/
logging logging
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/logging-1.3.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/logging-1.3.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/logging-1.3.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/logging-1.3.0/lib/
matcher matcher
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/ file:///Users/apple/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/lib/
material_color_utilities material_color_utilities
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/material_color_utilities-0.8.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/material_color_utilities-0.8.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1/lib/
material_design_icons_flutter material_design_icons_flutter
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/material_design_icons_flutter-7.0.7296/ file:///Users/apple/.pub-cache/hosted/pub.dev/material_design_icons_flutter-7.0.7296/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/material_design_icons_flutter-7.0.7296/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/material_design_icons_flutter-7.0.7296/lib/
meta meta
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/meta-1.12.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/meta-1.15.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/meta-1.12.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/meta-1.15.0/lib/
mime
3.2
file:///Users/apple/.pub-cache/hosted/pub.dev/mime-2.0.0/
file:///Users/apple/.pub-cache/hosted/pub.dev/mime-2.0.0/lib/
nested nested
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/nested-1.0.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/nested-1.0.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/nested-1.0.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/nested-1.0.0/lib/
nm nm
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/nm-0.5.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/nm-0.5.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/nm-0.5.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/nm-0.5.0/lib/
octo_image octo_image
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/octo_image-2.1.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/octo_image-2.1.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/octo_image-2.1.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/octo_image-2.1.0/lib/
otp_text_field otp_text_field
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/otp_text_field-1.1.3/ file:///Users/apple/.pub-cache/hosted/pub.dev/otp_text_field-1.1.3/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/otp_text_field-1.1.3/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/otp_text_field-1.1.3/lib/
package_info_plus package_info_plus
2.18 2.18
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/lib/
package_info_plus_platform_interface package_info_plus_platform_interface
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-2.0.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-2.0.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-2.0.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-2.0.1/lib/
path path
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path-1.9.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/path-1.9.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path-1.9.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/path-1.9.0/lib/
path_drawing path_drawing
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_drawing-1.0.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_drawing-1.0.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_drawing-1.0.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_drawing-1.0.1/lib/
path_parsing path_parsing
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_parsing-1.1.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_parsing-1.1.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_parsing-1.1.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_parsing-1.1.0/lib/
path_provider path_provider
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider-2.1.5/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider-2.1.5/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider-2.1.5/lib/
path_provider_android path_provider_android
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/lib/
path_provider_foundation path_provider_foundation
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/lib/
path_provider_linux path_provider_linux
2.19 2.19
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/lib/
path_provider_platform_interface path_provider_platform_interface
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/lib/
path_provider_windows path_provider_windows
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/lib/
petitparser petitparser
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/petitparser-6.0.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/petitparser-6.0.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/petitparser-6.0.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/petitparser-6.0.2/lib/
platform platform
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/platform-3.1.6/ file:///Users/apple/.pub-cache/hosted/pub.dev/platform-3.1.6/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/platform-3.1.6/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/platform-3.1.6/lib/
plugin_platform_interface plugin_platform_interface
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8/ file:///Users/apple/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8/lib/
pretty_dio_logger pretty_dio_logger
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/pretty_dio_logger-1.4.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/pretty_dio_logger-1.4.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/pretty_dio_logger-1.4.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/pretty_dio_logger-1.4.0/lib/
provider provider
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/provider-6.1.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/provider-6.1.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/provider-6.1.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/provider-6.1.2/lib/
readmore readmore
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/readmore-3.0.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/readmore-3.0.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/readmore-3.0.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/readmore-3.0.0/lib/
rxdart rxdart
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/rxdart-0.26.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/rxdart-0.26.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/rxdart-0.26.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/rxdart-0.26.0/lib/
sanitize_html sanitize_html
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sanitize_html-2.1.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/sanitize_html-2.1.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sanitize_html-2.1.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/sanitize_html-2.1.0/lib/
shared_preferences shared_preferences
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/lib/
shared_preferences_android shared_preferences_android
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/lib/
shared_preferences_foundation shared_preferences_foundation
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/lib/
shared_preferences_linux shared_preferences_linux
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/lib/
shared_preferences_platform_interface shared_preferences_platform_interface
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/lib/
shared_preferences_web shared_preferences_web
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/lib/
shared_preferences_windows shared_preferences_windows
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/lib/
shimmer
2.17
file:///Users/apple/.pub-cache/hosted/pub.dev/shimmer-3.0.0/
file:///Users/apple/.pub-cache/hosted/pub.dev/shimmer-3.0.0/lib/
skeletonizer
3.0
file:///Users/apple/.pub-cache/hosted/pub.dev/skeletonizer-1.4.3/
file:///Users/apple/.pub-cache/hosted/pub.dev/skeletonizer-1.4.3/lib/
source_span source_span
2.18 2.18
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/source_span-1.10.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/source_span-1.10.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/source_span-1.10.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/source_span-1.10.0/lib/
sprintf sprintf
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sprintf-7.0.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/sprintf-7.0.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sprintf-7.0.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/sprintf-7.0.0/lib/
sqflite sqflite
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/ file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/lib/
sqflite_common sqflite_common
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite_common-2.5.4/ file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite_common-2.5.4/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite_common-2.5.4/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite_common-2.5.4/lib/
stack_trace stack_trace
2.18 2.18
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/
stream_channel stream_channel
2.19 2.19
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/lib/
stream_transform stream_transform
3.1 3.1
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stream_transform-2.1.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/stream_transform-2.1.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stream_transform-2.1.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/stream_transform-2.1.1/lib/
string_scanner string_scanner
2.18 2.18
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/
synchronized synchronized
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/ file:///Users/apple/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/lib/
term_glyph term_glyph
2.12 2.12
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/
test_api test_api
3.0 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/test_api-0.7.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/test_api-0.7.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/test_api-0.7.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/
typed_data typed_data
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/typed_data-1.3.2/ file:///Users/apple/.pub-cache/hosted/pub.dev/typed_data-1.3.2/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/typed_data-1.3.2/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/typed_data-1.3.2/lib/
url_launcher
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher-6.3.1/
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher-6.3.1/lib/
url_launcher_android
3.5
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.14/
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.14/lib/
url_launcher_ios
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.2/
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.2/lib/
url_launcher_linux
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/lib/
url_launcher_macos
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_macos-3.2.2/
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_macos-3.2.2/lib/
url_launcher_platform_interface
3.1
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_platform_interface-2.3.2/
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_platform_interface-2.3.2/lib/
url_launcher_web
3.3
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_web-2.3.3/
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_web-2.3.3/lib/
url_launcher_windows
3.4
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/lib/
uuid uuid
3.0 3.0
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/uuid-4.5.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/uuid-4.5.1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/uuid-4.5.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/uuid-4.5.1/lib/
vector_graphics vector_graphics
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics-1.1.10+1/ file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics-1.1.10+1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics-1.1.10+1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics-1.1.10+1/lib/
vector_graphics_codec vector_graphics_codec
2.17 2.17
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.10+1/ file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.10+1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.10+1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.10+1/lib/
vector_graphics_compiler vector_graphics_compiler
2.19 2.19
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.10+1/ file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.10+1/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.10+1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.10+1/lib/
vector_math vector_math
2.14 2.14
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_math-2.1.4/ file:///Users/apple/.pub-cache/hosted/pub.dev/vector_math-2.1.4/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_math-2.1.4/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/vector_math-2.1.4/lib/
vm_service vm_service
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vm_service-14.2.1/ file:///Users/apple/.pub-cache/hosted/pub.dev/vm_service-14.2.5/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vm_service-14.2.1/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/vm_service-14.2.5/lib/
web web
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/web-1.1.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/web-1.1.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/web-1.1.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/web-1.1.0/lib/
win32 win32
3.4 3.4
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/win32-5.5.4/ file:///Users/apple/.pub-cache/hosted/pub.dev/win32-5.5.4/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/win32-5.5.4/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/win32-5.5.4/lib/
xdg_directories xdg_directories
3.3 3.3
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/lib/
xml xml
3.2 3.2
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/xml-6.5.0/ file:///Users/apple/.pub-cache/hosted/pub.dev/xml-6.5.0/
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/xml-6.5.0/lib/ file:///Users/apple/.pub-cache/hosted/pub.dev/xml-6.5.0/lib/
grocery_app grocery_app
3.4 3.4
file:///Users/rajeevsingh/Documents/FlutterProject/freelanceing/groceryApp/ file:///Users/apple/Documents/Allflutter%20/freelancing/groceryApp/
file:///Users/rajeevsingh/Documents/FlutterProject/freelanceing/groceryApp/lib/ file:///Users/apple/Documents/Allflutter%20/freelancing/groceryApp/lib/
sky_engine sky_engine
3.2 3.2
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/bin/cache/pkg/sky_engine/ file:///Users/apple/Documents/development/flutter/bin/cache/pkg/sky_engine/
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/bin/cache/pkg/sky_engine/lib/ file:///Users/apple/Documents/development/flutter/bin/cache/pkg/sky_engine/lib/
flutter flutter
3.3 3.3
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter/ file:///Users/apple/Documents/development/flutter/packages/flutter/
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter/lib/ file:///Users/apple/Documents/development/flutter/packages/flutter/lib/
flutter_test flutter_test
3.3 3.3
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_test/ file:///Users/apple/Documents/development/flutter/packages/flutter_test/
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_test/lib/ file:///Users/apple/Documents/development/flutter/packages/flutter_test/lib/
flutter_web_plugins flutter_web_plugins
3.2 3.2
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_web_plugins/ file:///Users/apple/Documents/development/flutter/packages/flutter_web_plugins/
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_web_plugins/lib/ file:///Users/apple/Documents/development/flutter/packages/flutter_web_plugins/lib/
2 2

View File

@@ -1 +1 @@
3.22.3 3.24.3

View File

@@ -1,30 +1,47 @@
# This is a generated file; do not edit or check into version control. # This is a generated file; do not edit or check into version control.
connectivity_plus=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/ connectivity_plus=/Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/
flutter_plugin_android_lifecycle=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/ file_selector_linux=/Users/apple/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/
fluttertoast=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/ file_selector_macos=/Users/apple/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+2/
geocoding=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding-3.0.0/ file_selector_windows=/Users/apple/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+3/
geocoding_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/ flutter_plugin_android_lifecycle=/Users/apple/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/
geocoding_ios=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/ fluttertoast=/Users/apple/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/
geolocator=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator-13.0.2/ geocoding=/Users/apple/.pub-cache/hosted/pub.dev/geocoding-3.0.0/
geolocator_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/ geocoding_android=/Users/apple/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/
geolocator_apple=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/ geocoding_ios=/Users/apple/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/
geolocator_web=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/ geolocator=/Users/apple/.pub-cache/hosted/pub.dev/geolocator-13.0.2/
geolocator_windows=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/ geolocator_android=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/
google_api_headers=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/ geolocator_apple=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/
google_maps_flutter=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/ geolocator_web=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/
google_maps_flutter_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/ geolocator_windows=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/
google_maps_flutter_ios=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/ google_api_headers=/Users/apple/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/
google_maps_flutter_web=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/ google_maps_flutter=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/
package_info_plus=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/ google_maps_flutter_android=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/
path_provider=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider-2.1.5/ google_maps_flutter_ios=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/
path_provider_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/ google_maps_flutter_web=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/
path_provider_foundation=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/ image_picker=/Users/apple/.pub-cache/hosted/pub.dev/image_picker-1.1.2/
path_provider_linux=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/ image_picker_android=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+20/
path_provider_windows=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/ image_picker_for_web=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/
shared_preferences=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/ image_picker_ios=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/
shared_preferences_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/ image_picker_linux=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/
shared_preferences_foundation=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/ image_picker_macos=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/
shared_preferences_linux=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/ image_picker_windows=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/
shared_preferences_web=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/ package_info_plus=/Users/apple/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/
shared_preferences_windows=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/ path_provider=/Users/apple/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
sqflite=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/ path_provider_android=/Users/apple/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/
path_provider_foundation=/Users/apple/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
path_provider_linux=/Users/apple/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
path_provider_windows=/Users/apple/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/
shared_preferences=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/
shared_preferences_android=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/
shared_preferences_foundation=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/
shared_preferences_linux=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/
shared_preferences_web=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/
shared_preferences_windows=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/
sqflite=/Users/apple/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/
url_launcher=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher-6.3.1/
url_launcher_android=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.14/
url_launcher_ios=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.2/
url_launcher_linux=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/
url_launcher_macos=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_macos-3.2.2/
url_launcher_web=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_web-2.3.3/
url_launcher_windows=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/

File diff suppressed because one or more lines are too long

View File

@@ -7,9 +7,20 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<application <application
android:requestLegacyExternalStorage="true"
android:enableOnBackInvokedCallback="true" android:enableOnBackInvokedCallback="true"
android:label="grocery_app" android:label="grocery_app"
android:name="${applicationName}" android:name="${applicationName}"
@@ -40,6 +51,8 @@
</intent-filter> </intent-filter>
</activity> </activity>
<meta-data android:name="com.google.android.geo.API_KEY" <meta-data android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyAi3_Dls63iGs7Nccgdm-4FkS0rhT03-4U"/> android:value="AIzaSyAi3_Dls63iGs7Nccgdm-4FkS0rhT03-4U"/>
<!-- Don't delete the meta-data below. <!-- Don't delete the meta-data below.
@@ -59,4 +72,22 @@
<data android:mimeType="text/plain"/> <data android:mimeType="text/plain"/>
</intent> </intent>
</queries> </queries>
<!-- Provide required visibility configuration for API level 30 and above -->
<queries>
<!-- If your app checks for SMS support -->
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="sms" />
</intent>
<!-- If your app checks for call support -->
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="tel" />
</intent>
<!-- If your application checks for inAppBrowserView launch mode support -->
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
</manifest> </manifest>

View File

@@ -3,9 +3,11 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:grocery_app/src/core/network_services/service_locator.dart'; import 'package:grocery_app/src/core/network_services/service_locator.dart';
import 'package:grocery_app/src/core/routes/routes.dart'; import 'package:grocery_app/src/core/routes/routes.dart';
import 'package:grocery_app/src/logic/provider/addTocart_provider.dart'; import 'package:grocery_app/src/logic/provider/addTocart_provider.dart';
import 'package:grocery_app/src/logic/provider/address_provider.dart';
import 'package:grocery_app/src/logic/provider/auth_provider.dart'; import 'package:grocery_app/src/logic/provider/auth_provider.dart';
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart'; import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
import 'package:grocery_app/src/logic/provider/home_provider.dart'; import 'package:grocery_app/src/logic/provider/home_provider.dart';
import 'package:grocery_app/src/logic/provider/profile_provider.dart';
import 'package:grocery_app/src/ui/splash/splash_screen.dart'; import 'package:grocery_app/src/ui/splash/splash_screen.dart';
import 'package:grocery_app/utils/constants/color_constant.dart'; import 'package:grocery_app/utils/constants/color_constant.dart';
import 'package:grocery_app/utils/constants/string_constant.dart'; import 'package:grocery_app/utils/constants/string_constant.dart';
@@ -30,21 +32,23 @@ class MyApplication extends StatelessWidget {
splitScreenMode: true, splitScreenMode: true,
builder: (context, child) => GlobalLoaderOverlay( builder: (context, child) => GlobalLoaderOverlay(
overlayColor: APPCOLOR.whiteFBFEFB.withOpacity(0.5), overlayColor: APPCOLOR.whiteFBFEFB.withOpacity(0.5),
useDefaultLoading: false, useDefaultLoading: false,
// overlayWidgetBuilder: (progress) => const GlobalLoader(), // overlayWidgetBuilder: (progress) => const GlobalLoader(),
child: MultiProvider( child: MultiProvider(
providers: [ providers: [
ChangeNotifierProvider(create: (_) => AuthProvider()), ChangeNotifierProvider(create: (_) => AuthProvider()),
ChangeNotifierProvider(create: (_) => ProductProvider()), ChangeNotifierProvider(create: (_) => ProductProvider()),
ChangeNotifierProvider(create: (_) => AddtocartProvider()), ChangeNotifierProvider(create: (_) => AddtocartProvider()),
ChangeNotifierProvider(create: (_) => BottomNavProvider()), ChangeNotifierProvider(create: (_) => BottomNavProvider()),
// ChangeNotifierProvider(create: (_) => HomeProvider()), ChangeNotifierProvider(create: (_) => AddressProvider()),
ChangeNotifierProvider(create: (_) => ProfileProvider()),
], ],
child: MaterialApp.router( child: MaterialApp.router(
routerConfig: MyRoutes.router, routerConfig: MyRoutes.router,
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
theme: ThemeData( theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.lightGreen),
scaffoldBackgroundColor: Colors.white, scaffoldBackgroundColor: Colors.white,
canvasColor: const Color.fromRGBO(255, 255, 255, 1), canvasColor: const Color.fromRGBO(255, 255, 255, 1),
fontFamily: 'GoogleSans', fontFamily: 'GoogleSans',

View File

@@ -9,7 +9,8 @@ class NameTextField extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return
Container(
height: 60, height: 60,
width: MediaQuery.sizeOf(context).width, width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(border: Border.all(color: APPCOLOR.lightGreen), borderRadius: BorderRadius.circular(15)), decoration: BoxDecoration(border: Border.all(color: APPCOLOR.lightGreen), borderRadius: BorderRadius.circular(15)),
@@ -40,5 +41,7 @@ class NameTextField extends StatelessWidget {
), ),
), ),
); );
} }
} }

View File

@@ -60,8 +60,10 @@ class AppNetworkImage extends StatelessWidget {
)), )),
); );
}, },
placeholder: (context, url) { placeholder: (context, url)
return Container( {
return
Container(
width: width, width: width,
height: height, height: height,
decoration: BoxDecoration( decoration: BoxDecoration(
@@ -76,6 +78,7 @@ class AppNetworkImage extends StatelessWidget {
), ),
); );
}, },
imageBuilder: (context, cIMage) { imageBuilder: (context, cIMage) {
return Container( return Container(
width: width, width: width,

View File

@@ -1,33 +1,36 @@
class APIURL { class APIURL {
static const BASE_URL = "http://210.89.44.183:3333/xam/"; static const BASE_URL = "http://210.89.44.183:3333/xam/";
static const String sendOtp = "${BASE_URL}auth/send-otp/customer"; static const String sendOtp = "${BASE_URL}auth/send-otp/customer";
static const String verifyOtp = "${BASE_URL}auth/verify-otp/customer"; static const String verifyOtp = "${BASE_URL}auth/verify-otp/customer";
static const String loginOtp = "${BASE_URL}auth/login/customer";
static const String loginOtp = "${BASE_URL}auth/login/customer";
static const String login = "${BASE_URL}auth/login/vendor"; static const String login = "${BASE_URL}auth/login/vendor";
static const String customerRegister = "${BASE_URL}auth/register/customer"; static const String customerRegister = "${BASE_URL}auth/register/customer";
static const String getAllProduct = "${BASE_URL}products"; static const String getAllProduct = "${BASE_URL}products";
static const String getProductDetails = "${BASE_URL}products/"; static const String getProductDetails = "${BASE_URL}products/";
static const String getBanners = "${BASE_URL}banners"; static const String getBanners = "${BASE_URL}banners";
static const String customerLogOut = "${BASE_URL}auth/logout/customer"; static const String customerLogOut = "${BASE_URL}auth/logout/customer";
static const String getBestDealProduct = "${BASE_URL}products/best-deals"; static const String getBestDealProduct = "${BASE_URL}products/best-deals";
static const String getAllcategory = "${BASE_URL}categories"; static const String getAllcategory = "${BASE_URL}categories";
static const String addToWish = "${BASE_URL}carts/wishlist/items"; static const String addToWish = "${BASE_URL}carts/wishlist/items";
static const String deleteToWish = "${BASE_URL}carts/wishlist/items"; static const String deleteToWish = "${BASE_URL}carts/wishlist/items";
static const String addToCart = "${BASE_URL}carts/items"; static const String addToCart = "${BASE_URL}carts/items";
static const String gettAllWishList = "${BASE_URL}carts/wishlist"; static const String gettAllWishList = "${BASE_URL}carts/wishlist";
static const String similarProduct = "${BASE_URL}products/"; static const String similarProduct = "${BASE_URL}products/";
static const String getItemCards = "${BASE_URL}carts/current"; static const String getItemCards = "${BASE_URL}carts/current";
static const String checkPin = "${BASE_URL}pin-codes/check/"; static const String checkPin = "${BASE_URL}pin-codes/check/";
static const String deleteItem = "${BASE_URL}carts/items/"; static const String deleteItem = "${BASE_URL}carts/items/";
static const String userAddress = "${BASE_URL}user/addresses";
static const String addAddress = "${BASE_URL}user/addresses";
static const String getprofile = "${BASE_URL}user/profile/customer";
static const String refresh_token = "${BASE_URL}auth/refresh-token";
static const String uploadImage = "${BASE_URL}images/upload";
static const String updateProfile = "${BASE_URL}user/profile";
static const String updateStore = "${BASE_URL}stores/";
static const String forgetPassword = "${BASE_URL}auth/forgot-password/vendor"; static const String forgetPassword = "${BASE_URL}auth/forgot-password/vendor";
static const String verifyForgetPassword = static const String verifyForgetPassword =
"${BASE_URL}auth/forgot-password-verify-otp/vendor"; "${BASE_URL}auth/forgot-password-verify-otp/vendor";
@@ -36,10 +39,10 @@ class APIURL {
static const String getProduct = "${BASE_URL}products"; static const String getProduct = "${BASE_URL}products";
static const String getCategoryByLevel = "${BASE_URL}categories/by-level/1"; static const String getCategoryByLevel = "${BASE_URL}categories/by-level/1";
static const String getMe = "${BASE_URL}auth/me"; static const String getMe = "${BASE_URL}auth/me";
static const String refresh_token = "${BASE_URL}auth/refresh-token";
static const String createProduct = "${BASE_URL}products"; static const String createProduct = "${BASE_URL}products";
static const String uploadImage = "${BASE_URL}images/upload";
static const String deleteProduct = "${BASE_URL}products/"; static const String deleteProduct = "${BASE_URL}products/";
static const String updateProduct = "${BASE_URL}products/"; static const String updateProduct = "${BASE_URL}products/";
} }

View File

@@ -4,10 +4,12 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:grocery_app/src/data/allProduct_model.dart'; import 'package:grocery_app/src/data/allProduct_model.dart';
import 'package:grocery_app/src/ui/bottomnavigation/bottom_bar_widget.dart'; import 'package:grocery_app/src/ui/bottomnavigation/bottom_bar_widget.dart';
import 'package:grocery_app/src/ui/coupons/coupons_screen.dart';
import 'package:grocery_app/src/ui/entername/enter_fullname_screen.dart'; import 'package:grocery_app/src/ui/entername/enter_fullname_screen.dart';
import 'package:grocery_app/src/ui/fruitvegidetail/fruit_veggie_detail.dart'; import 'package:grocery_app/src/ui/fruitvegidetail/fruit_veggie_detail.dart';
import 'package:grocery_app/src/ui/login/login_screen.dart'; import 'package:grocery_app/src/ui/login/login_screen.dart';
import 'package:grocery_app/src/ui/login/signup_screen.dart'; import 'package:grocery_app/src/ui/login/signup_screen.dart';
import 'package:grocery_app/src/ui/map/add_locations.dart';
import 'package:grocery_app/src/ui/onboarding/on_boarding_screen.dart'; import 'package:grocery_app/src/ui/onboarding/on_boarding_screen.dart';
import 'package:grocery_app/src/ui/otp/login_otp.dart'; import 'package:grocery_app/src/ui/otp/login_otp.dart';
import 'package:grocery_app/src/ui/otp/otp_screen.dart'; import 'package:grocery_app/src/ui/otp/otp_screen.dart';
@@ -72,14 +74,16 @@ class MyRoutes {
pageBuilder: (context, state) => const FruitVeggieDetail(), pageBuilder: (context, state) => const FruitVeggieDetail(),
), ),
// animatedGoRoute( animatedGoRoute(
// path: PRODUCTDETAILS, path: COUPONSSCREEN,
// name: PRODUCTDETAILS, name: COUPONSSCREEN,
// pageBuilder: (context, state) pageBuilder: (context, state) => CouponsScreen(),
// { ),
// return const ProductDetails(); animatedGoRoute(
// } path: ADDRESSS,
// ), name: ADDRESSS,
pageBuilder: (context, state) => AddLocationAddress(),
),
animatedGoRoute( animatedGoRoute(
path: PRODUCTDETAILS, path: PRODUCTDETAILS,
@@ -219,44 +223,39 @@ class MyRoutes {
static const FRUITVEGGIEDETAIL = "/FruitVeggieDetail"; static const FRUITVEGGIEDETAIL = "/FruitVeggieDetail";
static const PRODUCTDETAILS = "/productdetails"; static const PRODUCTDETAILS = "/productdetails";
static const LOGINOTPSCREEN = "/loginotpscreen"; static const LOGINOTPSCREEN = "/loginotpscreen";
static const COUPONSSCREEN = "/CouponsScreen";
static const ADDRESSS = "/address";
static const SELECTACCOUNT = "/selectAccount";
static const DASHBOARD = "/dashboard";
static const LOGIN = "/login"; static const LOGIN = "/login";
static const SIGNUP = "/signup"; static const SIGNUP = "/signup";
static const ONBOARDING = "/onboarding"; static const ONBOARDING = "/onboarding";
static const TERMANDCONDITIONS = "/termsandcondition";
static const SETUPBUSSINESS = "/setupbussiness";
static const CREATESTORE = "/createStore";
static const SUBMITSCREEN = "/submitscreen";
static const APPROVEDSTATUS = "/approvedstatus";
static const DASHBOARDSCREEN = "/dashboardscreen"; // static const TERMANDCONDITIONS = "/termsandcondition";
static const CUSTOMERORDER = "/customerorder"; // static const SETUPBUSSINESS = "/setupbussiness";
// static const CREATESTORE = "/createStore";
// static const SUBMITSCREEN = "/submitscreen";
// static const APPROVEDSTATUS = "/approvedstatus";
static const PRODUCTFORMSCREEN = "/productformscreen"; // static const DASHBOARDSCREEN = "/dashboardscreen";
// static const CUSTOMERORDER = "/customerorder";
static const TRANSACTIONHISTORY = "/transationhistory"; // static const PRODUCTFORMSCREEN = "/productformscreen";
static const INSIGHTSHISTORY = "/insightshistory"; // static const TRANSACTIONHISTORY = "/transationhistory";
static const DETAILSBUSSINESS = "/detailsbussiness"; // static const INSIGHTSHISTORY = "/insightshistory";
static const STOREMANAGEMENT = "/storemanagement"; // static const DETAILSBUSSINESS = "/detailsbussiness";
static const SETTING = "/settings"; // static const STOREMANAGEMENT = "/storemanagement";
static const FORGETPASSWORD = "/forgetpassword"; // static const SETTING = "/settings";
static const VERIFYPASSWORD = "/verifypassword";
static const FORGETNEWPASSWORD = "/forgetnewpassword"; // static const FORGETPASSWORD = "/forgetpassword";
// static const VERIFYPASSWORD = "/verifypassword";
static const UPDATESTORE = "/updatestore"; // static const FORGETNEWPASSWORD = "/forgetnewpassword";
// static const UPDATESTORE = "/updatestore";
static const OTPSCREEN = "/otpscreen"; static const OTPSCREEN = "/otpscreen";
} }

182
lib/src/data/address.dart Normal file
View File

@@ -0,0 +1,182 @@
import 'dart:convert';
AddressResponse addressResponseFromJson(dynamic str) =>
AddressResponse.fromJson(json.decode(str));
dynamic addressResponseToJson(AddressResponse data) =>
json.encode(data.toJson());
class AddressResponse {
List<Datum>? data;
Meta? meta;
AddressResponse({
this.data,
this.meta,
});
factory AddressResponse.fromJson(Map<dynamic, dynamic> json) =>
AddressResponse(
data: List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
meta: Meta.fromJson(json["meta"]),
);
Map<dynamic, dynamic> toJson() => {
"data": List<dynamic>.from(data!.map((x) => x.toJson())),
"meta": meta!.toJson(),
};
}
class Datum {
dynamic id;
dynamic pincode;
dynamic phoneNumber;
dynamic alternatePhoneNumber;
dynamic addressLine;
dynamic landmark;
dynamic addressType;
dynamic city;
dynamic district;
dynamic name;
dynamic state;
dynamic country;
bool? isDeliverable;
bool? isDefault;
dynamic additionalInstructions;
DateTime? createdAt;
DateTime? updatedAt;
dynamic userId;
User? user;
Datum({
this.id,
this.pincode,
this.phoneNumber,
this.alternatePhoneNumber,
this.addressLine,
this.landmark,
this.addressType,
this.city,
this.district,
this.name,
this.state,
this.country,
this.isDeliverable,
this.isDefault,
this.additionalInstructions,
this.createdAt,
this.updatedAt,
this.userId,
this.user,
});
factory Datum.fromJson(Map<dynamic, dynamic> json) => Datum(
id: json["id"],
pincode: json["pincode"],
phoneNumber: json["phoneNumber"],
alternatePhoneNumber: json["alternatePhoneNumber"],
addressLine: json["addressLine"],
landmark: json["landmark"],
addressType: json["addressType"],
city: json["city"],
district: json["district"],
name: json["name"],
state: json["state"],
country: json["country"],
isDeliverable: json["isDeliverable"],
isDefault: json["isDefault"],
additionalInstructions: json["additionalInstructions"],
createdAt: DateTime.parse(json["createdAt"]),
updatedAt: DateTime.parse(json["updatedAt"]),
userId: json["userId"],
user: User.fromJson(json["user"]),
);
Map<dynamic, dynamic> toJson() => {
"id": id,
"pincode": pincode,
"phoneNumber": phoneNumber,
"alternatePhoneNumber": alternatePhoneNumber,
"addressLine": addressLine,
"landmark": landmark,
"addressType": addressType,
"city": city,
"district": district,
"name": name,
"state": state,
"country": country,
"isDeliverable": isDeliverable,
"isDefault": isDefault,
"additionalInstructions": additionalInstructions,
"createdAt": createdAt,
"updatedAt": updatedAt,
"userId": userId,
"user": user!.toJson(),
};
}
class User {
dynamic firstName;
dynamic lastName;
dynamic email;
dynamic phone;
User({
this.firstName,
this.lastName,
this.email,
this.phone,
});
factory User.fromJson(Map<dynamic, dynamic> json) => User(
firstName: json["firstName"],
lastName: json["lastName"],
email: json["email"],
phone: json["phone"],
);
Map<dynamic, dynamic> toJson() => {
"firstName": firstName,
"lastName": lastName,
"email": email,
"phone": phone,
};
}
class Meta {
int? total;
int? page;
int? limit;
int? lastPage;
bool? hasNextPage;
bool? hasPreviousPage;
Meta({
this.total,
this.page,
this.limit,
this.lastPage,
this.hasNextPage,
this.hasPreviousPage,
});
factory Meta.fromJson(Map<dynamic, dynamic> json) => Meta(
total: json["total"],
page: json["page"],
limit: json["limit"],
lastPage: json["lastPage"],
hasNextPage: json["hasNextPage"],
hasPreviousPage: json["hasPreviousPage"],
);
Map<dynamic, dynamic> toJson() => {
"total": total,
"page": page,
"limit": limit,
"lastPage": lastPage,
"hasNextPage": hasNextPage,
"hasPreviousPage": hasPreviousPage,
};
}

View File

@@ -0,0 +1,53 @@
// To parse this JSON data, do
//
// final uploadImage = uploadImageFromJson(jsonString);
import 'dart:convert';
UploadImage uploadImageFromJson(String str) => UploadImage.fromJson(json.decode(str));
String uploadImageToJson(UploadImage data) => json.encode(data.toJson());
class UploadImage {
int? status;
String? message;
Image? data;
UploadImage({
this.status,
this.message,
this.data,
});
factory UploadImage.fromJson(Map<String, dynamic> json) => UploadImage(
status: json["status"],
message: json["message"],
data: Image.fromJson(json["data"]),
);
Map<String, dynamic> toJson() => {
"status": status,
"message": message,
"data": data!.toJson(),
};
}
class Image {
String? url;
String? publicId;
Image({
this.url,
this.publicId,
});
factory Image.fromJson(Map<String, dynamic> json) => Image(
url: json["url"],
publicId: json["publicId"],
);
Map<String, dynamic> toJson() => {
"url": url,
"publicId": publicId,
};
}

View File

@@ -0,0 +1,110 @@
// To parse this JSON data, do
//
// final userProfile = userProfileFromJson(jsondynamic);
import 'dart:convert';
UserProfile userProfileFromJson(dynamic str) =>
UserProfile.fromJson(json.decode(str));
dynamic userProfileToJson(UserProfile data) => json.encode(data.toJson());
class UserProfile {
dynamic id;
dynamic email;
dynamic firstName;
dynamic lastName;
dynamic name;
dynamic img;
dynamic authType;
dynamic role;
dynamic phone;
dynamic password;
bool? isActive;
bool? isPhoneVerified;
dynamic vendorType;
dynamic businessId;
bool? isVendorAccountCreated;
bool? isVendorAccountActive;
bool? vendorTermsAccepted;
DateTime? createdAt;
DateTime? updatedAt;
dynamic rtHash;
dynamic resetToken;
dynamic resetTokenExpiresAt;
UserProfile({
this.id,
this.email,
this.firstName,
this.lastName,
this.name,
this.img,
this.authType,
this.role,
this.phone,
this.password,
this.isActive,
this.isPhoneVerified,
this.vendorType,
this.businessId,
this.isVendorAccountCreated,
this.isVendorAccountActive,
this.vendorTermsAccepted,
this.createdAt,
this.updatedAt,
this.rtHash,
this.resetToken,
this.resetTokenExpiresAt,
});
factory UserProfile.fromJson(Map<dynamic, dynamic> json) => UserProfile(
id: json["id"],
email: json["email"],
firstName: json["firstName"],
lastName: json["lastName"],
name: json["name"],
img: json["img"],
authType: json["authType"],
role: json["role"],
phone: json["phone"],
password: json["password"],
isActive: json["isActive"],
isPhoneVerified: json["isPhoneVerified"],
vendorType: json["vendorType"],
businessId: json["businessId"],
isVendorAccountCreated: json["isVendorAccountCreated"],
isVendorAccountActive: json["isVendorAccountActive"],
vendorTermsAccepted: json["vendorTermsAccepted"],
createdAt: DateTime?.parse(json["createdAt"]),
updatedAt: DateTime?.parse(json["updatedAt"]),
rtHash: json["rtHash"],
resetToken: json["resetToken"],
resetTokenExpiresAt: json["resetTokenExpiresAt"],
);
Map<dynamic, dynamic> toJson() => {
"id": id,
"email": email,
"firstName": firstName,
"lastName": lastName,
"name": name,
"img": img,
"authType": authType,
"role": role,
"phone": phone,
"password": password,
"isActive": isActive,
"isPhoneVerified": isPhoneVerified,
"vendorType": vendorType,
"businessId": businessId,
"isVendorAccountCreated": isVendorAccountCreated,
"isVendorAccountActive": isVendorAccountActive,
"vendorTermsAccepted": vendorTermsAccepted,
"createdAt": createdAt,
"updatedAt": updatedAt,
"rtHash": rtHash,
"resetToken": resetToken,
"resetTokenExpiresAt": resetTokenExpiresAt,
};
}

View File

@@ -1,3 +1,256 @@
// // To parse this JSON data, do
// //
// // final wishListModel = wishListModelFromJson(jsondynamic);
// import 'dart:convert';
// WishListModel wishListModelFromJson(dynamic str) => WishListModel.fromJson(json.decode(str));
// dynamic wishListModelToJson(WishListModel data) => json.encode(data.toJson());
// class WishListModel {
// dynamic id;
// dynamic userId;
// DateTime?? createdAt;
// DateTime?? updatedAt;
// List<WishListItem>? items;
// dynamic? totalItems;
// WishListModel({
// this.id,
// this.userId,
// this.createdAt,
// this.updatedAt,
// this.items,
// this.totalItems,
// });
// factory WishListModel.fromJson(Map<dynamic, dynamic> json) => WishListModel(
// id: json["id"],
// userId: json["userId"],
// createdAt: DateTime?.parse(json["createdAt"]),
// updatedAt: DateTime?.parse(json["updatedAt"]),
// items: List<WishListItem>.from(json["items"].map((x) => WishListItem.fromJson(x))),
// totalItems: json["totalItems"],
// );
// Map<dynamic, dynamic> toJson() => {
// "id": id,
// "userId": userId,
// "createdAt": createdAt,
// "updatedAt": updatedAt,
// "items": List<dynamic>.from(items!.map((x) => x.toJson())),
// "totalItems": totalItems,
// };
// }
// class WishListItem {
// dynamic id;
// dynamic wishlistId;
// dynamic productId;
// dynamic storeId;
// DateTime?? createdAt;
// DateTime?? updatedAt;
// ProductDatum? product;
// Store? store;
// WishListItem({
// this.id,
// this.wishlistId,
// this.productId,
// this.storeId,
// this.createdAt,
// this.updatedAt,
// this.product,
// this.store,
// });
// factory WishListItem.fromJson(Map<dynamic, dynamic> json) => WishListItem(
// id: json["id"],
// wishlistId: json["wishlistId"],
// productId: json["productId"],
// storeId: json["storeId"],
// createdAt: DateTime?.parse(json["createdAt"]),
// updatedAt: DateTime?.parse(json["updatedAt"]),
// product: ProductDatum.fromJson(json["product"]),
// store: Store.fromJson(json["store"]),
// );
// Map<dynamic, dynamic> toJson() => {
// "id": id,
// "wishlistId": wishlistId,
// "productId": productId,
// "storeId": storeId,
// "createdAt": createdAt,
// "updatedAt": updatedAt,
// "product": product!.toJson(),
// "store": store!.toJson(),
// };
// }
// class ProductDatum {
// dynamic id;
// dynamic name;
// dynamic description;
// dynamic additionalInfo;
// dynamic brand;
// dynamic basePrice;
// dynamic discountPrice;
// dynamic stock;
// dynamic quantity;
// dynamic unit;
// dynamic slug;
// dynamic rating;
// bool? isInStock;
// bool? isActive;
// bool? isInWishlist;
// DateTime?? createdAt;
// DateTime?? updatedAt;
// dynamic storeId;
// dynamic categoryId;
// dynamic productTypeId;
// dynamic timeSlotId;
// ProductDatum({
// this.id,
// this.name,
// this.description,
// this.additionalInfo,
// this.brand,
// this.basePrice,
// this.discountPrice,
// this.stock,
// this.quantity,
// this.unit,
// this.slug,
// this.rating,
// this.isInStock,
// this.isActive,
// this.isInWishlist,
// this.createdAt,
// this.updatedAt,
// this.storeId,
// this.categoryId,
// this.productTypeId,
// this.timeSlotId,
// });
// factory ProductDatum.fromJson(Map<dynamic, dynamic> json) => ProductDatum(
// id: json["id"],
// name: json["name"],
// description: json["description"],
// additionalInfo: json["additionalInfo"],
// brand: json["brand"],
// basePrice: json["basePrice"],
// discountPrice: json["discountPrice"],
// stock: json["stock"],
// quantity: json["quantity"],
// unit: json["unit"],
// slug: json["slug"],
// rating: json["rating"],
// isInStock: json["isInStock"],
// isActive: json["isActive"],
// isInWishlist: json["isInWishlist"],
// createdAt: DateTime?.parse(json["createdAt"]),
// updatedAt: DateTime?.parse(json["updatedAt"]),
// storeId: json["storeId"],
// categoryId: json["categoryId"],
// productTypeId: json["productTypeId"],
// timeSlotId: json["timeSlotId"],
// );
// Map<dynamic, dynamic> toJson() => {
// "id": id,
// "name": name,
// "description": description,
// "additionalInfo": additionalInfo,
// "brand": brand,
// "basePrice": basePrice,
// "discountPrice": discountPrice,
// "stock": stock,
// "quantity": quantity,
// "unit": unit,
// "slug": slug,
// "rating": rating,
// "isInStock": isInStock,
// "isActive": isActive,
// "isInWishlist": isInWishlist,
// "createdAt": createdAt,
// "updatedAt": updatedAt,
// "storeId": storeId,
// "categoryId": categoryId,
// "productTypeId": productTypeId,
// "timeSlotId": timeSlotId,
// };
// void add(ProductDatum productDatum) {}
// }
// class Store {
// dynamic id;
// dynamic storeName;
// dynamic storeDescription;
// dynamic officialPhoneNumber;
// dynamic storeAddress;
// dynamic gstNumber;
// dynamic gumastaNumber;
// dynamic storePicture;
// DateTime?? createdAt;
// DateTime?? updatedAt;
// dynamic vendorId;
// bool? isActive;
// dynamic couponId;
// Store({
// this.id,
// this.storeName,
// this.storeDescription,
// this.officialPhoneNumber,
// this.storeAddress,
// this.gstNumber,
// this.gumastaNumber,
// this.storePicture,
// this.createdAt,
// this.updatedAt,
// this.vendorId,
// this.isActive,
// this.couponId,
// });
// factory Store.fromJson(Map<dynamic, dynamic> json) => Store(
// id: json["id"],
// storeName: json["storeName"],
// storeDescription: json["storeDescription"],
// officialPhoneNumber: json["officialPhoneNumber"],
// storeAddress: json["storeAddress"],
// gstNumber: json["gstNumber"],
// gumastaNumber: json["gumastaNumber"],
// storePicture: json["storePicture"],
// createdAt: DateTime?.parse(json["createdAt"]),
// updatedAt: DateTime?.parse(json["updatedAt"]),
// vendorId: json["vendorId"],
// isActive: json["isActive"],
// couponId: json["couponId"],
// );
// Map<dynamic, dynamic> toJson() => {
// "id": id,
// "storeName": storeName,
// "storeDescription": storeDescription,
// "officialPhoneNumber": officialPhoneNumber,
// "storeAddress": storeAddress,
// "gstNumber": gstNumber,
// "gumastaNumber": gumastaNumber,
// "storePicture": storePicture,
// "createdAt": createdAt,
// "updatedAt": updatedAt,
// "vendorId": vendorId,
// "isActive": isActive,
// "couponId": couponId,
// };
// }
// To parse this JSON data, do // To parse this JSON data, do
// //
// final wishListModel = wishListModelFromJson(jsondynamic); // final wishListModel = wishListModelFromJson(jsondynamic);
@@ -14,7 +267,7 @@ class WishListModel {
DateTime? createdAt; DateTime? createdAt;
DateTime? updatedAt; DateTime? updatedAt;
List<WishListItem>? items; List<WishListItem>? items;
dynamic? totalItems; dynamic totalItems;
WishListModel({ WishListModel({
this.id, this.id,
@@ -28,8 +281,8 @@ class WishListModel {
factory WishListModel.fromJson(Map<dynamic, dynamic> json) => WishListModel( factory WishListModel.fromJson(Map<dynamic, dynamic> json) => WishListModel(
id: json["id"], id: json["id"],
userId: json["userId"], userId: json["userId"],
createdAt: DateTime.parse(json["createdAt"]), createdAt: DateTime?.parse(json["createdAt"]),
updatedAt: DateTime.parse(json["updatedAt"]), updatedAt: DateTime?.parse(json["updatedAt"]),
items: List<WishListItem>.from(json["items"].map((x) => WishListItem.fromJson(x))), items: List<WishListItem>.from(json["items"].map((x) => WishListItem.fromJson(x))),
totalItems: json["totalItems"], totalItems: json["totalItems"],
); );
@@ -70,8 +323,8 @@ class WishListItem {
wishlistId: json["wishlistId"], wishlistId: json["wishlistId"],
productId: json["productId"], productId: json["productId"],
storeId: json["storeId"], storeId: json["storeId"],
createdAt: DateTime.parse(json["createdAt"]), createdAt: DateTime?.parse(json["createdAt"]),
updatedAt: DateTime.parse(json["updatedAt"]), updatedAt: DateTime?.parse(json["updatedAt"]),
product: ProductDatum.fromJson(json["product"]), product: ProductDatum.fromJson(json["product"]),
store: Store.fromJson(json["store"]), store: Store.fromJson(json["store"]),
); );
@@ -96,20 +349,24 @@ class ProductDatum {
dynamic brand; dynamic brand;
dynamic basePrice; dynamic basePrice;
dynamic discountPrice; dynamic discountPrice;
dynamic stock; dynamic? stock;
dynamic quantity; dynamic? quantity;
dynamic unit; dynamic unit;
dynamic slug; dynamic slug;
dynamic rating; dynamic averageRating;
bool? isInStock; bool? isInStock;
bool? isActive; bool? isActive;
bool? isInWishlist;
DateTime? createdAt; DateTime? createdAt;
DateTime? updatedAt; DateTime? updatedAt;
dynamic storeId; dynamic storeId;
dynamic categoryId; dynamic categoryId;
dynamic productTypeId; dynamic productTypeId;
dynamic timeSlotId; dynamic timeSlotId;
List<ProductImage>? productImages;
Category? category;
List<ProductTag>? productTags;
List<dynamic>? zones;
List<ProductReview>? productReview;
ProductDatum({ ProductDatum({
this.id, this.id,
@@ -123,16 +380,20 @@ class ProductDatum {
this.quantity, this.quantity,
this.unit, this.unit,
this.slug, this.slug,
this.rating, this.averageRating,
this.isInStock, this.isInStock,
this.isActive, this.isActive,
this.isInWishlist,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.storeId, this.storeId,
this.categoryId, this.categoryId,
this.productTypeId, this.productTypeId,
this.timeSlotId, this.timeSlotId,
this.productImages,
this.category,
this.productTags,
this.zones,
this.productReview,
}); });
factory ProductDatum.fromJson(Map<dynamic, dynamic> json) => ProductDatum( factory ProductDatum.fromJson(Map<dynamic, dynamic> json) => ProductDatum(
@@ -147,16 +408,20 @@ class ProductDatum {
quantity: json["quantity"], quantity: json["quantity"],
unit: json["unit"], unit: json["unit"],
slug: json["slug"], slug: json["slug"],
rating: json["rating"], averageRating: json["averageRating"],
isInStock: json["isInStock"], isInStock: json["isInStock"],
isActive: json["isActive"], isActive: json["isActive"],
isInWishlist: json["isInWishlist"], createdAt: DateTime?.parse(json["createdAt"]),
createdAt: DateTime.parse(json["createdAt"]), updatedAt: DateTime?.parse(json["updatedAt"]),
updatedAt: DateTime.parse(json["updatedAt"]),
storeId: json["storeId"], storeId: json["storeId"],
categoryId: json["categoryId"], categoryId: json["categoryId"],
productTypeId: json["productTypeId"], productTypeId: json["productTypeId"],
timeSlotId: json["timeSlotId"], timeSlotId: json["timeSlotId"],
productImages: List<ProductImage>.from(json["productImages"].map((x) => ProductImage.fromJson(x))),
category: Category.fromJson(json["category"]),
productTags: List<ProductTag>.from(json["productTags"].map((x) => ProductTag.fromJson(x))),
zones: List<dynamic>.from(json["zones"].map((x) => x)),
productReview: List<ProductReview>.from(json["ProductReview"].map((x) => ProductReview.fromJson(x))),
); );
Map<dynamic, dynamic> toJson() => { Map<dynamic, dynamic> toJson() => {
@@ -171,16 +436,204 @@ class ProductDatum {
"quantity": quantity, "quantity": quantity,
"unit": unit, "unit": unit,
"slug": slug, "slug": slug,
"rating": rating, "averageRating": averageRating,
"isInStock": isInStock, "isInStock": isInStock,
"isActive": isActive, "isActive": isActive,
"isInWishlist": isInWishlist,
"createdAt": createdAt, "createdAt": createdAt,
"updatedAt": updatedAt, "updatedAt": updatedAt,
"storeId": storeId, "storeId": storeId,
"categoryId": categoryId, "categoryId": categoryId,
"productTypeId": productTypeId, "productTypeId": productTypeId,
"timeSlotId": timeSlotId, "timeSlotId": timeSlotId,
"productImages": List<dynamic>.from(productImages!.map((x) => x.toJson())),
"category": category!.toJson(),
"productTags": List<dynamic>.from(productTags!.map((x) => x.toJson())),
"zones": List<dynamic>.from(zones!.map((x) => x)),
"ProductReview": List<dynamic>.from(productReview!.map((x) => x.toJson())),
};
}
class Category {
dynamic id;
dynamic name;
dynamic description;
dynamic image;
dynamic slug;
dynamic? level;
bool? isActive;
DateTime? createdAt;
DateTime? updatedAt;
dynamic parentCategoryId;
dynamic path;
Category({
this.id,
this.name,
this.description,
this.image,
this.slug,
this.level,
this.isActive,
this.createdAt,
this.updatedAt,
this.parentCategoryId,
this.path,
});
factory Category.fromJson(Map<dynamic, dynamic> json) => Category(
id: json["id"],
name: json["name"],
description: json["description"],
image: json["image"],
slug: json["slug"],
level: json["level"],
isActive: json["isActive"],
createdAt: DateTime?.parse(json["createdAt"]),
updatedAt: DateTime?.parse(json["updatedAt"]),
parentCategoryId: json["parentCategoryId"],
path: json["path"],
);
Map<dynamic, dynamic> toJson() => {
"id": id,
"name": name,
"description": description,
"image": image,
"slug": slug,
"level": level,
"isActive": isActive,
"createdAt": createdAt,
"updatedAt": updatedAt,
"parentCategoryId": parentCategoryId,
"path": path,
};
}
class ProductImage {
dynamic id;
dynamic url;
bool? isDefault;
dynamic productId;
ProductImage({
this.id,
this.url,
this.isDefault,
this.productId,
});
factory ProductImage.fromJson(Map<dynamic, dynamic> json) => ProductImage(
id: json["id"],
url: json["url"],
isDefault: json["isDefault"],
productId: json["productId"],
);
Map<dynamic, dynamic> toJson() => {
"id": id,
"url": url,
"isDefault": isDefault,
"productId": productId,
};
}
class ProductReview {
dynamic id;
dynamic userId;
dynamic productId;
dynamic rating;
dynamic title;
dynamic description;
dynamic? likes;
dynamic? dislikes;
dynamic? helpfulCount;
bool? verifiedPurchase;
dynamic status;
DateTime? createdAt;
DateTime? updatedAt;
ProductReview({
this.id,
this.userId,
this.productId,
this.rating,
this.title,
this.description,
this.likes,
this.dislikes,
this.helpfulCount,
this.verifiedPurchase,
this.status,
this.createdAt,
this.updatedAt,
});
factory ProductReview.fromJson(Map<dynamic, dynamic> json) => ProductReview(
id: json["id"],
userId: json["userId"],
productId: json["productId"],
rating: json["rating"],
title: json["title"],
description: json["description"],
likes: json["likes"],
dislikes: json["dislikes"],
helpfulCount: json["helpfulCount"],
verifiedPurchase: json["verifiedPurchase"],
status: json["status"],
createdAt: DateTime?.parse(json["createdAt"]),
updatedAt: DateTime?.parse(json["updatedAt"]),
);
Map<dynamic, dynamic> toJson() => {
"id": id,
"userId": userId,
"productId": productId,
"rating": rating,
"title": title,
"description": description,
"likes": likes,
"dislikes": dislikes,
"helpfulCount": helpfulCount,
"verifiedPurchase": verifiedPurchase,
"status": status,
"createdAt": createdAt,
"updatedAt": updatedAt,
};
}
class ProductTag {
dynamic id;
dynamic name;
dynamic description;
bool? isActive;
DateTime? createdAt;
DateTime? updatedAt;
ProductTag({
this.id,
this.name,
this.description,
this.isActive,
this.createdAt,
this.updatedAt,
});
factory ProductTag.fromJson(Map<dynamic, dynamic> json) => ProductTag(
id: json["id"],
name: json["name"],
description: json["description"],
isActive: json["isActive"],
createdAt: DateTime?.parse(json["createdAt"]),
updatedAt: DateTime?.parse(json["updatedAt"]),
);
Map<dynamic, dynamic> toJson() => {
"id": id,
"name": name,
"description": description,
"isActive": isActive,
"createdAt": createdAt,
"updatedAt": updatedAt,
}; };
} }
@@ -224,8 +677,8 @@ class Store {
gstNumber: json["gstNumber"], gstNumber: json["gstNumber"],
gumastaNumber: json["gumastaNumber"], gumastaNumber: json["gumastaNumber"],
storePicture: json["storePicture"], storePicture: json["storePicture"],
createdAt: DateTime.parse(json["createdAt"]), createdAt: DateTime?.parse(json["createdAt"]),
updatedAt: DateTime.parse(json["updatedAt"]), updatedAt: DateTime?.parse(json["updatedAt"]),
vendorId: json["vendorId"], vendorId: json["vendorId"],
isActive: json["isActive"], isActive: json["isActive"],
couponId: json["couponId"], couponId: json["couponId"],

View File

@@ -1,10 +1,13 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:geocoding/geocoding.dart'; import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
import 'package:grocery_app/src/core/network_services/service_locator.dart'; import 'package:grocery_app/src/core/network_services/service_locator.dart';
import 'package:grocery_app/src/data/address.dart';
import 'package:grocery_app/src/data/all_cart_items.dart'; import 'package:grocery_app/src/data/all_cart_items.dart';
import 'package:grocery_app/src/logic/repo/product_repo.dart'; import 'package:grocery_app/src/logic/repo/product_repo.dart';
import 'package:grocery_app/utils/extensions/extensions.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
class AddtocartProvider extends ChangeNotifier { class AddtocartProvider extends ChangeNotifier {
@@ -15,6 +18,7 @@ class AddtocartProvider extends ChangeNotifier {
String get pinCode => _pinCode; String get pinCode => _pinCode;
bool get isLoading => _isLoading; bool get isLoading => _isLoading;
bool get isDeliverable => _isDeliverable; bool get isDeliverable => _isDeliverable;
TextEditingController checkPinCode = TextEditingController();
Future<void> getCurrentLocation(BuildContext context) async { Future<void> getCurrentLocation(BuildContext context) async {
_isLoading = true; _isLoading = true;
@@ -23,16 +27,6 @@ class AddtocartProvider extends ChangeNotifier {
try { try {
bool serviceEnabled = await Geolocator.isLocationServiceEnabled(); bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) { if (!serviceEnabled) {
_pinCode = "Location services disabled.";
_isLoading = false;
notifyListeners();
return;
}
LocationPermission permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
_pinCode = "Permission denied.";
_isLoading = false; _isLoading = false;
notifyListeners(); notifyListeners();
@@ -52,54 +46,58 @@ class AddtocartProvider extends ChangeNotifier {
if (placemarks.isNotEmpty) { if (placemarks.isNotEmpty) {
_pinCode = placemarks.first.postalCode ?? "Unknown"; _pinCode = placemarks.first.postalCode ?? "Unknown";
checkPinCode.text = _pinCode;
print("Pincode found: $_pinCode"); print("Pincode found: $_pinCode");
// Now check if this pin code is deliverable // Now check if this pin code is deliverable
await checkPin(context, _pinCode); await checkPin(context, _pinCode);
} else { } else {
_pinCode = "Could not fetch pin code."; _pinCode = "unable to current pi code";
print("Error: No placemarks found."); print("Error: No placemarks found.");
} }
} catch (e) { } catch (e) {
_pinCode = "Error: ${e.toString()}"; _pinCode = "unable to current pi code";
print("Error: ${e.toString()}"); print("Error: ${e.toString()}");
} }
_pinCode = "unable to current pi code";
_isLoading = false; _isLoading = false;
notifyListeners(); notifyListeners();
} }
bool ischeckpin = false;
Future<void> checkPin(BuildContext context, pin) async { Future<void> checkPin(BuildContext context, pin) async {
ischeckpin = true;
_pinCode = pin;
notifyListeners();
var data = {}; var data = {};
try { try {
var result = await _homeRepo.checkPin(data, pin); var result = await _homeRepo.checkPin(data, pin);
return result.fold( return result.fold(
(error) { (error) {
ischeckpin = false;
_isDeliverable = false; _isDeliverable = false;
isLoaddcartItem = false; isLoaddcartItem = false;
notifyListeners(); notifyListeners();
}, },
(response) { (response) {
print("kdhfgkjfkghkfghkj ${response.isDeliverable!}");
if (response.isDeliverable!) { if (response.isDeliverable!) {
_isDeliverable = true; _isDeliverable = true;
} }
ischeckpin = false;
isLoaddcartItem = false; isLoaddcartItem = false;
notifyListeners(); notifyListeners();
}, },
); );
} catch (e) { } catch (e) {
ischeckpin = false;
_isDeliverable = false; _isDeliverable = false;
isLoaddcartItem = false; isLoaddcartItem = false;
notifyListeners(); notifyListeners();
} }
} }
Map<String, bool> isRemoveItem = {};
Map<String, bool> isRemoveItem = {};
Future<void> deleteItem(BuildContext context, id) async { Future<void> deleteItem(BuildContext context, id) async {
isRemoveItem[id] = true; isRemoveItem[id] = true;
@@ -109,18 +107,17 @@ class AddtocartProvider extends ChangeNotifier {
var result = await _homeRepo.deleteItem(data, id); var result = await _homeRepo.deleteItem(data, id);
return result.fold( return result.fold(
(error) { (error) {
isRemoveItem[id] = false; isRemoveItem[id] = false;
notifyListeners(); notifyListeners();
}, },
(response) { (response) {
getItemCards(context); getItemCards(context);
isRemoveItem[id] = false; isRemoveItem[id] = false;
notifyListeners(); notifyListeners();
}, },
); );
} catch (e) { } catch (e) {
isRemoveItem[id] = false; isRemoveItem[id] = false;
notifyListeners(); notifyListeners();
} }
@@ -140,12 +137,10 @@ class AddtocartProvider extends ChangeNotifier {
return result.fold( return result.fold(
(error) { (error) {
print("dsjfgkjhkdfgdkjfhg");
isLoaddcartItem = false; isLoaddcartItem = false;
notifyListeners(); notifyListeners();
}, },
(response) { (response) {
print("dsjfgkjhkdjsfjkdhfsgfgdkjfhg");
allitem = response!; allitem = response!;
isLoaddcartItem = false; isLoaddcartItem = false;
notifyListeners(); notifyListeners();
@@ -157,4 +152,165 @@ class AddtocartProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
} }
///////////////////////////////// address/////////////////////////
List<Datum> addresslist = [];
Future<void> getAddress(BuildContext context) async {
var data = {};
try {
var result = await _homeRepo.getAddress(data);
return result.fold(
(error) {
print("dsjfgkjhkdfgdkjfhg");
notifyListeners();
},
(response) {
addresslist = response.data!;
if (response.data!.isNotEmpty) {
_selectedAddress = addresslist.last.id ?? "";
} else {
_selectedAddress = "";
}
notifyListeners();
},
);
} catch (e) {
print("sfddsfdfff");
notifyListeners();
}
}
String _selectedAddress = "";
String get selectedAddress => _selectedAddress;
void selectAddress(String address) {
_selectedAddress = address;
notifyListeners();
}
Set<String> cartItems = {};
Map<String, bool> isLoadings = {};
bool isLoadingCart = false;
bool iscardAdded = false;
Future<void> addToCart(
BuildContext context, String productId, int quantity) async {
context.showLoader(show: true);
isLoadingCart = true;
isLoadings[productId] = true;
notifyListeners();
var data = {"productId": productId, "quantity": quantity};
try {
var result = await _homeRepo.addToCart(data);
context.showLoader(
show: false,
);
result.fold(
(error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(error.message),
backgroundColor: Colors.red,
),
);
},
(response) async {
await getItemCards(context);
cartItems.add(productId); // Add product to cart
// Fluttertoast.showToast(
// msg: "Added to cart successfully!",
// toastLength: Toast.LENGTH_SHORT,
// gravity: ToastGravity.BOTTOM,
// backgroundColor: Colors.green,
// textColor: Colors.white,
// fontSize: 14.0,
// );
iscardAdded = true;
notifyListeners(); // Update UI after adding to cart
},
);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("Something went wrong"),
backgroundColor: Colors.red,
),
);
} finally {
isLoadingCart = false;
isLoadings[productId] = false;
notifyListeners(); // Ensure UI updates after operation
}
}
Future<void> decreaseCartQuantity(
BuildContext context, String itemId, int quantity) async {
context.showLoader(show: true);
isLoadingCart = true;
notifyListeners();
// var data = {"productId": productId, "quantity": quantity};
final Map<String, dynamic> cartData = {
"items": [
{"itemId": itemId, "quantity": quantity}
]
};
try {
var result = await _homeRepo.decreaseQuantity(cartData);
context.showLoader(
show: false,
);
result.fold(
(error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(error.message),
backgroundColor: Colors.red,
),
);
},
(response) async {
await getItemCards(context);
// Fluttertoast.showToast(
// msg: "Added to cart successfully!",
// toastLength: Toast.LENGTH_SHORT,
// gravity: ToastGravity.BOTTOM,
// backgroundColor: Colors.green,
// textColor: Colors.white,
// fontSize: 14.0,
// );
iscardAdded = true;
notifyListeners(); // Update UI after adding to cart
},
);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("Something went wrong"),
backgroundColor: Colors.red,
),
);
} finally {
isLoadingCart = false;
notifyListeners(); // Ensure UI updates after operation
}
}
} }

View File

@@ -0,0 +1,74 @@
import 'package:flutter/material.dart';
import 'package:grocery_app/src/core/network_services/service_locator.dart';
import 'package:grocery_app/src/logic/repo/product_repo.dart';
class AddressProvider extends ChangeNotifier {
bool ischeckpin = false;
Future<bool> checkPin(BuildContext context, pin) async {
final _homeRepo = getIt<ProductRepo>();
ischeckpin = true;
notifyListeners();
var data = {};
try {
var result = await _homeRepo.checkPin(data, pin);
return result.fold(
(error) {
ischeckpin = false;
ischeckpin = false;
return false;
},
(response) {
ischeckpin = false;
notifyListeners();
return true;
},
);
} catch (e) {
ischeckpin = false;
notifyListeners();
return false;
}
}
Future<bool> addAddress(BuildContext context, name, pincode, phone,
alternatePhoneNumber, address, landmark, addresstype) async {
ischeckpin = false;
final _homeRepo = getIt<ProductRepo>();
notifyListeners();
var data = {
"name": name,
"pincode": pincode,
"phoneNumber": "+91$phone",
"alternatePhoneNumber": "+91$alternatePhoneNumber",
"addressLine": address,
"landmark": landmark,
"addressType": addresstype,
"isDefault": false,
"additionalInstructions": "Please ring doorbell twice"
};
try {
var result = await _homeRepo.addAddress(data);
return result.fold(
(error) {
ischeckpin = false;
return false;
},
(response) {
ischeckpin = false;
notifyListeners();
return true;
},
);
} catch (e) {
ischeckpin = false;
notifyListeners();
return false;
}
}
}

View File

@@ -1,4 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:grocery_app/src/core/network_services/service_locator.dart';
import 'package:grocery_app/src/data/user_profile.dart';
import 'package:grocery_app/src/logic/repo/product_repo.dart';
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
class BottomNavProvider with ChangeNotifier { class BottomNavProvider with ChangeNotifier {
int _currentIndex = 0; int _currentIndex = 0;
@@ -7,10 +11,58 @@ class BottomNavProvider with ChangeNotifier {
int get currentIndex => _currentIndex; int get currentIndex => _currentIndex;
PageController get pageController => _pageController; PageController get pageController => _pageController;
void setIndex(int index) void setIndex(int index) {
{
_currentIndex = index; _currentIndex = index;
_pageController.jumpToPage(index); _pageController.jumpToPage(index);
notifyListeners(); notifyListeners();
} }
UserProfile allitem = UserProfile();
final _homeRepo = getIt<ProductRepo>();
bool isLoading = true;
Future<void> getProfile(BuildContext context) async {
print("kjdkjghdfjglhjdfhgldflghjkldfjgh");
isLoading = true;
notifyListeners();
var data = {};
try {
var result = await _homeRepo.getProfile(data);
return result.fold(
(error) {
isLoading = false;
notifyListeners();
},
(response) async {
print("kjdshgkjhdfkjg ${response.firstName}");
await SharedPrefUtils.saveUser(user: response);
allitem = response!;
isLoading = false;
notifyListeners();
},
);
} catch (e) {
isLoading = false;
notifyListeners();
}
}
Future<bool> refreshToken(BuildContext context) async {
var data = {"refresh_token": "${await SharedPrefUtils.getRefreshToken()}"};
var result = await _homeRepo.refreshToken(data, context);
return result.fold(
(error) {
return true;
},
(response) {
return true;
},
);
}
} }

View File

@@ -46,6 +46,8 @@ class ProductProvider extends ChangeNotifier {
var data = {}; var data = {};
productDetails = ProductDetailsData(); productDetails = ProductDetailsData();
isProductLoading = true; isProductLoading = true;
quantitys = 1;
_totalPrice = 0.0;
notifyListeners(); notifyListeners();
var result = await _homeRepo.getProductDetails(data, context, id); var result = await _homeRepo.getProductDetails(data, context, id);
@@ -186,8 +188,6 @@ class ProductProvider extends ChangeNotifier {
// Mock API call // Mock API call
Future<bool> addToWish(BuildContext context, String productId) async { Future<bool> addToWish(BuildContext context, String productId) async {
print("jsdkjfhkdfkg ${productId}");
var data = { var data = {
"productId": productId, "productId": productId,
}; };
@@ -206,6 +206,7 @@ class ProductProvider extends ChangeNotifier {
return false; return false;
}, },
(response) { (response) {
iswishloading = false;
Fluttertoast.showToast( Fluttertoast.showToast(
msg: "Wishlist updated successfully!", msg: "Wishlist updated successfully!",
toastLength: Toast.LENGTH_SHORT, toastLength: Toast.LENGTH_SHORT,
@@ -223,18 +224,24 @@ class ProductProvider extends ChangeNotifier {
} }
} }
Set<String> wishlist = {}; // To store product IDs in the wishlist Set<String> wishlist = {};
bool iswishloading = false;
Future<void> toggleWishlist(BuildContext context, String productId) async { Future<void> toggleWishlist(BuildContext context, String productId) async {
iswishloading = true;
notifyListeners();
try { try {
if (wishlist.contains(productId)) { if (wishlist.contains(productId)) {
wishlist.remove(productId); wishlist.remove(productId);
iswishloading = false;
} else { } else {
var result = await addToWish(context, productId); var result = await addToWish(context, productId);
wishlist.add(productId); // Add the product ID to the wishlist wishlist.add(productId);
} }
notifyListeners(); // Notify listeners to update the UI iswishloading = false;
notifyListeners();
} catch (e) { } catch (e) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
@@ -297,13 +304,16 @@ class ProductProvider extends ChangeNotifier {
Set<String> cartItems = {}; Set<String> cartItems = {};
Map<String, bool> isLoading = {}; Map<String, bool> isLoading = {};
Future<void> addToCart(BuildContext context, String productId) async { bool isLoadingCart=false;
//if (cartItems.contains(productId)) return; // Prevent duplicate additions bool iscardAdded=false;
Future<void> addToCart(BuildContext context, String productId,int quantity) async {
//if (cartItems.contains(productId)) return; // Prevent duplicate additions
isLoadingCart=true;
isLoading[productId] = true; isLoading[productId] = true;
notifyListeners(); // Notify UI to show loading indicator notifyListeners(); // Notify UI to show loading indicator
var data = {"productId": productId, "quantity": 1}; var data = {"productId": productId, "quantity": quantity};
try { try {
var result = await _homeRepo.addToCart(data); var result = await _homeRepo.addToCart(data);
@@ -327,6 +337,7 @@ class ProductProvider extends ChangeNotifier {
textColor: Colors.white, textColor: Colors.white,
fontSize: 14.0, fontSize: 14.0,
); );
iscardAdded=true;
notifyListeners(); // Update UI after adding to cart notifyListeners(); // Update UI after adding to cart
}, },
); );
@@ -338,19 +349,20 @@ class ProductProvider extends ChangeNotifier {
), ),
); );
} finally { } finally {
isLoadingCart=false;
isLoading[productId] = false; isLoading[productId] = false;
notifyListeners(); // Ensure UI updates after operation notifyListeners(); // Ensure UI updates after operation
} }
} }
List<BestDeal> countList = []; List<BestDeal> countList = [];
String lastImageurl = '';
Future<void> addToWithCart( Future<void> addToWithCart(BuildContext context, String productId,
BuildContext context, String productId, BestDeal bestdealproduct) async { BestDeal bestdealproduct, url) async {
//if (cartItems.contains(productId)) return; // Prevent duplicate additions
isLoading[productId] = true; isLoading[productId] = true;
notifyListeners(); // Notify UI to show loading indicator notifyListeners();
var data = {"productId": productId, "quantity": 1}; var data = {"productId": productId, "quantity": 1};
@@ -368,6 +380,7 @@ class ProductProvider extends ChangeNotifier {
}, },
(response) { (response) {
countList.add(bestdealproduct); countList.add(bestdealproduct);
lastImageurl = url;
cartItems.add(productId); // Add product to cart cartItems.add(productId); // Add product to cart
Fluttertoast.showToast( Fluttertoast.showToast(
msg: "Added to cart successfully!", msg: "Added to cart successfully!",
@@ -393,6 +406,63 @@ class ProductProvider extends ChangeNotifier {
} }
} }
List<ProductDatum> productDatum = [];
String productDatumlastImageurl = '';
Future<void> addToCartWithWishlist(BuildContext context, String productId,ProductDatum productdataum,
url) async {
isLoading[productId] = true;
notifyListeners();
var data = {"productId": productId, "quantity": 1};
try {
var result = await _homeRepo.addToCart(data);
result.fold(
(error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(error.message),
backgroundColor: Colors.red,
),
);
},
(response) {
productDatum.add(productdataum);
productDatumlastImageurl = url;
cartItems.add(productId); // Add product to cart
Fluttertoast.showToast(
msg: "Added to cart successfully!",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
backgroundColor: Colors.green,
textColor: Colors.white,
fontSize: 14.0,
);
notifyListeners(); // Update UI after adding to cart
},
);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("Something went wrong"),
backgroundColor: Colors.red,
),
);
} finally {
isLoading[productId] = false;
notifyListeners(); // Ensure UI updates after operation
}
}
bool isWishListItemLoadingg = true; bool isWishListItemLoadingg = true;
List<WishListItem> wishListItem = []; List<WishListItem> wishListItem = [];
@@ -427,30 +497,69 @@ class ProductProvider extends ChangeNotifier {
} }
////////////////////////////// product increase //////////////////////////////////// ////////////////////////////// product increase ////////////////////////////////////
int _quantity = 1; int quantitys = 1;
double _unitPrice = 0.0; double _unitPrice = 0.0;
double _totalPrice = 0.0; double _totalPrice = 0.0;
int get quantity => _quantity; int get quantity => quantitys;
double get totalPrice => _totalPrice; double get totalPrice => _totalPrice;
void setProductPrice(double price) { void setProductPrice(double price) {
_unitPrice = price; _unitPrice = price;
_totalPrice = _unitPrice * _quantity; _totalPrice = _unitPrice * quantitys;
notifyListeners(); notifyListeners();
} }
int productQuantity = 0;
// void increaseQuantity()
// {
// if(quantity<10)
// if (_quantity < 10)
// {
// // Limit to 10
// _quantity++;
// _totalPrice = _unitPrice * _quantity;
// notifyListeners();
// }
// {
// Fluttertoast.showToast(
// msg: "Sorry cart successfully!",
// toastLength: Toast.LENGTH_SHORT,
// gravity: ToastGravity.BOTTOM,
// backgroundColor: Colors.green,
// textColor: Colors.white,
// fontSize: 14.0,
// );
// }
// }
void increaseQuantity() { void increaseQuantity() {
print("kjfgkhkdfhgkjdhfg"); int maxAllowed = productQuantity >= 100
_quantity++; ? 10
_totalPrice = _unitPrice * _quantity; : productQuantity; // Max limit based on stock
notifyListeners();
if (quantitys < maxAllowed) {
quantitys++;
_totalPrice = _unitPrice * quantitys;
notifyListeners();
} else {
Fluttertoast.showToast(
msg: "Sorry, you can only add up to $maxAllowed items!",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
backgroundColor: Colors.red,
textColor: Colors.white,
fontSize: 14.0,
);
}
} }
void decreaseQuantity() { void decreaseQuantity() {
if (_quantity > 1) { if (quantitys > 1) {
_quantity--; quantitys--;
_totalPrice = _unitPrice * _quantity; _totalPrice = _unitPrice * quantitys;
notifyListeners(); notifyListeners();
} }
} }

View File

@@ -0,0 +1,94 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:grocery_app/src/core/network_services/service_locator.dart';
import 'package:grocery_app/src/core/utils/snack_bar.dart';
import 'package:grocery_app/src/data/user_profile.dart';
import 'package:grocery_app/src/logic/repo/auth_repo.dart';
import 'package:grocery_app/src/logic/repo/product_repo.dart';
import 'package:grocery_app/utils/extensions/extensions.dart';
class ProfileProvider extends ChangeNotifier {
bool _isImageLoading = false;
bool get isImageLoading => _isImageLoading;
String _uploadedUrl = '';
final _productRepo = getIt<ProductRepo>();
Future<bool> uploadImage(BuildContext context, File? _selectedImage) async {
context.showLoader(show: true);
_isImageLoading = false;
final result = await _productRepo.uploadImage(_selectedImage!);
context.showLoader(show: false);
return result.fold(
(error) {
_showSnackBar(context, error.message, Colors.red);
return false;
},
(uploadImage) {
_isImageLoading = true;
_uploadedUrl = uploadImage.data!.url.toString();
notifyListeners();
_showSnackBar(context, "Image uploaxded successfully!", Colors.green);
return true;
},
);
}
void _showSnackBar(BuildContext context, String message, Color color) {
showTopSnackBar(context, message, color);
}
Future<bool> createStore(
BuildContext context, String firstName, String lastName) async {
context.showLoader(show: true);
var data = {
"firstName": firstName,
"lastName": lastName,
"img": _uploadedUrl
};
try {
var result = await _productRepo.updateProfile(data);
context.showLoader(show: false);
return result.fold(
(error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(error.message),
backgroundColor: Colors.red,
),
);
return false;
},
(response) {
Navigator.pop(context);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("Profile updated"),
backgroundColor: Colors.green,
),
);
return true;
},
);
} catch (e)
{
context.showLoader(show: false);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("Something went wrong. Please try again."),
backgroundColor: Colors.red,
),
);
return false;
}
}
}

View File

@@ -7,6 +7,7 @@ import 'package:grocery_app/src/core/utils/response_type_def.dart';
import 'package:grocery_app/src/data/OTPResponseModel.dart'; import 'package:grocery_app/src/data/OTPResponseModel.dart';
import 'package:grocery_app/src/data/login_response.dart'; import 'package:grocery_app/src/data/login_response.dart';
import 'package:grocery_app/src/data/registration_response.dart'; import 'package:grocery_app/src/data/registration_response.dart';
import 'package:grocery_app/src/data/user_profile.dart';
import 'package:grocery_app/src/data/vendor_otpModel.dart'; import 'package:grocery_app/src/data/vendor_otpModel.dart';
import 'package:grocery_app/src/logic/services/auth_service_locator.dart'; import 'package:grocery_app/src/logic/services/auth_service_locator.dart';
import 'package:grocery_app/utils/constants/shared_pref_utils.dart'; import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
@@ -21,7 +22,6 @@ class AuthRepo {
var response = await _authServices.sendOtp(data); var response = await _authServices.sendOtp(data);
final String model = response.toString(); final String model = response.toString();
return right(model); return right(model);
} on DioException catch (e) { } on DioException catch (e) {
print("dhfgfdgjdhfgfgh ${e}"); print("dhfgfdgjdhfgfgh ${e}");
@@ -40,10 +40,10 @@ class AuthRepo {
if (vendorOtpModel.data != null) { if (vendorOtpModel.data != null) {
await SharedPrefUtils.setToken( await SharedPrefUtils.setToken(
authToken: vendorOtpModel.data!.accessToken ?? ""); authToken: vendorOtpModel.data!.accessToken ?? "");
await SharedPrefUtils.setRefreshToken(
refresh_token: vendorOtpModel.data!.refreshToken ?? "");
} }
return right(vendorOtpModel); return right(vendorOtpModel);
} on DioException catch (e) { } on DioException catch (e) {
var error = CustomDioExceptions.handleError(e); var error = CustomDioExceptions.handleError(e);
@@ -51,16 +51,17 @@ class AuthRepo {
} }
} }
FutureResult<LoginResponse> loginOtp(data) async { FutureResult<LoginResponse> loginOtp(data) async {
try { try {
var response = await _authServices.loginOtp(data); var response = await _authServices.loginOtp(data);
LoginResponse loginResponse = loginResponseFromJson(response.toString()); LoginResponse loginResponse = loginResponseFromJson(response.toString());
if (loginResponse.accessToken != null) if (loginResponse.accessToken != null) {
{
await SharedPrefUtils.setToken( await SharedPrefUtils.setToken(
authToken: loginResponse.accessToken ?? ""); authToken: loginResponse.accessToken ?? "");
await SharedPrefUtils.setRefreshToken(
refresh_token: loginResponse.refreshToken ?? "");
} }
// final String model = response.toString(); // final String model = response.toString();
@@ -119,12 +120,9 @@ class AuthRepo {
await SharedPrefUtils.setToken( await SharedPrefUtils.setToken(
authToken: registrationResponse.accessToken ?? ""); authToken: registrationResponse.accessToken ?? "");
print("dsfklgjkfgbfgkfdgjkhkfdjg ${registrationResponse.accessToken}"); await SharedPrefUtils.setRefreshToken(
// if (response.statCode) { refresh_token: registrationResponse.refreshToken ?? "");
// print("dsfklgjkfgbfgkfdgjkhkfdjg"); final String model = response.toString();
// }
final String model = response.toString();
return right(registrationResponse); return right(registrationResponse);
} on DioException catch (e) { } on DioException catch (e) {
var error = CustomDioExceptions.handleError(e); var error = CustomDioExceptions.handleError(e);

View File

@@ -1,18 +1,27 @@
import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fpdart/fpdart.dart'; import 'package:fpdart/fpdart.dart';
import 'package:grocery_app/src/core/routes/routes.dart';
import 'package:grocery_app/src/core/utils/custom_dio_exception.dart'; import 'package:grocery_app/src/core/utils/custom_dio_exception.dart';
import 'package:grocery_app/src/core/utils/response_type_def.dart'; import 'package:grocery_app/src/core/utils/response_type_def.dart';
import 'package:grocery_app/src/data/address.dart';
import 'package:grocery_app/src/data/allProduct_model.dart'; import 'package:grocery_app/src/data/allProduct_model.dart';
import 'package:grocery_app/src/data/all_cart_items.dart'; import 'package:grocery_app/src/data/all_cart_items.dart';
import 'package:grocery_app/src/data/banners.dart'; import 'package:grocery_app/src/data/banners.dart';
import 'package:grocery_app/src/data/best_dealProduct.dart'; import 'package:grocery_app/src/data/best_dealProduct.dart';
import 'package:grocery_app/src/data/check_pin_response.dart'; import 'package:grocery_app/src/data/check_pin_response.dart';
import 'package:grocery_app/src/data/login_response.dart';
import 'package:grocery_app/src/data/product_category.dart'; import 'package:grocery_app/src/data/product_category.dart';
import 'package:grocery_app/src/data/product_details.dart'; import 'package:grocery_app/src/data/product_details.dart';
import 'package:grocery_app/src/data/upload_image.dart';
import 'package:grocery_app/src/data/user_profile.dart';
import 'package:grocery_app/src/data/wish_list_model.dart'; import 'package:grocery_app/src/data/wish_list_model.dart';
import 'package:grocery_app/src/logic/services/home_locator.dart'; import 'package:grocery_app/src/logic/services/home_locator.dart';
import 'package:grocery_app/src/ui/productdetails/product_details.dart'; import 'package:grocery_app/src/ui/productdetails/product_details.dart';
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
import 'package:grocery_app/utils/extensions/extensions.dart';
class ProductRepo { class ProductRepo {
final ProductService _productService; final ProductService _productService;
@@ -36,12 +45,13 @@ class ProductRepo {
} }
} }
FutureResult<ProductDetailsData> getProductDetails( FutureResult<ProductDetailsData> getProductDetails(
data, BuildContext context, id) async { data, BuildContext context, id) async {
try { try {
var response = await _productService.getProductDetails(data, id); var response = await _productService.getProductDetails(data, id);
ProductDetailsData loginResponse = productDetailsdataFromJson(response.toString()); ProductDetailsData loginResponse =
productDetailsdataFromJson(response.toString());
final String model = response.toString(); final String model = response.toString();
@@ -52,8 +62,6 @@ class ProductRepo {
} }
} }
FutureResult<BestDealProduct> getBestDealProduct( FutureResult<BestDealProduct> getBestDealProduct(
data, BuildContext context) async { data, BuildContext context) async {
try { try {
@@ -112,8 +120,19 @@ class ProductRepo {
var response = await _productService.getItemCards(data); var response = await _productService.getItemCards(data);
AllCartItems allCartItems = allCartItemsFromJson(response.toString()); AllCartItems allCartItems = allCartItemsFromJson(response.toString());
return right(allCartItems);
} on DioException catch (e) {
var error = CustomDioExceptions.handleError(e);
return left(error);
}
}
print("jdfgjkdf${allCartItems}"); FutureResult<AddressResponse> getAddress(data) async {
try {
var response = await _productService.getAddress(data);
AddressResponse allCartItems =
addressResponseFromJson(response.toString());
return right(allCartItems); return right(allCartItems);
} on DioException catch (e) { } on DioException catch (e) {
@@ -123,6 +142,47 @@ class ProductRepo {
} }
} }
FutureResult<UserProfile> getProfile(data) async {
try {
var response = await _productService.getProfile(data);
print("kdjfgkljfdkjlghflkgjh ${response}");
UserProfile userProfile = userProfileFromJson(response.toString());
print("kdjfgkljfdkjlghflkgjhrerrrerr ${userProfile.createdAt}");
return right(userProfile);
} on DioException catch (e) {
var error = CustomDioExceptions.handleError(e);
return left(error);
}
}
FutureResult<String> updateProfile(data) async {
try {
var response = await _productService.updateProfile(data);
print("kdjfgkljfdkjlghflkgjh ${response}");
final String model = response.toString();
return right(model);
} on DioException catch (e) {
var error = CustomDioExceptions.handleError(e);
return left(error);
}
}
FutureResult<UploadImage> uploadImage(File imageFile)
async {
try {
final response = await _productService.uploadImage(imageFile);
UploadImage upload=uploadImageFromJson(response.toString());
return right(upload);
} on DioException catch (e) {
final error = CustomDioExceptions.handleError(e);
return left(error);
}
}
FutureResult<CheckPinResponse> checkPin(data, pin) async { FutureResult<CheckPinResponse> checkPin(data, pin) async {
try { try {
var response = await _productService.checkPin(data, pin); var response = await _productService.checkPin(data, pin);
@@ -148,6 +208,20 @@ class ProductRepo {
} }
} }
FutureResult<String> addAddress(data) async {
try {
var response = await _productService.addAddress(data);
final String model = response.toString();
return right(model);
} on DioException catch (e) {
print("djhgfjdfhjg ${e}");
var error = CustomDioExceptions.handleError(e);
return left(error);
}
}
FutureResult<String> addToWish(data) async { FutureResult<String> addToWish(data) async {
try { try {
var response = await _productService.addToWish(data); var response = await _productService.addToWish(data);
@@ -175,6 +249,22 @@ class ProductRepo {
return left(error); return left(error);
} }
} }
FutureResult<String> decreaseQuantity(data) async {
try {
var response = await _productService.decreaseQuantity(data);
final String model = response.toString();
return right(model);
} on DioException catch (e) {
print("djhgfjdfhjg ${e}");
var error = CustomDioExceptions.handleError(e);
return left(error);
}
}
FutureResult<WishListModel> gettAllWishList(data) async { FutureResult<WishListModel> gettAllWishList(data) async {
try { try {
@@ -221,6 +311,32 @@ class ProductRepo {
} }
} }
FutureResult<String> refreshToken(data, BuildContext context) async {
try {
var response = await _productService.refresh_token(data);
LoginResponse loginResponse = loginResponseFromJson(response.toString());
if (loginResponse.accessToken != null)
{
await SharedPrefUtils.setToken(
authToken: loginResponse.accessToken ?? "");
await SharedPrefUtils.setRefreshToken(
refresh_token: loginResponse.refreshToken ?? "");
}
final String model = response.toString();
return right(model);
} on DioException catch (e)
{
var error = CustomDioExceptions.handleError(e);
return left(error);
}
}
// FutureResult<VendorModel> getMe(data) async { // FutureResult<VendorModel> getMe(data) async {
// try { // try {
// var response = await _homeService.getMe(data); // var response = await _homeService.getMe(data);

View File

@@ -1,36 +1,27 @@
import 'dart:convert'; import 'dart:convert';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:grocery_app/src/core/constant/api.dart'; import 'package:grocery_app/src/core/constant/api.dart';
import 'package:grocery_app/src/core/network_services/api_services.dart'; import 'package:grocery_app/src/core/network_services/api_services.dart';
class AuthServices extends ApiService { class AuthServices extends ApiService {
/// Login /// Login
Future sendOtp(data) async Future sendOtp(data) async {
{
var response = await api.post(APIURL.sendOtp, data: jsonEncode(data)); var response = await api.post(APIURL.sendOtp, data: jsonEncode(data));
return response; return response;
} }
Future verifyOtp(data) async {
Future verifyOtp(data) async {
var response = await api.post(APIURL.verifyOtp, data: jsonEncode(data)); var response = await api.post(APIURL.verifyOtp, data: jsonEncode(data));
return response; return response;
} }
Future loginOtp(data) async {
Future loginOtp(data) async {
var response = await api.post(APIURL.loginOtp, data: jsonEncode(data)); var response = await api.post(APIURL.loginOtp, data: jsonEncode(data));
return response; return response;
} }
Future login(data) async {
Future login(data) async
{
var response = await api.post(APIURL.login, data: jsonEncode(data)); var response = await api.post(APIURL.login, data: jsonEncode(data));
//response.statusCode //response.statusCode
@@ -39,45 +30,30 @@ class AuthServices extends ApiService {
Future userRegister(data) async {
var response =
Future userRegister(data) async await api.post(APIURL.customerRegister, data: jsonEncode(data));
{
var response = await api.post(APIURL.customerRegister, data: jsonEncode(data));
return response; return response;
} }
Future forgetPassword(data) async {
var response =
await api.post(APIURL.forgetPassword, data: jsonEncode(data));
Future forgetPassword(data) async
{
var response = await api.post(APIURL.forgetPassword, data: jsonEncode(data));
return response; return response;
} }
Future verifyForgetPassword(data) async Future verifyForgetPassword(data) async {
{ var response =
var response = await api.post(APIURL.verifyForgetPassword, data: jsonEncode(data)); await api.post(APIURL.verifyForgetPassword, data: jsonEncode(data));
return response; return response;
} }
Future reset_password(data) async {
Future reset_password(data) async var response =
{ await api.post(APIURL.reset_password, data: jsonEncode(data));
var response = await api.post(APIURL.reset_password, data: jsonEncode(data));
return response; return response;
} }
/// Login /// Login
// Future profileUpdate(data) async { // Future profileUpdate(data) async {
// var response = await api.put(Endpoints.update, data: data); // var response = await api.put(Endpoints.update, data: data);

View File

@@ -1,5 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:grocery_app/src/core/constant/api.dart'; import 'package:grocery_app/src/core/constant/api.dart';
import 'package:grocery_app/src/core/network_services/api_services.dart'; import 'package:grocery_app/src/core/network_services/api_services.dart';
@@ -76,7 +78,39 @@ class ProductService extends ApiService {
await api.delete(APIURL.deleteItem + id, data: jsonEncode(data)); await api.delete(APIURL.deleteItem + id, data: jsonEncode(data));
return response; return response;
} }
Future addAddress(data) async {
var response = await api.post(APIURL.addAddress, data: jsonEncode(data));
return response;
}
Future getProfile(data) async {
var response = await api.get(APIURL.getprofile, data: jsonEncode(data));
return response;
}
Future updateProfile(data) async {
var response = await api.patch(APIURL.updateProfile, data: jsonEncode(data));
return response;
}
Future<Response> uploadImage(File imageFile,
{Map<String, dynamic>? additionalFields}) async {
const String url = APIURL.uploadImage;
return await api.uploadImage(
url,
imageFile,
additionalFields: additionalFields,
);
}
Future getAddress
(data) async {
var response =
await api.get(APIURL.userAddress, data: jsonEncode(data));
return response;
}
Future addToWish(data) async { Future addToWish(data) async {
var response = await api.post(APIURL.addToWish, data: jsonEncode(data)); var response = await api.post(APIURL.addToWish, data: jsonEncode(data));
@@ -89,6 +123,12 @@ class ProductService extends ApiService {
return response; return response;
} }
Future decreaseQuantity(data) async {
var response = await api.patch(APIURL.addToCart, data: jsonEncode(data));
return response;
}
Future gettAllWishList(data) async { Future gettAllWishList(data) async {
var response = var response =
await api.get(APIURL.gettAllWishList, data: jsonEncode(data)); await api.get(APIURL.gettAllWishList, data: jsonEncode(data));

View File

@@ -62,14 +62,21 @@ class _BestDealScreenState extends State<BestDealScreen> {
], ],
), ),
floatingActionButton: floatingAction(), floatingActionButton: floatingAction(),
body: itemBestdeal()); body: Padding(
padding: const EdgeInsets.only(bottom: 100),
child: itemBestdeal(),
));
} }
Widget floatingAction() { Widget floatingAction()
return Consumer<ProductProvider>(builder: (context, provider, child) { {
if (provider.countList.isEmpty) { return Consumer<ProductProvider>(builder: (context, provider, child)
{
if (provider.countList.isEmpty)
{
return Center(); return Center();
} else { } else
{
return Padding( return Padding(
padding: const EdgeInsets.only(left: 30), padding: const EdgeInsets.only(left: 30),
child: Container( child: Container(
@@ -93,7 +100,7 @@ class _BestDealScreenState extends State<BestDealScreen> {
color: Colors.white.withOpacity(0.5), color: Colors.white.withOpacity(0.5),
borderRadius: BorderRadius.circular(10)), borderRadius: BorderRadius.circular(10)),
), ),
const Positioned( Positioned(
left: 20, left: 20,
bottom: 0, bottom: 0,
top: 0, top: 0,
@@ -102,7 +109,7 @@ class _BestDealScreenState extends State<BestDealScreen> {
height: 70, height: 70,
width: 70, width: 70,
radius: 10, radius: 10,
imageUrl: imageUrl: provider.lastImageurl ??
"https://5.imimg.com/data5/SELLER/Default/2024/2/385126988/OL/DA/VW/8627346/1l-fortune-sunflower-oil.jpg", "https://5.imimg.com/data5/SELLER/Default/2024/2/385126988/OL/DA/VW/8627346/1l-fortune-sunflower-oil.jpg",
backGroundColor: Colors.white, backGroundColor: Colors.white,
), ),
@@ -113,15 +120,12 @@ class _BestDealScreenState extends State<BestDealScreen> {
const SizedBox( const SizedBox(
width: 10, width: 10,
), ),
Column( Text(
crossAxisAlignment: CrossAxisAlignment.start, provider.countList.length.toString(),
mainAxisAlignment: MainAxisAlignment.spaceBetween, style: context.customRegular(
children: [ Colors.white,
Text( 29,
provider.countList.length.toString(), ),
style: context.customRegular(Colors.white, 18),
),
],
), ),
const Spacer(), const Spacer(),
InkWell( InkWell(
@@ -306,8 +310,12 @@ class _BestDealScreenState extends State<BestDealScreen> {
onTap: () async { onTap: () async {
if (await SharedPrefUtils.getToken() != if (await SharedPrefUtils.getToken() !=
null) { null) {
await provider.addToWithCart(context, await provider.addToWithCart(
bestdealproduct.id!, bestdealproduct); context,
bestdealproduct.id!,
bestdealproduct,
bestdealproduct
.productImages?.first.url);
} else { } else {
context.push(MyRoutes.SIGNUP); context.push(MyRoutes.SIGNUP);
} }

View File

@@ -3,6 +3,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart'; import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
import 'package:grocery_app/src/logic/provider/home_provider.dart';
import 'package:grocery_app/src/ui/cart/cartview_screen.dart'; import 'package:grocery_app/src/ui/cart/cartview_screen.dart';
import 'package:grocery_app/src/ui/favourite/favourite_screen.dart'; import 'package:grocery_app/src/ui/favourite/favourite_screen.dart';
import 'package:grocery_app/src/ui/header.dart'; import 'package:grocery_app/src/ui/header.dart';
@@ -38,6 +39,7 @@ class _BottomBarState extends State<BottomBarWidget> {
@override @override
void initState() { void initState() {
Provider.of<BottomNavProvider>(context, listen: false).getProfile(context);
_currentIndex = 0; _currentIndex = 0;
bottomWidgetPageController = PageController( bottomWidgetPageController = PageController(
initialPage: 0, initialPage: 0,

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,135 @@
import 'package:flutter/material.dart';
class CouponsScreen extends StatelessWidget {
final List<Map<String, String>> coupons = [
{
"title": "Flat 10% OFF on Standard Chartered Digismart Credit Cards",
"description": "No Minimum Order Value",
"code": "DIGISMART"
},
{
"title": "Flat 10% OFF upto \$10 on HSBC Cashback Credit Card",
"description": "Total Value of Items Must be \$3 or More",
"code": "HSBC10"
},
{
"title": "Get Upto 50 OFF on Your First Payment",
"description": "Total Value of Items Must be \$10 or More",
"code": "PAYMENT50"
}
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
title: Text("Coupons"),
leading: IconButton(
icon: Icon(Icons.arrow_back_ios),
onPressed: () => Navigator.pop(context),
),
),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
cursorHeight: 20,
decoration: InputDecoration(
hintText: "Enter Coupon Code",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
),
suffixIcon: Padding(
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: Text("Apply"),
),
),
),
),
SizedBox(height: 16),
Expanded(
child: ListView.builder(
itemCount: coupons.length,
itemBuilder: (context, index) {
final coupon = coupons[index];
return Card(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
elevation: 2,
child: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
coupon["title"]!,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 5),
Text(
coupon["description"]!,
style: TextStyle(color: Colors.grey[600]),
),
SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
padding: EdgeInsets.symmetric(
horizontal: 10, vertical: 5),
decoration: BoxDecoration(
border: Border.all(color: Colors.green),
borderRadius: BorderRadius.circular(8),
),
child: Text(
coupon["code"]!,
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.green,
),
),
),
ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: Text("Apply"),
)
],
)
],
),
),
);
},
),
),
],
),
),
);
}
}

View File

@@ -1,11 +1,19 @@
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:grocery_app/src/common_widget/name_text_field.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/common_widget/network_image.dart';
import 'package:grocery_app/src/logic/provider/profile_provider.dart';
import 'package:grocery_app/utils/constants/assets_constant.dart'; import 'package:grocery_app/utils/constants/assets_constant.dart';
import 'package:grocery_app/utils/constants/color_constant.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/constants/string_constant.dart';
import 'package:grocery_app/utils/extensions/uicontext.dart'; import 'package:grocery_app/utils/extensions/uicontext.dart';
import 'package:image_picker/image_picker.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
class EditProfileScreen extends StatefulWidget { class EditProfileScreen extends StatefulWidget {
const EditProfileScreen({super.key}); const EditProfileScreen({super.key});
@@ -15,6 +23,51 @@ class EditProfileScreen extends StatefulWidget {
} }
class _EditProfileScreenState extends State<EditProfileScreen> { class _EditProfileScreenState extends State<EditProfileScreen> {
String? name;
String? email;
String? profile;
File? _image;
final ImagePicker _picker = ImagePicker();
TextEditingController firstController = TextEditingController();
TextEditingController lastController = TextEditingController();
@override
void initState() {
getUserDetails();
// TODO: implement initState
super.initState();
}
getUserDetails() async {
firstController.text = APPSTRING.userName;
lastController.text = APPSTRING.userLastName;
profile = APPSTRING.userProfile;
}
/// Pick image from gallery or camera
Future<void> _pickImage() async {
final XFile? pickedFile =
await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) {
setState(() {
profile = pickedFile.path;
_image = File(pickedFile.path);
});
Provider.of<ProfileProvider>(context, listen: false)
.uploadImage(context, _image);
await _saveProfileImage(pickedFile.path);
}
}
Future<void> _saveProfileImage(String imagePath) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('KEY_PROFILE', imagePath);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@@ -43,40 +96,50 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
), ),
), ),
), ),
bottomNavigationBar: Container( bottomNavigationBar:
color: Colors.transparent, Consumer<ProfileProvider>(builder: (context, imageProvider, child) {
height: 60, return Container(
child: Padding( color: Colors.transparent,
padding: const EdgeInsets.only(bottom: 10), height: 60,
child: Row( child: Padding(
children: [ padding: const EdgeInsets.only(bottom: 10),
const SizedBox( child: Row(
width: 15, children: [
), const SizedBox(
Expanded( width: 15,
child: InkWell( ),
onTap: () { Expanded(
Navigator.of(context).pop(); child: InkWell(
}, onTap: imageProvider.isImageLoading
child: Container( ? () {
height: 50, imageProvider.createStore(context,
decoration: BoxDecoration(color: APPCOLOR.lightGreen, borderRadius: BorderRadius.circular(10)), firstController.text, lastController.text);
child: Center( }
child: Text( : null,
"Update", child: Container(
style: context.customRegular(Colors.white, 16), height: 50,
decoration: BoxDecoration(
color: imageProvider.isImageLoading
? APPCOLOR.lightGreen
: APPCOLOR.grey666666,
borderRadius: BorderRadius.circular(10)),
child: Center(
child: Text(
"Update",
style: context.customRegular(Colors.white, 16),
),
), ),
), ),
), ),
), ),
), const SizedBox(
const SizedBox( width: 15,
width: 15, ),
), ],
], ),
), ),
), );
), }),
body: Padding( body: Padding(
padding: context.bodyAllPadding, padding: context.bodyAllPadding,
child: SingleChildScrollView( child: SingleChildScrollView(
@@ -90,26 +153,37 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
Stack( Stack(
alignment: Alignment.center, alignment: Alignment.center,
children: [ children: [
const AppNetworkImage( //
height: 80, CircleAvatar(
width: 80, radius: 40,
imageUrl: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdQLwDqDwd2JfzifvfBTFT8I7iKFFevcedYg&s", backgroundColor: Colors.white,
radius: 90, backgroundImage: _image != null
backGroundColor: Colors.white, ? FileImage(_image!) as ImageProvider
boxFit: BoxFit.fill, : (profile != null && profile!.isNotEmpty
? NetworkImage(profile!)
: const AssetImage("assets/default_profile.png")
as ImageProvider),
), ),
Positioned( Positioned(
bottom: 0, bottom: 0,
right: 0, right: 0,
child: Container( child: GestureDetector(
height: 20, onTap: () {
width: 20, _pickImage();
decoration: BoxDecoration(color: APPCOLOR.lightGreen, border: Border.all(color: Colors.white), borderRadius: BorderRadius.circular(5)), },
child: Center( child: Container(
child: Icon( height: 20,
MdiIcons.pencil, width: 20,
size: 10, decoration: BoxDecoration(
color: Colors.white, color: APPCOLOR.lightGreen,
border: Border.all(color: Colors.white),
borderRadius: BorderRadius.circular(5)),
child: Center(
child: Icon(
MdiIcons.pencil,
size: 10,
color: Colors.white,
),
), ),
), ),
)), )),
@@ -120,34 +194,103 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
const SizedBox( const SizedBox(
height: 15, height: 15,
), ),
const NameTextField( Container(
name: "Name", height: 60,
initText: "Smith Mate", width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(
border: Border.all(color: APPCOLOR.lightGreen),
borderRadius: BorderRadius.circular(15)),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"First Name",
style: context.customMedium(APPCOLOR.lightGreen, 14),
),
Expanded(
child: TextFormField(
controller: firstController,
decoration: const InputDecoration(
border: InputBorder.none,
isCollapsed: true,
contentPadding: EdgeInsets.only(
left: 0,
right: 0,
bottom: 5,
top: 5,
)),
))
],
),
),
), ),
const SizedBox( const SizedBox(
height: 10, height: 10,
), ),
const NameTextField( Container(
name: "Email Address", height: 60,
initText: "SmithMate@example.com", width: MediaQuery.sizeOf(context).width,
), decoration: BoxDecoration(
const SizedBox( border: Border.all(color: APPCOLOR.lightGreen),
height: 10, borderRadius: BorderRadius.circular(15)),
), child: Padding(
const NameTextField( padding: const EdgeInsets.all(8.0),
name: "Mobile Number", child: Column(
initText: "(205) 555-0100", mainAxisAlignment: MainAxisAlignment.start,
), crossAxisAlignment: CrossAxisAlignment.start,
const SizedBox( children: [
height: 10, Text(
), "Last Name ",
const NameTextField( style: context.customMedium(APPCOLOR.lightGreen, 14),
name: "Enter Address", ),
initText: "8502 Preston Rd. inglewood, USA", Expanded(
), child: TextFormField(
const SizedBox( controller: lastController,
height: 10, decoration: const InputDecoration(
border: InputBorder.none,
isCollapsed: true,
contentPadding: EdgeInsets.only(
left: 0,
right: 0,
bottom: 5,
top: 5,
)),
))
],
),
),
), ),
// const NameTextField(
// name: "Last Name",
// initText: "Smith Mate",
// ),
// const SizedBox(
// height: 10,
// ),
// const NameTextField(
// name: "Email Address",
// initText: "SmithMate@example.com",
// ),
// const SizedBox(
// height: 10,
// ),
// const NameTextField(
// name: "Mobile Number",
// initText: "(205) 555-0100",
// ),
// const SizedBox(
// height: 10,
// ),
// const NameTextField(
// name: "Enter Address",
// initText: "8502 Preston Rd. inglewood, USA",
// ),
// const SizedBox(
// height: 10,
// ),
], ],
)), )),
), ),

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,4 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
@@ -79,10 +80,25 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
Widget productWidget() { Widget productWidget() {
return Consumer<ProductProvider>(builder: (context, provider, child) { return Consumer<ProductProvider>(builder: (context, provider, child) {
if (provider.isLoadingg) { if (provider.isLoadingg)
{
return Padding( return Padding(
padding: const EdgeInsets.only(left: 120), padding: const EdgeInsets.only(left: 120),
child: CircularProgressIndicator(), child: Center(
child: Container(
width: 30,
height: 30,
decoration: BoxDecoration(
color: Colors.transparent,
borderRadius: BorderRadius.circular(20),
border: Border.all(
color: APPCOLOR.bgGrey,
width: 1,
)),
child: const Center(
child: CupertinoActivityIndicator(),
),
)),
); );
} else if (provider.products.isEmpty) { } else if (provider.products.isEmpty) {
return Padding( return Padding(
@@ -106,8 +122,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
crossAxisSpacing: 10, crossAxisSpacing: 10,
mainAxisSpacing: 10, mainAxisSpacing: 10,
), ),
itemBuilder: (context, index) itemBuilder: (context, index) {
{
var product = provider.products[index]; var product = provider.products[index];
return InkWell( return InkWell(
@@ -189,31 +204,31 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
// ), // ),
// ), // ),
Positioned( // Positioned(
right: 5, // right: 5,
top: 5, // top: 5,
child: InkWell( // child: InkWell(
onTap: () async { // onTap: () async {
if (await SharedPrefUtils // if (await SharedPrefUtils
.getToken() != // .getToken() !=
null) { // null) {
provider.toggleWishlist( // provider.toggleWishlist(
context, product.id!); // context, product.id!);
} else { // } else {
context.push(MyRoutes.SIGNUP); // context.push(MyRoutes.SIGNUP);
} // }
}, // },
child: Icon( // child: Icon(
provider.wishlist.contains(product.id) // provider.wishlist.contains(product.id)
? Icons.favorite // ? Icons.favorite
: Icons.favorite_border, // : Icons.favorite_border,
color: provider.wishlist // color: provider.wishlist
.contains(product.id) // .contains(product.id)
? Colors.red // ? Colors.red
: Colors.grey, // : Colors.grey,
), // ),
), // ),
), // ),
], ],
), ),
), ),
@@ -221,7 +236,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
Text( Text(
product.name ?? " ", product.name ?? " ",
textAlign: TextAlign.left, textAlign: TextAlign.left,
maxLines: 2, maxLines: 3,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: context.customMedium( style: context.customMedium(
APPCOLOR.balck1A1A1A, 14), APPCOLOR.balck1A1A1A, 14),
@@ -238,6 +253,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
), ),
), ),
const SizedBox(height: 3), const SizedBox(height: 3),
Spacer(),
Row( Row(
children: [ children: [
Column( Column(
@@ -281,7 +297,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
if (await SharedPrefUtils.getToken() != if (await SharedPrefUtils.getToken() !=
null) { null) {
await provider.addToCart( await provider.addToCart(
context, product.id!); context, product.id!, 1);
} else { } else {
context.push(MyRoutes.SIGNUP); context.push(MyRoutes.SIGNUP);
} }
@@ -327,6 +343,8 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
), ),
), ),
), ),
], ],
), ),
], ],
@@ -348,7 +366,21 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
final activeIndexProvider = Provider.of<ProductProvider>(context); final activeIndexProvider = Provider.of<ProductProvider>(context);
return Consumer<ProductProvider>(builder: (context, provider, child) { return Consumer<ProductProvider>(builder: (context, provider, child) {
if (provider.iscategroyloading) { if (provider.iscategroyloading) {
return Center(child: CircularProgressIndicator()); return Center(
child: Container(
width: 20,
height: 20,
decoration: BoxDecoration(
color: APPCOLOR.bgGrey,
borderRadius: BorderRadius.circular(10),
border: Border.all(
color: APPCOLOR.bgGrey,
width: 1,
)),
child: const Center(
child: CupertinoActivityIndicator(),
),
));
} else if (provider.categoryList.isEmpty) { } else if (provider.categoryList.isEmpty) {
return Center(child: Text('No products available')); return Center(child: Text('No products available'));
} else { } else {

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,466 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
import 'package:geocoding/geocoding.dart';
import 'package:grocery_app/src/logic/provider/addTocart_provider.dart';
import 'package:grocery_app/src/logic/provider/address_provider.dart';
import 'package:grocery_app/utils/constants/color_constant.dart';
import 'package:grocery_app/utils/extensions/uicontext.dart';
import 'package:http/http.dart' as http;
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:provider/provider.dart';
const String googleApiKey = "AIzaSyAi3_Dls63iGs7Nccgdm-4FkS0rhT03-4U";
class AddLocationAddress extends StatefulWidget {
@override
_AddLocationAddressState createState() => _AddLocationAddressState();
}
class _AddLocationAddressState extends State<AddLocationAddress> {
final _formKey = GlobalKey<FormState>();
late GoogleMapController mapController;
LatLng _selectedLocation = LatLng(20.5937, 78.9629);
TextEditingController _pincodeController = TextEditingController();
TextEditingController _fullNameController = TextEditingController();
TextEditingController _PhoneNumberController = TextEditingController();
TextEditingController _addressTypeController = TextEditingController();
TextEditingController _HouseNoController = TextEditingController();
TextEditingController _RoadController = TextEditingController();
TextEditingController _AlterNativeNumberController = TextEditingController();
@override
void initState() {
super.initState();
_determinePosition();
}
Future<void> _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);
setState(() {
_selectedLocation = currentLatLng;
});
_getAddressFromLatLng(position.latitude, position.longitude);
}
Future<void> _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;
// });
_pincodeController.text = pincode;
_RoadController.text = result["formatted_address"];
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");
}
}
void _onMapTapped(LatLng tappedPoint) {
setState(() {
_selectedLocation = tappedPoint;
});
_getAddressFromLatLng(tappedPoint.latitude, tappedPoint.longitude);
}
Future<void> _updateLocationFromPincode(String enteredPincode) async {
if (enteredPincode.isEmpty) return;
try {
List<Location> locations = await locationFromAddress(enteredPincode);
if (locations.isNotEmpty) {
Location location = locations.first;
LatLng newLatLng = LatLng(location.latitude, location.longitude);
setState(() {
_selectedLocation = newLatLng;
});
_getAddressFromLatLng(location.latitude, location.longitude);
mapController.animateCamera(CameraUpdate.newLatLng(newLatLng));
}
} catch (e) {
print("Error fetching location from pincode: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Add Delivery address")),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: SingleChildScrollView(
child: Column(
children: [
Container(
height: 200.h,
child: GoogleMap(
initialCameraPosition: CameraPosition(
target: _selectedLocation,
zoom: 14,
),
onMapCreated: (controller) {
mapController = controller;
},
myLocationEnabled: true, // Enable current location button
myLocationButtonEnabled: true,
markers: {
Marker(
markerId: MarkerId("selected Location"),
position: _selectedLocation,
)
},
onTap: _onMapTapped,
),
),
Container(
padding: EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [BoxShadow(color: Colors.black12, blurRadius: 10)],
),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 10),
TextFormField(
controller: _fullNameController,
keyboardType: TextInputType.text,
decoration: InputDecoration(
labelText: "Full Name (Required)*",
border: OutlineInputBorder(),
),
validator: (value) {
if (value == null || value.isEmpty) {
return "Full Name";
}
return null; // ✅ Valid input
},
// Auto-update on enter
),
SizedBox(height: 10),
TextFormField(
controller: _PhoneNumberController,
keyboardType: TextInputType.number,
maxLength: 10,
decoration: InputDecoration(
labelText: "Phone Number (Required)*",
border: OutlineInputBorder(),
),
validator: (value) {
if (value == null || value.isEmpty) {
return "Phone Number ";
}
return null; // ✅ Valid input
},
),
SizedBox(height: 10),
Row(
children: [
Expanded(
child: TextFormField(
controller: _pincodeController,
keyboardType: TextInputType.number,
maxLength: 6,
decoration: InputDecoration(
labelText: "Enter Pincode",
border: OutlineInputBorder(),
counterText: ""),
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter a pincode";
} else if (value.length != 6) {
return "Pincode must be exactly 6 digits";
} else if (!RegExp(r'^[1-9][0-9]{5}$')
.hasMatch(value)) {
return "Enter a valid Indian pincode";
}
return null; // ✅ Valid input
},
),
),
SizedBox(
width: 10,
),
// Expanded(
// child: TextFormField(
// controller: _addressTypeController,
// keyboardType: TextInputType.text,
// decoration: InputDecoration(
// labelText: "Address Type",
// border: OutlineInputBorder(),
// ),
// validator: (value) {
// if (value == null || value.isEmpty) {
// return "Enter address Home or Work ";
// }
// return null; // ✅ Valid input
// },
// ),
// ),\
Expanded(
child: DropdownButtonFormField<String>(
value: _addressTypeController.text.isNotEmpty
? _addressTypeController.text
: null,
items:
["HOME", "WORK", "OTHER"].map((String type) {
return DropdownMenuItem<String>(
value: type,
child: Text(type),
);
}).toList(),
decoration: InputDecoration(
labelText: "Address Type",
border: OutlineInputBorder(),
),
onChanged: (value) {
if (value != null) {
_addressTypeController.text = value;
}
},
validator: (value) {
if (value == null || value.isEmpty) {
return "Select Address Type (Home, Work, Other)";
}
return null;
},
),
),
],
),
SizedBox(height: 10),
TextFormField(
controller: _HouseNoController,
keyboardType: TextInputType.text,
decoration: InputDecoration(
labelText: "House No, Building Name (Required)*",
border: OutlineInputBorder(),
),
validator: (value) {
if (value == null || value.isEmpty) {
return "Enter House No, Building ";
}
return null; // ✅ Valid input
},
),
SizedBox(height: 10),
TextFormField(
controller: _RoadController,
keyboardType: TextInputType.text,
decoration: InputDecoration(
labelText: "Road Name, Area , Colony(Required)*",
border: OutlineInputBorder(),
),
validator: (value) {
if (value == null || value.isEmpty) {
return "Enter Road Name, Area , Colony(Required)";
}
return null; // ✅ Valid input
},
),
SizedBox(height: 10),
Consumer<AddressProvider>(
builder: (context, addressProvider, child)
{
return InkWell(
onTap: () async {
if (_formKey.currentState!.validate()) {
var status = await addressProvider.checkPin(
context, _pincodeController.text);
if (status) {
var state = await addressProvider.addAddress(
context,
_fullNameController.text,
_pincodeController.text,
_PhoneNumberController.text,
_PhoneNumberController.text,
_HouseNoController.text,
_RoadController.text,
_addressTypeController.text);
if (state) {
context .read<AddtocartProvider>()
.getAddress(context);
Fluttertoast.showToast(
msg: "Address Added!",
backgroundColor: Colors.lightGreen);
Navigator.pop(context);
}
} else {
Fluttertoast.showToast(
msg:
"Delivery is not available for this pincode. Please try another pincode!",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
backgroundColor: Colors.red,
textColor: Colors.white,
fontSize: 14.0,
);
}
}
},
child: Container(
margin: const EdgeInsets.only(
left: 15, right: 15, top: 10, bottom: 10),
height: 50,
width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(
color: APPCOLOR.lightGreen,
borderRadius: BorderRadius.circular(10),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
if (addressProvider.ischeckpin)
const CircularProgressIndicator(
color: Colors.white,
)
else
Text(
"Save Address",
style: context.customMedium(
Colors.white, 20),
),
],
),
),
);
},
),
// InkWell(
// onTap: () async {
// if (_formKey.currentState!.validate()) {
// var status = await Provider.of<AddressProvider>(
// context,
// listen: false)
// .checkPin(context, _pincodeController.text);
// if (status) {
// // var status = await Provider.of<AddressProvider>(
// // context,
// // listen: false)
// // .addAddress(context, _pincodeController.text);
// } else {
// // Delivery is not available for this pincode. Please try another pincode.
// Fluttertoast.showToast(
// msg:
// "Delivery is not available for this pincode. Please try another pincode!",
// toastLength: Toast.LENGTH_SHORT,
// gravity: ToastGravity.BOTTOM,
// backgroundColor: Colors.red,
// textColor: Colors.white,
// fontSize: 14.0,
// );
// }
// }
// },
// child: Container(
// margin: const EdgeInsets.only(
// left: 15, right: 15, top: 10, bottom: 10),
// height: 50,
// width: MediaQuery.sizeOf(context).width,
// decoration: BoxDecoration(
// color: APPCOLOR.lightGreen,
// borderRadius: BorderRadius.circular(10)),
// child: Row(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center,
// children: [
// const SizedBox(
// width: 10,
// ),
// Text(
// "Save Address",
// style: context.customMedium(Colors.white, 20),
// ),
// ],
// ),
// ),
// ),
SizedBox(height: 20),
],
),
),
),
],
),
),
),
);
}
}

View File

@@ -1,330 +0,0 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
import 'package:geocoding/geocoding.dart';
import 'package:grocery_app/utils/constants/color_constant.dart';
import 'package:grocery_app/utils/extensions/uicontext.dart';
import 'package:http/http.dart' as http;
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
const String googleApiKey = "AIzaSyAi3_Dls63iGs7Nccgdm-4FkS0rhT03-4U";
class MapScreen extends StatefulWidget {
@override
_MapScreenState createState() => _MapScreenState();
}
class _MapScreenState extends State<MapScreen> {
late GoogleMapController mapController;
LatLng _selectedLocation = LatLng(20.5937, 78.9629);
TextEditingController _pincodeController = TextEditingController();
TextEditingController _fullNameController = TextEditingController();
TextEditingController _PhoneNumberController = TextEditingController();
TextEditingController _addressTypeController = TextEditingController();
TextEditingController _HouseNoController = TextEditingController();
TextEditingController _RoadController = TextEditingController();
TextEditingController _AlterNativeNumberController = TextEditingController();
@override
void initState() {
super.initState();
_determinePosition();
}
Future<void> _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);
setState(() {
_selectedLocation = currentLatLng;
});
_getAddressFromLatLng(position.latitude, position.longitude);
}
Future<void> _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;
// });
_pincodeController.text = pincode;
_RoadController.text = result["formatted_address"];
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");
}
}
// On map tapped
void _onMapTapped(LatLng tappedPoint) {
setState(() {
_selectedLocation = tappedPoint;
});
_getAddressFromLatLng(tappedPoint.latitude, tappedPoint.longitude);
}
// Update location based on entered pincode
Future<void> _updateLocationFromPincode(String enteredPincode) async {
if (enteredPincode.isEmpty) return;
try {
List<Location> locations = await locationFromAddress(enteredPincode);
if (locations.isNotEmpty) {
Location location = locations.first;
LatLng newLatLng = LatLng(location.latitude, location.longitude);
setState(() {
_selectedLocation = newLatLng;
});
_getAddressFromLatLng(location.latitude, location.longitude);
mapController.animateCamera(CameraUpdate.newLatLng(newLatLng));
}
} catch (e) {
print("Error fetching location from pincode: $e");
}
}
// {
// "name": "Socket Mall",
// "pincode": "400001",
// "phoneNumber": "+919876543210",
// "alternatePhoneNumber": "+919876543211",
// "addressLine": "123, Main Street, Apartment 4B",
// "landmark": "Near Central Park",
// "addressType": "HOME",
// "isDefault": false,
// "additionalInstructions": "Please ring doorbell twice"
// }
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Add Delivery address")),
body: Column(
children: [
Container(
height: 200.h,
child: GoogleMap(
initialCameraPosition: CameraPosition(
target: _selectedLocation,
zoom: 14,
),
onMapCreated: (controller) {
mapController = controller;
},
markers: {
Marker(
markerId: MarkerId("selected Location"),
position: _selectedLocation,
)
},
onTap: _onMapTapped,
),
),
SingleChildScrollView(
child: Container(
padding: EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [BoxShadow(color: Colors.black12, blurRadius: 10)],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Text("Selected Address:",
// style: TextStyle(fontWeight: FontWeight.bold)),
// SizedBox(height: 5),
// Text(_address, style: TextStyle(fontSize: 16)),
SizedBox(height: 10),
TextField(
controller: _fullNameController,
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: "Full Name (Required)*",
border: OutlineInputBorder(),
),
onChanged: (value) {},
onSubmitted:
_updateLocationFromPincode, // Auto-update on enter
),
SizedBox(height: 10),
TextField(
controller: _PhoneNumberController,
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: "Phone Number (Required)*",
border: OutlineInputBorder(),
),
onChanged: (value) {},
onSubmitted:
_updateLocationFromPincode, // Auto-update on enter
),
SizedBox(height: 10),
Row(
children: [
Expanded(
child: TextField(
controller: _pincodeController,
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: "Enter Pincode",
border: OutlineInputBorder(),
),
onChanged: (value) {},
onSubmitted:
_updateLocationFromPincode, // Auto-update on enter
),
),
SizedBox(
width: 10,
),
Expanded(
child: TextField(
controller: _addressTypeController,
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: "Address Type",
border: OutlineInputBorder(),
),
onChanged: (value) {},
onSubmitted:
_updateLocationFromPincode, // Auto-update on enter
),
),
],
),
SizedBox(height: 10),
TextField(
controller: _HouseNoController,
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: "House No, Building Name (Required)*",
border: OutlineInputBorder(),
),
onChanged: (value) {},
onSubmitted:
_updateLocationFromPincode, // Auto-update on enter
),
SizedBox(height: 10),
TextField(
controller: _RoadController,
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: "Road Name, Area , Colony(Required)*",
border: OutlineInputBorder(),
),
onChanged: (value) {},
onSubmitted:
_updateLocationFromPincode, // Auto-update on enter
),
SizedBox(height: 10),
InkWell(
onTap: () {
// print("fjnghkjfjghj");
// Provider.of<ProductProvider>(context, listen: false)
// .customerLogOut(context);
},
child: Container(
margin: const EdgeInsets.only(
left: 15, right: 15, top: 10, bottom: 10),
height: 50,
width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(
color: APPCOLOR.lightGreen,
borderRadius: BorderRadius.circular(10)),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const SizedBox(
width: 10,
),
Text(
"Save Address",
style: context.customMedium(Colors.white, 20),
),
],
),
),
),
// ElevatedButton(
// onPressed: () {
// Navigator.pop(context, {
// "location": _selectedLocation,
// "address": _address,
// "pincode": _pincode
// });
// },
// child: Text("Confirm Location"),
// ),
],
),
),
),
],
),
);
}
}

View File

@@ -10,6 +10,7 @@ import 'package:go_router/go_router.dart';
import 'package:grocery_app/src/common_widget/network_image.dart'; import 'package:grocery_app/src/common_widget/network_image.dart';
import 'package:grocery_app/src/core/routes/routes.dart'; import 'package:grocery_app/src/core/routes/routes.dart';
import 'package:grocery_app/src/data/allProduct_model.dart'; import 'package:grocery_app/src/data/allProduct_model.dart';
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
import 'package:grocery_app/src/logic/provider/home_provider.dart'; import 'package:grocery_app/src/logic/provider/home_provider.dart';
import 'package:grocery_app/utils/constants/assets_constant.dart'; import 'package:grocery_app/utils/constants/assets_constant.dart';
import 'package:grocery_app/utils/constants/color_constant.dart'; import 'package:grocery_app/utils/constants/color_constant.dart';
@@ -18,6 +19,7 @@ import 'package:grocery_app/utils/extensions/uicontext.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:readmore/readmore.dart'; import 'package:readmore/readmore.dart';
import 'package:shimmer/shimmer.dart';
class ProductDetails extends StatefulWidget { class ProductDetails extends StatefulWidget {
String id; String id;
@@ -95,7 +97,6 @@ class _ProductDetailsState extends State<ProductDetails> {
prodectDtails(), prodectDtails(),
Divider(), Divider(),
reviews(), reviews(),
Divider(),
Padding( Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0), padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Text("Similar Products", child: Text("Similar Products",
@@ -110,20 +111,39 @@ class _ProductDetailsState extends State<ProductDetails> {
), ),
), ),
), ),
// bottomNavigationBar: bottomBar(), bottomNavigationBar: bottomBar(),
); );
} }
double calculateDiscountPercentage(double basePrice, double discountPrice) {
print(
"Base Price (Before Discount): $basePrice, Discount Price (After Discount): $discountPrice");
if (basePrice <= 0 || discountPrice <= 0 || discountPrice > basePrice) {
print("Error: Invalid price values.");
return 0;
}
double discountAmount = basePrice - discountPrice;
double discountPercentage = (discountAmount / basePrice) * 100;
return discountPercentage;
}
Widget prodectDtails() { Widget prodectDtails() {
return Consumer<ProductProvider>(builder: (context, provider, child) { return Consumer<ProductProvider>(builder: (context, provider, child) {
if (provider.isProductLoading) { if (provider.isProductLoading) {
return Center( return _buildSkeletonLoader();
child: CircularProgressIndicator(
color: Colors.green,
));
} else if (provider.productDetails.data == null) { } else if (provider.productDetails.data == null) {
return Center(child: Text('No products available')); return Center(child: Text('No products available'));
} else { } else {
provider.setProductPrice(
double.parse(provider.productDetails.data!.discountPrice));
provider.productQuantity = provider.productDetails.data!.quantity;
if (provider.productDetails.data!.isInWishlist!) {
provider.wishlist.contains(provider.productDetails.data!.id);
}
return Column( return Column(
children: [ children: [
SizedBox( SizedBox(
@@ -206,43 +226,13 @@ class _ProductDetailsState extends State<ProductDetails> {
color: Colors.green, color: Colors.green,
borderRadius: BorderRadius.circular(5), borderRadius: BorderRadius.circular(5),
), ),
child: Text("10% OFF", child: Text(
"${calculateDiscountPercentage(double.parse(provider.productDetails.data!.basePrice), double.parse(provider.productDetails.data!.discountPrice))}% OFF",
style: style:
TextStyle(color: Colors.white, fontSize: 14)), TextStyle(color: Colors.white, fontSize: 14)),
), ),
Spacer(),
InkWell(
onTap: () async {
if (await SharedPrefUtils.getToken() != null) {
provider.toggleWishlist(
context, provider.productDetails.data!.id!);
} else {
context.push(MyRoutes.SIGNUP);
}
},
child: Icon(
provider.wishlist
.contains(provider.productDetails.data!.id)
? Icons.favorite
: Icons.favorite_border,
color: provider.wishlist
.contains(provider.productDetails.data!.id)
? Colors.red
: Colors.grey,
),
),
], ],
), ),
SizedBox(height: 10),
ReadMoreText(
provider.productDetails.data!.description ?? "",
trimMode: TrimMode.Line,
trimLines: 2,
colorClickableText: APPCOLOR.appGreen,
trimCollapsedText: 'Read More',
trimExpandedText: 'Show less',
style: context.customMedium(APPCOLOR.balck1A1A1A, 14),
),
], ],
), ),
), ),
@@ -252,262 +242,320 @@ class _ProductDetailsState extends State<ProductDetails> {
}); });
} }
Widget reviews() { Widget _buildSkeletonLoader() {
return Padding( return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0), padding: const EdgeInsets.all(16.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text("Reviews & Ratings", Shimmer.fromColors(
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)), baseColor: Colors.grey[300]!,
SizedBox(height: 10), highlightColor: Colors.grey[100]!,
Row( child: Container(
children: [ height: 300,
Text("4.2", color: Colors.white,
style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)), ),
SizedBox(
width: 10,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
RatingStars(
value: value,
onValueChanged: (v) {
//
setState(() {
value = v;
});
},
starBuilder: (index, color) => Icon(
Icons.star,
color: color,
),
starCount: 5,
starSize: 20,
valueLabelColor: const Color(0xff9b9b9b),
valueLabelTextStyle: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.w400,
fontStyle: FontStyle.normal,
fontSize: 12.0),
valueLabelRadius: 10,
maxValue: 5,
starSpacing: 2,
maxValueVisibility: false,
valueLabelVisibility: false,
animationDuration: Duration(milliseconds: 1000),
valueLabelPadding:
const EdgeInsets.symmetric(vertical: 1, horizontal: 8),
valueLabelMargin: const EdgeInsets.only(right: 8),
starOffColor: const Color(0xffe7e8ea),
starColor: Colors.green,
),
Text(
"April 10, 2023",
style: TextStyle(color: Colors.grey),
),
],
),
],
), ),
SizedBox(height: 10), SizedBox(height: 10),
Row( Shimmer.fromColors(
crossAxisAlignment: baseColor: Colors.grey[300]!,
CrossAxisAlignment.start, // Align items at the top highlightColor: Colors.grey[100]!,
children: [ child: Container(
CircleAvatar( height: 20,
backgroundImage: NetworkImage('https://via.placeholder.com/50'), width: double.infinity,
), color: Colors.white,
SizedBox(width: 10), ),
// Column for Text and RatingStars
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween, // Proper spacing
children: [
Text(
"Johnson Smith",
style: TextStyle(fontWeight: FontWeight.bold),
),
RatingStars(
value: value,
starBuilder: (index, color) => Icon(
Icons.star,
color: color,
),
starCount: 5,
starSize: 20,
maxValue: 5,
starSpacing: 2,
maxValueVisibility: false,
valueLabelVisibility: false,
animationDuration: Duration(milliseconds: 1000),
valueLabelPadding: const EdgeInsets.symmetric(
vertical: 1, horizontal: 8),
valueLabelMargin: const EdgeInsets.only(right: 8),
starOffColor: const Color(0xffe7e8ea),
starColor: Colors.green,
),
],
),
SizedBox(height: 4),
Text(
"April 10, 2023",
style: TextStyle(color: Colors.grey),
),
],
),
),
],
), ),
SizedBox(height: 10), SizedBox(height: 10),
ReadMoreText( Shimmer.fromColors(
'Flutter is Googles mobile UI open source framework to build high-quality native (super fast) interfaces for iOS and Android apps with the unified codebase.', baseColor: Colors.grey[300]!,
trimMode: TrimMode.Line, highlightColor: Colors.grey[100]!,
trimLines: 2, child: Container(
colorClickableText: APPCOLOR.appGreen, height: 20,
trimCollapsedText: 'Read More', width: 150,
trimExpandedText: 'Show less', color: Colors.white,
style: context.customMedium(APPCOLOR.balck1A1A1A, 14), ),
), ),
], ],
), ),
); );
} }
// Widget similarProducts() { Widget reviews() {
// return SizedBox( return Consumer<ProductProvider>(builder: (context, provider, child) {
// height: 222, if (provider.isProductLoading) {
// child: ListView.builder( return SizedBox.shrink();
// itemCount: 5, } else if (provider.productDetails.data == null) {
// scrollDirection: Axis.horizontal, return Center(child: Text('No products available'));
// itemBuilder: (context, index) { } else {
// return Padding( return provider.productDetails.data!.productReview!.isNotEmpty
// padding: const EdgeInsets.only(right: 10, bottom: 5, top: 5), ? Padding(
// child: Container( padding: const EdgeInsets.symmetric(horizontal: 16.0),
// height: 215, child: Column(
// width: 150, crossAxisAlignment: CrossAxisAlignment.start,
// decoration: BoxDecoration( children: [
// color: Colors.white, Text("Reviews & Ratings",
// borderRadius: BorderRadius.circular(15), style: TextStyle(
// boxShadow: [ fontSize: 20, fontWeight: FontWeight.bold)),
// BoxShadow( SizedBox(height: 10),
// color: Colors.grey.withOpacity(0.1), Row(
// blurRadius: 1, children: [
// offset: const Offset(5, 5), Text("4.2",
// ), style: TextStyle(
// ]), fontSize: 30, fontWeight: FontWeight.bold)),
// child: Padding( SizedBox(
// padding: const EdgeInsets.all(5), width: 10,
// child: Column( ),
// crossAxisAlignment: CrossAxisAlignment.start, Column(
// children: [ crossAxisAlignment: CrossAxisAlignment.start,
// Container( children: [
// height: 100, RatingStars(
// width: 150, value: value,
// decoration: BoxDecoration( onValueChanged: (v) {
// color: APPCOLOR.bgGrey, //
// borderRadius: BorderRadius.circular(15)), setState(() {
// child: const Stack( value = v;
// alignment: Alignment.center, });
// children: [ },
// AppNetworkImage( starBuilder: (index, color) => Icon(
// height: 70, Icons.star,
// width: 70, color: color,
// imageUrl: ),
// "https://5.imimg.com/data5/SELLER/Default/2024/2/385126988/OL/DA/VW/8627346/1l-fortune-sunflower-oil.jpg", starCount: 5,
// backGroundColor: Colors.transparent), starSize: 20,
// Positioned( valueLabelColor: const Color(0xff9b9b9b),
// right: 5, valueLabelTextStyle: const TextStyle(
// top: 5, color: Colors.white,
// child: Icon(Icons.favorite_border)) fontWeight: FontWeight.w400,
// ], fontStyle: FontStyle.normal,
// ), fontSize: 12.0),
// ), valueLabelRadius: 10,
// Text( maxValue: 5,
// "Fortune Arhar Dal (Toor Dal)", starSpacing: 2,
// textAlign: TextAlign.left, maxValueVisibility: false,
// maxLines: 2, valueLabelVisibility: false,
// overflow: TextOverflow.ellipsis, animationDuration: Duration(milliseconds: 1000),
// style: context.customMedium(APPCOLOR.balck1A1A1A, 14), valueLabelPadding: const EdgeInsets.symmetric(
// ), vertical: 1, horizontal: 8),
// const SizedBox( valueLabelMargin: const EdgeInsets.only(right: 8),
// height: 5, starOffColor: const Color(0xffe7e8ea),
// ), starColor: Colors.green,
// Text( ),
// "500 ML", Text(
// textAlign: TextAlign.left, "April 10, 2023",
// maxLines: 1, style: TextStyle(color: Colors.grey),
// overflow: TextOverflow.ellipsis, ),
// style: context.customMedium( ],
// Colors.grey.withOpacity(0.8), 12), ),
// ), ],
// const SizedBox( ),
// height: 3, SizedBox(height: 10),
// ), Row(
// Row( crossAxisAlignment:
// children: [ CrossAxisAlignment.start, // Align items at the top
// Expanded( children: [
// child: Row( CircleAvatar(
// children: [ backgroundImage:
// Text( NetworkImage('https://via.placeholder.com/50'),
// "\$12", ),
// textAlign: TextAlign.left, SizedBox(width: 10),
// maxLines: 1,
// overflow: TextOverflow.ellipsis, // Column for Text and RatingStars
// style: context.customSemiBold(Colors.black, 12), Expanded(
// ), child: Column(
// const SizedBox( crossAxisAlignment: CrossAxisAlignment.start,
// width: 5, children: [
// ), Row(
// Text( mainAxisAlignment: MainAxisAlignment
// "\$14", .spaceBetween, // Proper spacing
// textAlign: TextAlign.left, children: [
// maxLines: 1, Text(
// overflow: TextOverflow.ellipsis, "Johnson Smith",
// style: context style:
// .customMedium( TextStyle(fontWeight: FontWeight.bold),
// Colors.grey.withOpacity(0.8), 12) ),
// .copyWith( RatingStars(
// decoration: TextDecoration.lineThrough, value: value,
// ), starBuilder: (index, color) => Icon(
// ), Icons.star,
// ], color: color,
// )), ),
// Expanded( starCount: 5,
// child: Align( starSize: 20,
// alignment: Alignment.centerRight, maxValue: 5,
// child: Container( starSpacing: 2,
// height: 30, maxValueVisibility: false,
// width: 50, valueLabelVisibility: false,
// decoration: BoxDecoration( animationDuration:
// color: APPCOLOR.lightGreen, Duration(milliseconds: 1000),
// borderRadius: BorderRadius.circular(5), valueLabelPadding:
// ), const EdgeInsets.symmetric(
// child: Center( vertical: 1, horizontal: 8),
// child: Text( valueLabelMargin:
// 'Add', const EdgeInsets.only(right: 8),
// style: context.customRegular(Colors.white, 12), starOffColor: const Color(0xffe7e8ea),
// )), starColor: Colors.green,
// ), ),
// ), ],
// ) ),
// ], SizedBox(height: 4),
// ), Text(
// ], "April 10, 2023",
// ), style: TextStyle(color: Colors.grey),
// ), ),
// ), ],
// ); ),
// }, ),
// ), ],
// ); ),
// } SizedBox(height: 10),
ReadMoreText(
'Flutter is Googles mobile UI open source framework to build high-quality native (super fast) interfaces for iOS and Android apps with the unified codebase.',
trimMode: TrimMode.Line,
trimLines: 2,
colorClickableText: APPCOLOR.appGreen,
trimCollapsedText: 'Read More',
trimExpandedText: 'Show less',
style: context.customMedium(APPCOLOR.balck1A1A1A, 14),
),
],
),
)
: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Reviews & Ratings",
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.bold)),
SizedBox(height: 10),
Row(
children: [
Text("4.2",
style: TextStyle(
fontSize: 30, fontWeight: FontWeight.bold)),
SizedBox(
width: 10,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
RatingStars(
value: value,
onValueChanged: (v) {
//
setState(() {
value = v;
});
},
starBuilder: (index, color) => Icon(
Icons.star,
color: color,
),
starCount: 5,
starSize: 20,
valueLabelColor: const Color(0xff9b9b9b),
valueLabelTextStyle: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.w400,
fontStyle: FontStyle.normal,
fontSize: 12.0),
valueLabelRadius: 10,
maxValue: 5,
starSpacing: 2,
maxValueVisibility: false,
valueLabelVisibility: false,
animationDuration: Duration(milliseconds: 1000),
valueLabelPadding: const EdgeInsets.symmetric(
vertical: 1, horizontal: 8),
valueLabelMargin: const EdgeInsets.only(right: 8),
starOffColor: const Color(0xffe7e8ea),
starColor: Colors.green,
),
Text(
"April 10, 2023",
style: TextStyle(color: Colors.grey),
),
],
),
],
),
SizedBox(height: 10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start, // Align items at the top
children: [
CircleAvatar(
backgroundImage:
NetworkImage('https://via.placeholder.com/50'),
),
SizedBox(width: 10),
// Column for Text and RatingStars
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment
.spaceBetween, // Proper spacing
children: [
Text(
"Johnson Smith",
style:
TextStyle(fontWeight: FontWeight.bold),
),
RatingStars(
value: value,
starBuilder: (index, color) => Icon(
Icons.star,
color: color,
),
starCount: 5,
starSize: 20,
maxValue: 5,
starSpacing: 2,
maxValueVisibility: false,
valueLabelVisibility: false,
animationDuration:
Duration(milliseconds: 1000),
valueLabelPadding:
const EdgeInsets.symmetric(
vertical: 1, horizontal: 8),
valueLabelMargin:
const EdgeInsets.only(right: 8),
starOffColor: const Color(0xffe7e8ea),
starColor: Colors.green,
),
],
),
SizedBox(height: 4),
Text(
"April 10, 2023",
style: TextStyle(color: Colors.grey),
),
],
),
),
],
),
SizedBox(height: 10),
ReadMoreText(
'Flutter is Googles mobile UI open source framework to build high-quality native (super fast) interfaces for iOS and Android apps with the unified codebase.',
trimMode: TrimMode.Line,
trimLines: 2,
colorClickableText: APPCOLOR.appGreen,
trimCollapsedText: 'Read More',
trimExpandedText: 'Show less',
style: context.customMedium(APPCOLOR.balck1A1A1A, 14),
),
],
),
);
}
});
}
Widget bestDeal() { Widget bestDeal() {
return Consumer<ProductProvider>(builder: (context, provider, child) { return Consumer<ProductProvider>(builder: (context, provider, child) {
@@ -678,7 +726,7 @@ class _ProductDetailsState extends State<ProductDetails> {
false false
? null ? null
: () => provider.addToCart( : () => provider.addToCart(
context, bestdealproduct.id!); context, bestdealproduct.id!, 1);
} else { } else {
context.push(MyRoutes.SIGNUP); context.push(MyRoutes.SIGNUP);
} }
@@ -730,71 +778,90 @@ class _ProductDetailsState extends State<ProductDetails> {
} }
Widget bottomBar() { Widget bottomBar() {
return Consumer<ProductProvider>( return Consumer<ProductProvider>(builder: (context, cartProvider, child) {
builder: (context, cartProvider, child) { return Container(
return Container( padding: EdgeInsets.all(16),
padding: EdgeInsets.all(16), decoration: BoxDecoration(
decoration: BoxDecoration( color: Colors.white,
color: Colors.white, boxShadow: [BoxShadow(color: Colors.grey.shade300, blurRadius: 10)],
boxShadow: [BoxShadow(color: Colors.grey.shade300, blurRadius: 10)], ),
), child: Row(
child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
children: [ Row(
Row( children: [
children: [ IconButton(
IconButton( icon: Icon(Icons.remove_circle_outline),
icon: Icon(Icons.remove_circle_outline), onPressed: cartProvider.decreaseQuantity,
onPressed: cartProvider.decreaseQuantity, ),
), Text("${cartProvider.quantity}",
Text("${cartProvider.quantity}", style:
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), IconButton(
IconButton( icon: Icon(Icons.add_circle_outline),
icon: Icon(Icons.add_circle_outline), onPressed: cartProvider.increaseQuantity,
onPressed: cartProvider.increaseQuantity, ),
), ],
], ),
Container(
height: 50,
decoration: BoxDecoration(
color: APPCOLOR.lightGreen,
borderRadius: BorderRadius.circular(5),
), ),
Container( child: Padding(
height: 50, padding: const EdgeInsets.all(8.0),
decoration: BoxDecoration( child: Center(
color: APPCOLOR.lightGreen, child: Row(
borderRadius: BorderRadius.circular(5), children: [
), InkWell(
child: Padding( onTap: () {
padding: const EdgeInsets.all(8.0), cartProvider.addToCart(
child: Center( context,
child: Row( cartProvider.productDetails.data!.id!,
children: [ cartProvider.quantity);
Text( },
'Add to Cart', child: cartProvider.isLoadingCart
style: TextStyle( ? Padding(
fontSize: 20, padding:
fontWeight: FontWeight.bold, const EdgeInsets.only(left: 40, right: 40),
color: Colors.white), child: Container(
), height: 15,
SizedBox(width: 10), width: 15,
Container( child: Center(
width: 2, height: 50, color: APPCOLOR.whiteFBFEFB), child: CircularProgressIndicator(
SizedBox(width: 10), color: Colors.white, strokeWidth: 2),
Text( ),
"\$${cartProvider.totalPrice}", ),
style: TextStyle( )
fontSize: 25, : Text(
fontWeight: FontWeight.bold, 'Add to Cart',
color: Colors.white), style: TextStyle(
), fontSize: 20,
], fontWeight: FontWeight.bold,
), color: Colors.white),
),
),
SizedBox(width: 10),
Container(
width: 2, height: 50, color: APPCOLOR.whiteFBFEFB),
SizedBox(width: 10),
Text(
"\$${cartProvider.totalPrice}",
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: Colors.white),
),
],
), ),
), ),
) ),
], )
), ],
); ),
}, );
); });
} }
} }

View File

@@ -3,16 +3,19 @@ import 'package:grocery_app/src/common_widget/network_image.dart';
import 'package:grocery_app/src/logic/provider/home_provider.dart'; import 'package:grocery_app/src/logic/provider/home_provider.dart';
import 'package:grocery_app/src/ui/card_checkout/card_checkout_screen.dart'; import 'package:grocery_app/src/ui/card_checkout/card_checkout_screen.dart';
import 'package:grocery_app/src/ui/edit_profile/edit_profile_screen.dart'; import 'package:grocery_app/src/ui/edit_profile/edit_profile_screen.dart';
import 'package:grocery_app/src/ui/map/google_map.dart';
import 'package:grocery_app/src/ui/mapscreen/map_screen.dart'; import 'package:grocery_app/src/ui/mapscreen/map_screen.dart';
import 'package:grocery_app/src/ui/message/message_screen.dart'; import 'package:grocery_app/src/ui/message/message_screen.dart';
import 'package:grocery_app/src/ui/notification/notification_screen.dart'; import 'package:grocery_app/src/ui/notification/notification_screen.dart';
import 'package:grocery_app/src/ui/rating_review/rating_review_screen.dart'; import 'package:grocery_app/src/ui/rating_review/rating_review_screen.dart';
import 'package:grocery_app/src/ui/static_page/static_page_screen.dart'; import 'package:grocery_app/src/ui/static_page/static_page_screen.dart';
import 'package:grocery_app/utils/constants/color_constant.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/constants/string_constant.dart';
import 'package:grocery_app/utils/extensions/uicontext.dart'; import 'package:grocery_app/utils/extensions/uicontext.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
class ProfileScreen extends StatefulWidget { class ProfileScreen extends StatefulWidget {
const ProfileScreen({super.key}); const ProfileScreen({super.key});
@@ -25,7 +28,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
var top = 0.0; var top = 0.0;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context)
{
return Scaffold( return Scaffold(
body: NestedScrollView( body: NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
@@ -69,34 +73,34 @@ class _ProfileScreenState extends State<ProfileScreen> {
AppNetworkImage( AppNetworkImage(
height: top < 150 ? 30 : 50, height: top < 150 ? 30 : 50,
width: top < 150 ? 30 : 50, width: top < 150 ? 30 : 50,
imageUrl: imageUrl: "${APPSTRING.userProfile ?? ""}" ??
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdQLwDqDwd2JfzifvfBTFT8I7iKFFevcedYg&s", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdQLwDqDwd2JfzifvfBTFT8I7iKFFevcedYg&s",
radius: 90, radius: 90,
backGroundColor: Colors.white, backGroundColor: Colors.white,
boxFit: BoxFit.fill, boxFit: BoxFit.fill,
), ),
top > 100 // top > 100
? Positioned( // ? Positioned(
bottom: 0, // bottom: 0,
right: 0, // right: 0,
child: Container( // child: Container(
height: 18, // height: 18,
width: 18, // width: 18,
decoration: BoxDecoration( // decoration: BoxDecoration(
color: APPCOLOR.lightGreen, // color: APPCOLOR.lightGreen,
border: Border.all( // border: Border.all(
color: Colors.white), // color: Colors.white),
borderRadius: // borderRadius:
BorderRadius.circular(5)), // BorderRadius.circular(5)),
child: Center( // child: Center(
child: Icon( // child: Icon(
MdiIcons.pencil, // MdiIcons.pencil,
size: 10, // size: 10,
color: Colors.white, // color: Colors.white,
), // ),
), // ),
)) // ))
: const SizedBox(), // : const SizedBox(),
], ],
), ),
const SizedBox( const SizedBox(
@@ -108,13 +112,13 @@ class _ProfileScreenState extends State<ProfileScreen> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
"Smith Mate", APPSTRING.userName ?? "",
style: context.customExtraBold( style: context.customExtraBold(
top < 100 ? Colors.black : Colors.white, top < 100 ? Colors.black : Colors.white,
14), 14),
), ),
Text( Text(
'smithmate@example.com', APPSTRING.emailName,
style: context.customRegular( style: context.customRegular(
top < 100 ? Colors.black : Colors.white, top < 100 ? Colors.black : Colors.white,
10), 10),
@@ -196,30 +200,31 @@ class _ProfileScreenState extends State<ProfileScreen> {
title: const Text('Notifications'), title: const Text('Notifications'),
trailing: Icon(MdiIcons.chevronRight), trailing: Icon(MdiIcons.chevronRight),
), ),
ListTile( // ListTile(
onTap: () { // onTap: () {
Navigator.of(context).push(MaterialPageRoute( // Navigator.of(context).push(MaterialPageRoute(
builder: (context) { // builder: (context) {
return const RatingReviewScreen(); // return const RatingReviewScreen();
}, // },
)); // ));
}, // },
leading: Icon(MdiIcons.starOutline), // leading: Icon(MdiIcons.starOutline),
title: const Text('Rating & Review'), // title: const Text('Rating & Review'),
trailing: Icon(MdiIcons.chevronRight), // trailing: Icon(MdiIcons.chevronRight),
), // ),
ListTile( // ListTile(
onTap: () { // onTap: () {
Navigator.of(context).push(MaterialPageRoute( // Navigator.of(context).push(MaterialPageRoute(
builder: (context) { // builder: (context) {
return const MessageScreen(); // return const MessageScreen();
}, // },
)); // ));
}, // },
leading: Icon(MdiIcons.messageOutline), // leading: Icon(MdiIcons.messageOutline),
title: const Text('Driver Message'), // title: const Text('Driver Message'),
trailing: Icon(MdiIcons.chevronRight), // trailing: Icon(MdiIcons.chevronRight),
), // ),
ListTile( ListTile(
onTap: () { onTap: () {
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
@@ -248,24 +253,12 @@ class _ProfileScreenState extends State<ProfileScreen> {
title: const Text('Term & Conditions'), title: const Text('Term & Conditions'),
trailing: Icon(MdiIcons.chevronRight), trailing: Icon(MdiIcons.chevronRight),
), ),
ListTile( // ListTile(
onTap: () {}, // onTap: () {},
leading: Icon(MdiIcons.basketOutline), // leading: Icon(MdiIcons.basketOutline),
title: const Text('Grocery List'), // title: const Text('Grocery List'),
trailing: Icon(MdiIcons.chevronRight), // trailing: Icon(MdiIcons.chevronRight),
), // ),
ListTile(
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) {
return MapScreen();
},
));
},
leading: Icon(MdiIcons.basketOutline),
title: const Text('Map List'),
trailing: Icon(MdiIcons.chevronRight),
),
], ],
), ),
), ),

View File

@@ -1,10 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:grocery_app/src/core/routes/routes.dart'; import 'package:grocery_app/src/core/routes/routes.dart';
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
import 'package:grocery_app/src/ui/onboarding/on_boarding_screen.dart'; import 'package:grocery_app/src/ui/onboarding/on_boarding_screen.dart';
import 'package:grocery_app/utils/constants/assets_constant.dart'; import 'package:grocery_app/utils/constants/assets_constant.dart';
import 'package:grocery_app/utils/constants/shared_pref_utils.dart'; import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
import 'package:grocery_app/utils/extensions/extensions.dart'; import 'package:grocery_app/utils/extensions/extensions.dart';
import 'package:grocery_app/utils/extensions/uicontext.dart'; import 'package:grocery_app/utils/extensions/uicontext.dart';
import 'package:provider/provider.dart';
class SplashScreen extends StatefulWidget { class SplashScreen extends StatefulWidget {
const SplashScreen({super.key}); const SplashScreen({super.key});
@@ -14,6 +16,7 @@ class SplashScreen extends StatefulWidget {
} }
class _SplashScreenState extends State<SplashScreen> { class _SplashScreenState extends State<SplashScreen> {
couting() async { couting() async {
Future.delayed(const Duration(seconds: 3)).then((c) { Future.delayed(const Duration(seconds: 3)).then((c) {
Navigator.of(context).pushReplacement(MaterialPageRoute( Navigator.of(context).pushReplacement(MaterialPageRoute(
@@ -27,6 +30,9 @@ class _SplashScreenState extends State<SplashScreen> {
@override @override
void initState() { void initState() {
Future.delayed(const Duration(seconds: 2), () async { Future.delayed(const Duration(seconds: 2), () async {
Provider.of<BottomNavProvider>(context, listen: false)
.refreshToken(context);
if (await SharedPrefUtils.isFreshInstall()) { if (await SharedPrefUtils.isFreshInstall()) {
context.clearAndPush(routePath: MyRoutes.ONBOARDING); context.clearAndPush(routePath: MyRoutes.ONBOARDING);
} else { } else {

View File

@@ -1,5 +1,6 @@
// ignore_for_file: constant_identifier_names // ignore_for_file: constant_identifier_names
import 'package:grocery_app/src/data/user_profile.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
// Shared preference for the app to store data locally // Shared preference for the app to store data locally
@@ -35,7 +36,43 @@ class SharedPrefUtils {
static const String STORE_ID = "STORE_ID"; static const String STORE_ID = "STORE_ID";
static const String REFRESH_TOKEN = "REFRESH_TOKEN"; static const String REFRESH_TOKEN = "REFRESH_TOKEN";
/// Set bearer authorization token static const String KEY_NAME = "user_name";
static const String KEY_LAST_NAME = "user_name";
static const String KEY_EMAIL = "user_email";
static const String KEY_PROFILE = "user_profile";
static Future<void> saveUser({
required UserProfile user,
}) async {
print("jdhsfhjdjfhg ${user.img}");
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString(KEY_NAME, user.firstName ?? "");
await prefs.setString(KEY_LAST_NAME, user.lastName ?? "");
await prefs.setString(KEY_EMAIL, user.email ?? " ");
await prefs.setString(KEY_PROFILE, user.img ?? " ");
}
static Future<String?> getUserName() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString(KEY_NAME);
}
static Future<String?> getLastName() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString(KEY_LAST_NAME);
}
/// Get user email
static Future<String?> getUserEmail() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString(KEY_EMAIL);
}
/// Get user profile URL
static Future<String?> getUserProfile() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString(KEY_PROFILE);
}
static Future<bool> setToken({required String authToken}) { static Future<bool> setToken({required String authToken}) {
_token = authToken; _token = authToken;
return SharedPreferences.getInstance() return SharedPreferences.getInstance()
@@ -232,10 +269,7 @@ class SharedPrefUtils {
return firstName!; return firstName!;
} }
static Future<String> getLastName() async {
final sp = await SharedPreferences.getInstance();
return sp.getString(LAST_NAME) ?? "";
}
static Future<String> getEmail() async { static Future<String> getEmail() async {
final sp = await SharedPreferences.getInstance(); final sp = await SharedPreferences.getInstance();
@@ -247,11 +281,6 @@ class SharedPrefUtils {
return sp.getString(PASSWORD) ?? ""; return sp.getString(PASSWORD) ?? "";
} }
static Future<String> getUsername() async {
final sp = await SharedPreferences.getInstance();
return sp.getString(USER_NAME) ?? "";
}
static Future<bool> getRandomInstruction() async { static Future<bool> getRandomInstruction() async {
final sp = await SharedPreferences.getInstance(); final sp = await SharedPreferences.getInstance();
return sp.getBool(INS_RANDOM) ?? true; return sp.getBool(INS_RANDOM) ?? true;

View File

@@ -2,10 +2,12 @@ class APPSTRING {
//title //title
static const String enterYourMobileNumber = "Enter Your Mobile Number"; static const String enterYourMobileNumber = "Enter Your Mobile Number";
static const String whatYourPhoneNumber = "What's your phone number?"; static const String whatYourPhoneNumber = "What's your phone number?";
static const String codeSentText = "A code will be send to verify your phone number"; static const String codeSentText =
"A code will be send to verify your phone number";
static const String enterVerificationCode = "Enter Verification Code"; static const String enterVerificationCode = "Enter Verification Code";
static const String enterCode = "Enter the 6-digit code sent to you at ********8902"; static const String enterCode =
"Enter the 6-digit code sent to you at ********8902";
static const String pleaseEnterYourFullName = "Please Enter Your Full Name"; static const String pleaseEnterYourFullName = "Please Enter Your Full Name";
//hint //hint
@@ -13,11 +15,16 @@ class APPSTRING {
static const String firstNameHint = "First Name"; static const String firstNameHint = "First Name";
static const String lastNameHint = "last Name"; static const String lastNameHint = "last Name";
static const String emailHint = "Email-ID"; static const String emailHint = "Email-ID";
static const String addressHint = "Address"; static const String addressHint = "Address";
//button //button
static const String verifyButton = "Verify"; static const String verifyButton = "Verify";
static const String continueBtn = "Continue"; static const String continueBtn = "Continue";
static const String appName = "Customer App"; static const String appName = "Customer App";
static String userName = "user_name";
static String userLastName = "user_name";
static String emailName = "user_email";
static String userProfile = "user_profile";
} }

View File

@@ -6,6 +6,14 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <file_selector_linux/file_selector_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) { 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) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
} }

View File

@@ -3,6 +3,8 @@
# #
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
file_selector_linux
url_launcher_linux
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST

View File

@@ -6,17 +6,21 @@ import FlutterMacOS
import Foundation import Foundation
import connectivity_plus import connectivity_plus
import file_selector_macos
import geolocator_apple import geolocator_apple
import package_info_plus import package_info_plus
import path_provider_foundation import path_provider_foundation
import shared_preferences_foundation import shared_preferences_foundation
import sqflite import sqflite
import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
} }

View File

@@ -121,6 +121,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "2.0.1"
cross_file:
dependency: transitive
description:
name: cross_file
sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
url: "https://pub.dev"
source: hosted
version: "0.3.4+2"
crypto: crypto:
dependency: transitive dependency: transitive
description: description:
@@ -209,6 +217,38 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.0.1" version: "7.0.1"
file_selector_linux:
dependency: transitive
description:
name: file_selector_linux
sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33"
url: "https://pub.dev"
source: hosted
version: "0.9.3+2"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc"
url: "https://pub.dev"
source: hosted
version: "0.9.4+2"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
url: "https://pub.dev"
source: hosted
version: "2.6.2"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4"
url: "https://pub.dev"
source: hosted
version: "0.9.3+3"
fixnum: fixnum:
dependency: transitive dependency: transitive
description: description:
@@ -528,6 +568,70 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.2" version: "4.0.2"
image_picker:
dependency: "direct main"
description:
name: image_picker
sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a"
url: "https://pub.dev"
source: hosted
version: "1.1.2"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: b62d34a506e12bb965e824b6db4fbf709ee4589cf5d3e99b45ab2287b008ee0c
url: "https://pub.dev"
source: hosted
version: "0.8.12+20"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83"
url: "https://pub.dev"
source: hosted
version: "3.0.6"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
sha256: "05da758e67bc7839e886b3959848aa6b44ff123ab4b28f67891008afe8ef9100"
url: "https://pub.dev"
source: hosted
version: "0.8.12+2"
image_picker_linux:
dependency: transitive
description:
name: image_picker_linux
sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa"
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
image_picker_macos:
dependency: transitive
description:
name: image_picker_macos
sha256: "1b90ebbd9dcf98fb6c1d01427e49a55bd96b5d67b8c67cf955d60a5de74207c1"
url: "https://pub.dev"
source: hosted
version: "0.2.1+2"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
sha256: "886d57f0be73c4b140004e78b9f28a8914a09e50c2d816bdd0520051a71236a0"
url: "https://pub.dev"
source: hosted
version: "2.10.1"
image_picker_windows:
dependency: transitive
description:
name: image_picker_windows
sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb"
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
intl: intl:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -548,18 +652,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.4" version: "10.0.5"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "3.0.5"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
@@ -604,10 +708,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.0" version: "0.11.1"
material_design_icons_flutter: material_design_icons_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -620,10 +724,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.12.0" version: "1.15.0"
mime:
dependency: transitive
description:
name: mime
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
nested: nested:
dependency: transitive dependency: transitive
description: description:
@@ -864,6 +976,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.1" version: "2.4.1"
shimmer:
dependency: "direct main"
description:
name: shimmer
sha256: "5f88c883a22e9f9f299e5ba0e4f7e6054857224976a5d9f839d4ebdc94a14ac9"
url: "https://pub.dev"
source: hosted
version: "3.0.0"
skeletonizer:
dependency: "direct main"
description:
name: skeletonizer
sha256: "0dcacc51c144af4edaf37672072156f49e47036becbc394d7c51850c5c1e884b"
url: "https://pub.dev"
source: hosted
version: "1.4.3"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@@ -953,10 +1081,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.0" version: "0.7.2"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
@@ -965,6 +1093,70 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.2" version: "1.3.2"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
url: "https://pub.dev"
source: hosted
version: "6.3.1"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
url: "https://pub.dev"
source: hosted
version: "6.3.14"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626"
url: "https://pub.dev"
source: hosted
version: "6.3.2"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
url: "https://pub.dev"
source: hosted
version: "3.2.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
url: "https://pub.dev"
source: hosted
version: "3.2.2"
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: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
url: "https://pub.dev"
source: hosted
version: "2.3.3"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
url: "https://pub.dev"
source: hosted
version: "3.1.4"
uuid: uuid:
dependency: transitive dependency: transitive
description: description:
@@ -1009,10 +1201,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.2.1" version: "14.2.5"
web: web:
dependency: transitive dependency: transitive
description: description:
@@ -1046,5 +1238,5 @@ packages:
source: hosted source: hosted
version: "6.5.0" version: "6.5.0"
sdks: sdks:
dart: ">=3.4.4 <4.0.0" dart: ">=3.5.0 <4.0.0"
flutter: ">=3.22.0" flutter: ">=3.24.0"

View File

@@ -31,6 +31,8 @@ dependencies:
google_api_headers: google_api_headers:
fluttertoast: fluttertoast:
flutter_rating_stars: ^1.1.0 flutter_rating_stars: ^1.1.0
url_launcher: ^6.3.1
skeletonizer: ^1.4.3
@@ -61,7 +63,8 @@ dependencies:
animations: ^2.0.1 animations: ^2.0.1
animation_list: ^3.1.0 animation_list: ^3.1.0
image_picker: any
shimmer: ^3.0.0
dev_dependencies: dev_dependencies:

View File

@@ -7,11 +7,17 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <connectivity_plus/connectivity_plus_windows_plugin.h> #include <connectivity_plus/connectivity_plus_windows_plugin.h>
#include <file_selector_windows/file_selector_windows.h>
#include <geolocator_windows/geolocator_windows.h> #include <geolocator_windows/geolocator_windows.h>
#include <url_launcher_windows/url_launcher_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) { void RegisterPlugins(flutter::PluginRegistry* registry) {
ConnectivityPlusWindowsPluginRegisterWithRegistrar( ConnectivityPlusWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
FileSelectorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FileSelectorWindows"));
GeolocatorWindowsRegisterWithRegistrar( GeolocatorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("GeolocatorWindows")); registry->GetRegistrarForPlugin("GeolocatorWindows"));
UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
} }

View File

@@ -4,7 +4,9 @@
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
connectivity_plus connectivity_plus
file_selector_windows
geolocator_windows geolocator_windows
url_launcher_windows
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST