updateProfile
This commit is contained in:
@@ -10,8 +10,10 @@ import 'package:connectivity_plus/src/connectivity_plus_web.dart';
|
||||
import 'package:fluttertoast/fluttertoast_web.dart';
|
||||
import 'package:geolocator_web/geolocator_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: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';
|
||||
|
||||
void registerPlugins([final Registrar? pluginRegistrar]) {
|
||||
@@ -20,7 +22,9 @@ void registerPlugins([final Registrar? pluginRegistrar]) {
|
||||
FluttertoastWebPlugin.registerWith(registrar);
|
||||
GeolocatorPlugin.registerWith(registrar);
|
||||
GoogleMapsPlugin.registerWith(registrar);
|
||||
ImagePickerPlugin.registerWith(registrar);
|
||||
PackageInfoPlusWebPlugin.registerWith(registrar);
|
||||
SharedPreferencesPlugin.registerWith(registrar);
|
||||
UrlLauncherPlugin.registerWith(registrar);
|
||||
registrar.registerMessageHandler();
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,533 +1,629 @@
|
||||
animation_list
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/animation_list-3.1.0/lib/
|
||||
animations
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/animations-2.0.11/lib/
|
||||
args
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/args-2.6.0/lib/
|
||||
async
|
||||
2.18
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/async-2.11.0/lib/
|
||||
back_button_interceptor
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/back_button_interceptor-8.0.3/lib/
|
||||
boolean_selector
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/lib/
|
||||
cached_network_image
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/lib/
|
||||
cached_network_image_platform_interface
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/lib/
|
||||
cached_network_image_web
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_web-1.2.0/lib/
|
||||
carousel_slider
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/carousel_slider-5.0.0/lib/
|
||||
characters
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/characters-1.3.0/lib/
|
||||
clock
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/clock-1.1.1/lib/
|
||||
collection
|
||||
2.18
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/
|
||||
connectivity_plus
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/lib/
|
||||
connectivity_plus_platform_interface
|
||||
2.18
|
||||
file:///Users/rajeevsingh/.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/
|
||||
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
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/crypto-3.0.6/lib/
|
||||
csslib
|
||||
3.1
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/csslib-1.0.2/lib/
|
||||
cupertino_icons
|
||||
3.1
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/lib/
|
||||
dbus
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/dbus-0.7.11/lib/
|
||||
dio
|
||||
2.18
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/dio-5.7.0/lib/
|
||||
dio_web_adapter
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0/lib/
|
||||
dots_indicator
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/dots_indicator-3.0.0/lib/
|
||||
dotted_border
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/dotted_border-2.1.0/lib/
|
||||
fake_async
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/fake_async-1.3.1/lib/
|
||||
ffi
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/ffi-2.1.3/lib/
|
||||
file
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
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
|
||||
3.1
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/fixnum-1.1.1/lib/
|
||||
flutter_animate
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_animate-4.5.2/lib/
|
||||
flutter_cache_manager
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/lib/
|
||||
flutter_google_places
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_google_places-0.3.0/lib/
|
||||
flutter_lints
|
||||
3.1
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_lints-3.0.2/lib/
|
||||
flutter_plugin_android_lifecycle
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/lib/
|
||||
flutter_rating_stars
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_rating_stars-1.1.0/lib/
|
||||
flutter_screenutil
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3/lib/
|
||||
flutter_shaders
|
||||
2.19
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_shaders-0.1.3/lib/
|
||||
flutter_svg
|
||||
2.19
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_svg-2.0.9/lib/
|
||||
flutter_toggle_tab
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_toggle_tab-1.5.1/lib/
|
||||
fluttertoast
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/lib/
|
||||
fpdart
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/fpdart-1.1.1/lib/
|
||||
gap
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/gap-3.0.1/lib/
|
||||
geocoding
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding-3.0.0/lib/
|
||||
geocoding_android
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/lib/
|
||||
geocoding_ios
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/lib/
|
||||
geocoding_platform_interface
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_platform_interface-3.2.0/lib/
|
||||
geolocator
|
||||
2.15
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator-13.0.2/lib/
|
||||
geolocator_android
|
||||
2.15
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/lib/
|
||||
geolocator_apple
|
||||
2.15
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/lib/
|
||||
geolocator_platform_interface
|
||||
2.15
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_platform_interface-4.2.4/lib/
|
||||
geolocator_web
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/lib/
|
||||
geolocator_windows
|
||||
2.15
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/lib/
|
||||
get_it
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/get_it-8.0.3/lib/
|
||||
go_router
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/go_router-14.7.1/lib/
|
||||
google_api_headers
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/lib/
|
||||
google_fonts
|
||||
2.14
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/google_fonts-4.0.4/lib/
|
||||
google_maps
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps-8.1.1/lib/
|
||||
google_maps_flutter
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/lib/
|
||||
google_maps_flutter_android
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/lib/
|
||||
google_maps_flutter_ios
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/lib/
|
||||
google_maps_flutter_platform_interface
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_platform_interface-2.9.5/lib/
|
||||
google_maps_flutter_web
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/lib/
|
||||
google_maps_webservice
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_webservice-0.0.20-nullsafety.5/lib/
|
||||
html
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/html-0.15.5/lib/
|
||||
http
|
||||
2.19
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/http-0.13.6/lib/
|
||||
http_parser
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
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
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/intl-0.19.0/lib/
|
||||
json_annotation
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/lib/
|
||||
leak_tracker
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker-10.0.4/
|
||||
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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/
|
||||
leak_tracker_flutter_testing
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.3/
|
||||
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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/
|
||||
leak_tracker_testing
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib/
|
||||
lints
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/lints-3.0.0/lib/
|
||||
loader_overlay
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/loader_overlay-4.0.4+1/lib/
|
||||
logging
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/logging-1.3.0/lib/
|
||||
matcher
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/lib/
|
||||
material_color_utilities
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/material_color_utilities-0.8.0/
|
||||
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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1/lib/
|
||||
material_design_icons_flutter
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/material_design_icons_flutter-7.0.7296/lib/
|
||||
meta
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/meta-1.12.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/
|
||||
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
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/nested-1.0.0/lib/
|
||||
nm
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/nm-0.5.0/lib/
|
||||
octo_image
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/octo_image-2.1.0/lib/
|
||||
otp_text_field
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/otp_text_field-1.1.3/lib/
|
||||
package_info_plus
|
||||
2.18
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/lib/
|
||||
package_info_plus_platform_interface
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-2.0.1/lib/
|
||||
path
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/path-1.9.0/lib/
|
||||
path_drawing
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/path_drawing-1.0.1/lib/
|
||||
path_parsing
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/path_parsing-1.1.0/lib/
|
||||
path_provider
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider-2.1.5/lib/
|
||||
path_provider_android
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/lib/
|
||||
path_provider_foundation
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/lib/
|
||||
path_provider_linux
|
||||
2.19
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/lib/
|
||||
path_provider_platform_interface
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/lib/
|
||||
path_provider_windows
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/lib/
|
||||
petitparser
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/petitparser-6.0.2/lib/
|
||||
platform
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/platform-3.1.6/lib/
|
||||
plugin_platform_interface
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8/lib/
|
||||
pretty_dio_logger
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/pretty_dio_logger-1.4.0/lib/
|
||||
provider
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/provider-6.1.2/lib/
|
||||
readmore
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/readmore-3.0.0/lib/
|
||||
rxdart
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/rxdart-0.26.0/lib/
|
||||
sanitize_html
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/sanitize_html-2.1.0/lib/
|
||||
shared_preferences
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/lib/
|
||||
shared_preferences_android
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/lib/
|
||||
shared_preferences_foundation
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/lib/
|
||||
shared_preferences_linux
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/lib/
|
||||
shared_preferences_platform_interface
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/lib/
|
||||
shared_preferences_web
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/lib/
|
||||
shared_preferences_windows
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
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
|
||||
2.18
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/source_span-1.10.0/lib/
|
||||
sprintf
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/sprintf-7.0.0/lib/
|
||||
sqflite
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/lib/
|
||||
sqflite_common
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite_common-2.5.4/lib/
|
||||
stack_trace
|
||||
2.18
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/
|
||||
stream_channel
|
||||
2.19
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/lib/
|
||||
stream_transform
|
||||
3.1
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/stream_transform-2.1.1/lib/
|
||||
string_scanner
|
||||
2.18
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/
|
||||
synchronized
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/lib/
|
||||
term_glyph
|
||||
2.12
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/
|
||||
test_api
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/test_api-0.7.0/
|
||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/test_api-0.7.0/lib/
|
||||
3.2
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/test_api-0.7.2/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/
|
||||
typed_data
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
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
|
||||
3.0
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/uuid-4.5.1/lib/
|
||||
vector_graphics
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics-1.1.10+1/lib/
|
||||
vector_graphics_codec
|
||||
2.17
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.10+1/lib/
|
||||
vector_graphics_compiler
|
||||
2.19
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.10+1/lib/
|
||||
vector_math
|
||||
2.14
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_math-2.1.4/lib/
|
||||
vm_service
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vm_service-14.2.1/
|
||||
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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/vm_service-14.2.5/lib/
|
||||
web
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/web-1.1.0/lib/
|
||||
win32
|
||||
3.4
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/win32-5.5.4/lib/
|
||||
xdg_directories
|
||||
3.3
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/lib/
|
||||
xml
|
||||
3.2
|
||||
file:///Users/rajeevsingh/.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/
|
||||
file:///Users/apple/.pub-cache/hosted/pub.dev/xml-6.5.0/lib/
|
||||
grocery_app
|
||||
3.4
|
||||
file:///Users/rajeevsingh/Documents/FlutterProject/freelanceing/groceryApp/
|
||||
file:///Users/rajeevsingh/Documents/FlutterProject/freelanceing/groceryApp/lib/
|
||||
file:///Users/apple/Documents/Allflutter%20/freelancing/groceryApp/
|
||||
file:///Users/apple/Documents/Allflutter%20/freelancing/groceryApp/lib/
|
||||
sky_engine
|
||||
3.2
|
||||
file:///Users/rajeevsingh/Documents/allSoftwares/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/
|
||||
file:///Users/apple/Documents/development/flutter/bin/cache/pkg/sky_engine/lib/
|
||||
flutter
|
||||
3.3
|
||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter/
|
||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter/lib/
|
||||
file:///Users/apple/Documents/development/flutter/packages/flutter/
|
||||
file:///Users/apple/Documents/development/flutter/packages/flutter/lib/
|
||||
flutter_test
|
||||
3.3
|
||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_test/
|
||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_test/lib/
|
||||
file:///Users/apple/Documents/development/flutter/packages/flutter_test/
|
||||
file:///Users/apple/Documents/development/flutter/packages/flutter_test/lib/
|
||||
flutter_web_plugins
|
||||
3.2
|
||||
file:///Users/rajeevsingh/Documents/allSoftwares/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/
|
||||
file:///Users/apple/Documents/development/flutter/packages/flutter_web_plugins/lib/
|
||||
2
|
||||
|
||||
@@ -1 +1 @@
|
||||
3.22.3
|
||||
3.24.3
|
||||
@@ -1,30 +1,47 @@
|
||||
# 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/
|
||||
flutter_plugin_android_lifecycle=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/
|
||||
fluttertoast=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/
|
||||
geocoding=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding-3.0.0/
|
||||
geocoding_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/
|
||||
geocoding_ios=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/
|
||||
geolocator=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator-13.0.2/
|
||||
geolocator_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/
|
||||
geolocator_apple=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/
|
||||
geolocator_web=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/
|
||||
geolocator_windows=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/
|
||||
google_api_headers=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/
|
||||
google_maps_flutter=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/
|
||||
google_maps_flutter_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/
|
||||
google_maps_flutter_ios=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/
|
||||
google_maps_flutter_web=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/
|
||||
package_info_plus=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/
|
||||
path_provider=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
||||
path_provider_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/
|
||||
path_provider_foundation=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
|
||||
path_provider_linux=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
|
||||
path_provider_windows=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/
|
||||
shared_preferences=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/
|
||||
shared_preferences_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/
|
||||
shared_preferences_foundation=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/
|
||||
shared_preferences_linux=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/
|
||||
shared_preferences_web=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/
|
||||
shared_preferences_windows=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/
|
||||
sqflite=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/
|
||||
connectivity_plus=/Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/
|
||||
file_selector_linux=/Users/apple/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/
|
||||
file_selector_macos=/Users/apple/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+2/
|
||||
file_selector_windows=/Users/apple/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+3/
|
||||
flutter_plugin_android_lifecycle=/Users/apple/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/
|
||||
fluttertoast=/Users/apple/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/
|
||||
geocoding=/Users/apple/.pub-cache/hosted/pub.dev/geocoding-3.0.0/
|
||||
geocoding_android=/Users/apple/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/
|
||||
geocoding_ios=/Users/apple/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/
|
||||
geolocator=/Users/apple/.pub-cache/hosted/pub.dev/geolocator-13.0.2/
|
||||
geolocator_android=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/
|
||||
geolocator_apple=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/
|
||||
geolocator_web=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/
|
||||
geolocator_windows=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/
|
||||
google_api_headers=/Users/apple/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/
|
||||
google_maps_flutter=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/
|
||||
google_maps_flutter_android=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/
|
||||
google_maps_flutter_ios=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/
|
||||
google_maps_flutter_web=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/
|
||||
image_picker=/Users/apple/.pub-cache/hosted/pub.dev/image_picker-1.1.2/
|
||||
image_picker_android=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+20/
|
||||
image_picker_for_web=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/
|
||||
image_picker_ios=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/
|
||||
image_picker_linux=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/
|
||||
image_picker_macos=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/
|
||||
image_picker_windows=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/
|
||||
package_info_plus=/Users/apple/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/
|
||||
path_provider=/Users/apple/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
||||
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
@@ -7,9 +7,20 @@
|
||||
<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_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
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:enableOnBackInvokedCallback="true"
|
||||
android:label="grocery_app"
|
||||
android:name="${applicationName}"
|
||||
@@ -40,6 +51,8 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
|
||||
<meta-data android:name="com.google.android.geo.API_KEY"
|
||||
android:value="AIzaSyAi3_Dls63iGs7Nccgdm-4FkS0rhT03-4U"/>
|
||||
<!-- Don't delete the meta-data below.
|
||||
@@ -59,4 +72,22 @@
|
||||
<data android:mimeType="text/plain"/>
|
||||
</intent>
|
||||
</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>
|
||||
|
||||
@@ -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/routes/routes.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/bottom_navbar_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/utils/constants/color_constant.dart';
|
||||
import 'package:grocery_app/utils/constants/string_constant.dart';
|
||||
@@ -30,21 +32,23 @@ class MyApplication extends StatelessWidget {
|
||||
splitScreenMode: true,
|
||||
builder: (context, child) => GlobalLoaderOverlay(
|
||||
overlayColor: APPCOLOR.whiteFBFEFB.withOpacity(0.5),
|
||||
|
||||
useDefaultLoading: false,
|
||||
// overlayWidgetBuilder: (progress) => const GlobalLoader(),
|
||||
child: MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(create: (_) => AuthProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ProductProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ProductProvider()),
|
||||
ChangeNotifierProvider(create: (_) => AddtocartProvider()),
|
||||
ChangeNotifierProvider(create: (_) => BottomNavProvider()),
|
||||
// ChangeNotifierProvider(create: (_) => HomeProvider()),
|
||||
ChangeNotifierProvider(create: (_) => BottomNavProvider()),
|
||||
ChangeNotifierProvider(create: (_) => AddressProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ProfileProvider()),
|
||||
],
|
||||
child: MaterialApp.router(
|
||||
routerConfig: MyRoutes.router,
|
||||
debugShowCheckedModeBanner: false,
|
||||
theme: ThemeData(
|
||||
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
|
||||
colorScheme: ColorScheme.fromSeed(seedColor: Colors.lightGreen),
|
||||
scaffoldBackgroundColor: Colors.white,
|
||||
canvasColor: const Color.fromRGBO(255, 255, 255, 1),
|
||||
fontFamily: 'GoogleSans',
|
||||
|
||||
@@ -9,7 +9,8 @@ class NameTextField extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
return
|
||||
Container(
|
||||
height: 60,
|
||||
width: MediaQuery.sizeOf(context).width,
|
||||
decoration: BoxDecoration(border: Border.all(color: APPCOLOR.lightGreen), borderRadius: BorderRadius.circular(15)),
|
||||
@@ -40,5 +41,7 @@ class NameTextField extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,8 +60,10 @@ class AppNetworkImage extends StatelessWidget {
|
||||
)),
|
||||
);
|
||||
},
|
||||
placeholder: (context, url) {
|
||||
return Container(
|
||||
placeholder: (context, url)
|
||||
{
|
||||
return
|
||||
Container(
|
||||
width: width,
|
||||
height: height,
|
||||
decoration: BoxDecoration(
|
||||
@@ -76,6 +78,7 @@ class AppNetworkImage extends StatelessWidget {
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
imageBuilder: (context, cIMage) {
|
||||
return Container(
|
||||
width: width,
|
||||
|
||||
@@ -1,33 +1,36 @@
|
||||
class APIURL {
|
||||
static const BASE_URL = "http://210.89.44.183:3333/xam/";
|
||||
static const String sendOtp = "${BASE_URL}auth/send-otp/customer";
|
||||
|
||||
static const String verifyOtp = "${BASE_URL}auth/verify-otp/customer";
|
||||
|
||||
static const String loginOtp = "${BASE_URL}auth/login/customer";
|
||||
|
||||
static const String loginOtp = "${BASE_URL}auth/login/customer";
|
||||
static const String login = "${BASE_URL}auth/login/vendor";
|
||||
static const String customerRegister = "${BASE_URL}auth/register/customer";
|
||||
static const String getAllProduct = "${BASE_URL}products";
|
||||
static const String getProductDetails = "${BASE_URL}products/";
|
||||
static const String getProductDetails = "${BASE_URL}products/";
|
||||
static const String getBanners = "${BASE_URL}banners";
|
||||
static const String customerLogOut = "${BASE_URL}auth/logout/customer";
|
||||
static const String getBestDealProduct = "${BASE_URL}products/best-deals";
|
||||
static const String getAllcategory = "${BASE_URL}categories";
|
||||
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 gettAllWishList = "${BASE_URL}carts/wishlist";
|
||||
static const String similarProduct = "${BASE_URL}products/";
|
||||
static const String getItemCards = "${BASE_URL}carts/current";
|
||||
static const String checkPin = "${BASE_URL}pin-codes/check/";
|
||||
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 verifyForgetPassword =
|
||||
"${BASE_URL}auth/forgot-password-verify-otp/vendor";
|
||||
@@ -36,10 +39,10 @@ class APIURL {
|
||||
static const String getProduct = "${BASE_URL}products";
|
||||
static const String getCategoryByLevel = "${BASE_URL}categories/by-level/1";
|
||||
static const String getMe = "${BASE_URL}auth/me";
|
||||
static const String refresh_token = "${BASE_URL}auth/refresh-token";
|
||||
|
||||
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 updateProduct = "${BASE_URL}products/";
|
||||
}
|
||||
|
||||
@@ -4,10 +4,12 @@ import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.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/coupons/coupons_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/login/login_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/otp/login_otp.dart';
|
||||
import 'package:grocery_app/src/ui/otp/otp_screen.dart';
|
||||
@@ -72,14 +74,16 @@ class MyRoutes {
|
||||
pageBuilder: (context, state) => const FruitVeggieDetail(),
|
||||
),
|
||||
|
||||
// animatedGoRoute(
|
||||
// path: PRODUCTDETAILS,
|
||||
// name: PRODUCTDETAILS,
|
||||
// pageBuilder: (context, state)
|
||||
// {
|
||||
// return const ProductDetails();
|
||||
// }
|
||||
// ),
|
||||
animatedGoRoute(
|
||||
path: COUPONSSCREEN,
|
||||
name: COUPONSSCREEN,
|
||||
pageBuilder: (context, state) => CouponsScreen(),
|
||||
),
|
||||
animatedGoRoute(
|
||||
path: ADDRESSS,
|
||||
name: ADDRESSS,
|
||||
pageBuilder: (context, state) => AddLocationAddress(),
|
||||
),
|
||||
|
||||
animatedGoRoute(
|
||||
path: PRODUCTDETAILS,
|
||||
@@ -219,44 +223,39 @@ class MyRoutes {
|
||||
static const FRUITVEGGIEDETAIL = "/FruitVeggieDetail";
|
||||
static const PRODUCTDETAILS = "/productdetails";
|
||||
static const LOGINOTPSCREEN = "/loginotpscreen";
|
||||
|
||||
|
||||
|
||||
static const SELECTACCOUNT = "/selectAccount";
|
||||
static const DASHBOARD = "/dashboard";
|
||||
|
||||
|
||||
static const COUPONSSCREEN = "/CouponsScreen";
|
||||
static const ADDRESSS = "/address";
|
||||
static const LOGIN = "/login";
|
||||
static const SIGNUP = "/signup";
|
||||
|
||||
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 CUSTOMERORDER = "/customerorder";
|
||||
// static const TERMANDCONDITIONS = "/termsandcondition";
|
||||
// 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 VERIFYPASSWORD = "/verifypassword";
|
||||
// static const SETTING = "/settings";
|
||||
|
||||
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";
|
||||
}
|
||||
|
||||
|
||||
182
lib/src/data/address.dart
Normal file
182
lib/src/data/address.dart
Normal 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,
|
||||
};
|
||||
}
|
||||
53
lib/src/data/upload_image.dart
Normal file
53
lib/src/data/upload_image.dart
Normal 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,
|
||||
};
|
||||
}
|
||||
110
lib/src/data/user_profile.dart
Normal file
110
lib/src/data/user_profile.dart
Normal 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,
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
//
|
||||
// final wishListModel = wishListModelFromJson(jsondynamic);
|
||||
@@ -14,7 +267,7 @@ class WishListModel {
|
||||
DateTime? createdAt;
|
||||
DateTime? updatedAt;
|
||||
List<WishListItem>? items;
|
||||
dynamic? totalItems;
|
||||
dynamic totalItems;
|
||||
|
||||
WishListModel({
|
||||
this.id,
|
||||
@@ -28,8 +281,8 @@ class WishListModel {
|
||||
factory WishListModel.fromJson(Map<dynamic, dynamic> json) => WishListModel(
|
||||
id: json["id"],
|
||||
userId: json["userId"],
|
||||
createdAt: DateTime.parse(json["createdAt"]),
|
||||
updatedAt: DateTime.parse(json["updatedAt"]),
|
||||
createdAt: DateTime?.parse(json["createdAt"]),
|
||||
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||
items: List<WishListItem>.from(json["items"].map((x) => WishListItem.fromJson(x))),
|
||||
totalItems: json["totalItems"],
|
||||
);
|
||||
@@ -70,8 +323,8 @@ class WishListItem {
|
||||
wishlistId: json["wishlistId"],
|
||||
productId: json["productId"],
|
||||
storeId: json["storeId"],
|
||||
createdAt: DateTime.parse(json["createdAt"]),
|
||||
updatedAt: DateTime.parse(json["updatedAt"]),
|
||||
createdAt: DateTime?.parse(json["createdAt"]),
|
||||
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||
product: ProductDatum.fromJson(json["product"]),
|
||||
store: Store.fromJson(json["store"]),
|
||||
);
|
||||
@@ -96,20 +349,24 @@ class ProductDatum {
|
||||
dynamic brand;
|
||||
dynamic basePrice;
|
||||
dynamic discountPrice;
|
||||
dynamic stock;
|
||||
dynamic quantity;
|
||||
dynamic? stock;
|
||||
dynamic? quantity;
|
||||
dynamic unit;
|
||||
dynamic slug;
|
||||
dynamic rating;
|
||||
dynamic averageRating;
|
||||
bool? isInStock;
|
||||
bool? isActive;
|
||||
bool? isInWishlist;
|
||||
DateTime? createdAt;
|
||||
DateTime? updatedAt;
|
||||
dynamic storeId;
|
||||
dynamic categoryId;
|
||||
dynamic productTypeId;
|
||||
dynamic timeSlotId;
|
||||
List<ProductImage>? productImages;
|
||||
Category? category;
|
||||
List<ProductTag>? productTags;
|
||||
List<dynamic>? zones;
|
||||
List<ProductReview>? productReview;
|
||||
|
||||
ProductDatum({
|
||||
this.id,
|
||||
@@ -123,16 +380,20 @@ class ProductDatum {
|
||||
this.quantity,
|
||||
this.unit,
|
||||
this.slug,
|
||||
this.rating,
|
||||
this.averageRating,
|
||||
this.isInStock,
|
||||
this.isActive,
|
||||
this.isInWishlist,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.storeId,
|
||||
this.categoryId,
|
||||
this.productTypeId,
|
||||
this.timeSlotId,
|
||||
this.productImages,
|
||||
this.category,
|
||||
this.productTags,
|
||||
this.zones,
|
||||
this.productReview,
|
||||
});
|
||||
|
||||
factory ProductDatum.fromJson(Map<dynamic, dynamic> json) => ProductDatum(
|
||||
@@ -147,16 +408,20 @@ class ProductDatum {
|
||||
quantity: json["quantity"],
|
||||
unit: json["unit"],
|
||||
slug: json["slug"],
|
||||
rating: json["rating"],
|
||||
averageRating: json["averageRating"],
|
||||
isInStock: json["isInStock"],
|
||||
isActive: json["isActive"],
|
||||
isInWishlist: json["isInWishlist"],
|
||||
createdAt: DateTime.parse(json["createdAt"]),
|
||||
updatedAt: DateTime.parse(json["updatedAt"]),
|
||||
createdAt: DateTime?.parse(json["createdAt"]),
|
||||
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||
storeId: json["storeId"],
|
||||
categoryId: json["categoryId"],
|
||||
productTypeId: json["productTypeId"],
|
||||
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() => {
|
||||
@@ -171,16 +436,204 @@ class ProductDatum {
|
||||
"quantity": quantity,
|
||||
"unit": unit,
|
||||
"slug": slug,
|
||||
"rating": rating,
|
||||
"averageRating": averageRating,
|
||||
"isInStock": isInStock,
|
||||
"isActive": isActive,
|
||||
"isInWishlist": isInWishlist,
|
||||
"createdAt": createdAt,
|
||||
"updatedAt": updatedAt,
|
||||
"storeId": storeId,
|
||||
"categoryId": categoryId,
|
||||
"productTypeId": productTypeId,
|
||||
"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"],
|
||||
gumastaNumber: json["gumastaNumber"],
|
||||
storePicture: json["storePicture"],
|
||||
createdAt: DateTime.parse(json["createdAt"]),
|
||||
updatedAt: DateTime.parse(json["updatedAt"]),
|
||||
createdAt: DateTime?.parse(json["createdAt"]),
|
||||
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||
vendorId: json["vendorId"],
|
||||
isActive: json["isActive"],
|
||||
couponId: json["couponId"],
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
import 'dart:convert';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:geolocator/geolocator.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/logic/repo/product_repo.dart';
|
||||
import 'package:grocery_app/utils/extensions/extensions.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
class AddtocartProvider extends ChangeNotifier {
|
||||
@@ -15,6 +18,7 @@ class AddtocartProvider extends ChangeNotifier {
|
||||
String get pinCode => _pinCode;
|
||||
bool get isLoading => _isLoading;
|
||||
bool get isDeliverable => _isDeliverable;
|
||||
TextEditingController checkPinCode = TextEditingController();
|
||||
|
||||
Future<void> getCurrentLocation(BuildContext context) async {
|
||||
_isLoading = true;
|
||||
@@ -23,16 +27,6 @@ class AddtocartProvider extends ChangeNotifier {
|
||||
try {
|
||||
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
||||
if (!serviceEnabled) {
|
||||
_pinCode = "Location services disabled.";
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
LocationPermission permission = await Geolocator.requestPermission();
|
||||
if (permission == LocationPermission.denied) {
|
||||
_pinCode = "Permission denied.";
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
|
||||
@@ -52,54 +46,58 @@ class AddtocartProvider extends ChangeNotifier {
|
||||
|
||||
if (placemarks.isNotEmpty) {
|
||||
_pinCode = placemarks.first.postalCode ?? "Unknown";
|
||||
checkPinCode.text = _pinCode;
|
||||
print("Pincode found: $_pinCode");
|
||||
|
||||
// Now check if this pin code is deliverable
|
||||
await checkPin(context, _pinCode);
|
||||
} else {
|
||||
_pinCode = "Could not fetch pin code.";
|
||||
_pinCode = "unable to current pi code";
|
||||
print("Error: No placemarks found.");
|
||||
}
|
||||
} catch (e) {
|
||||
_pinCode = "Error: ${e.toString()}";
|
||||
_pinCode = "unable to current pi code";
|
||||
print("Error: ${e.toString()}");
|
||||
}
|
||||
|
||||
_pinCode = "unable to current pi code";
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
bool ischeckpin = false;
|
||||
Future<void> checkPin(BuildContext context, pin) async {
|
||||
ischeckpin = true;
|
||||
_pinCode = pin;
|
||||
notifyListeners();
|
||||
var data = {};
|
||||
try {
|
||||
var result = await _homeRepo.checkPin(data, pin);
|
||||
|
||||
return result.fold(
|
||||
(error) {
|
||||
ischeckpin = false;
|
||||
_isDeliverable = false;
|
||||
isLoaddcartItem = false;
|
||||
notifyListeners();
|
||||
},
|
||||
(response) {
|
||||
print("kdhfgkjfkghkfghkj ${response.isDeliverable!}");
|
||||
if (response.isDeliverable!) {
|
||||
_isDeliverable = true;
|
||||
}
|
||||
|
||||
ischeckpin = false;
|
||||
isLoaddcartItem = false;
|
||||
notifyListeners();
|
||||
},
|
||||
);
|
||||
} catch (e) {
|
||||
ischeckpin = false;
|
||||
_isDeliverable = false;
|
||||
isLoaddcartItem = false;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Map<String, bool> isRemoveItem = {};
|
||||
Map<String, bool> isRemoveItem = {};
|
||||
|
||||
Future<void> deleteItem(BuildContext context, id) async {
|
||||
isRemoveItem[id] = true;
|
||||
@@ -109,18 +107,17 @@ class AddtocartProvider extends ChangeNotifier {
|
||||
var result = await _homeRepo.deleteItem(data, id);
|
||||
return result.fold(
|
||||
(error) {
|
||||
|
||||
isRemoveItem[id] = false;
|
||||
notifyListeners();
|
||||
},
|
||||
(response) {
|
||||
getItemCards(context);
|
||||
isRemoveItem[id] = false;
|
||||
isRemoveItem[id] = false;
|
||||
notifyListeners();
|
||||
},
|
||||
);
|
||||
} catch (e) {
|
||||
isRemoveItem[id] = false;
|
||||
isRemoveItem[id] = false;
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
@@ -140,12 +137,10 @@ class AddtocartProvider extends ChangeNotifier {
|
||||
|
||||
return result.fold(
|
||||
(error) {
|
||||
print("dsjfgkjhkdfgdkjfhg");
|
||||
isLoaddcartItem = false;
|
||||
notifyListeners();
|
||||
},
|
||||
(response) {
|
||||
print("dsjfgkjhkdjsfjkdhfsgfgdkjfhg");
|
||||
allitem = response!;
|
||||
isLoaddcartItem = false;
|
||||
notifyListeners();
|
||||
@@ -157,4 +152,165 @@ class AddtocartProvider extends ChangeNotifier {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
74
lib/src/logic/provider/address_provider.dart
Normal file
74
lib/src/logic/provider/address_provider.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,8 @@
|
||||
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 {
|
||||
int _currentIndex = 0;
|
||||
@@ -7,10 +11,58 @@ class BottomNavProvider with ChangeNotifier {
|
||||
int get currentIndex => _currentIndex;
|
||||
PageController get pageController => _pageController;
|
||||
|
||||
void setIndex(int index)
|
||||
{
|
||||
void setIndex(int index) {
|
||||
_currentIndex = index;
|
||||
_pageController.jumpToPage(index);
|
||||
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;
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,8 @@ class ProductProvider extends ChangeNotifier {
|
||||
var data = {};
|
||||
productDetails = ProductDetailsData();
|
||||
isProductLoading = true;
|
||||
quantitys = 1;
|
||||
_totalPrice = 0.0;
|
||||
notifyListeners();
|
||||
|
||||
var result = await _homeRepo.getProductDetails(data, context, id);
|
||||
@@ -186,8 +188,6 @@ class ProductProvider extends ChangeNotifier {
|
||||
|
||||
// Mock API call
|
||||
Future<bool> addToWish(BuildContext context, String productId) async {
|
||||
print("jsdkjfhkdfkg ${productId}");
|
||||
|
||||
var data = {
|
||||
"productId": productId,
|
||||
};
|
||||
@@ -206,6 +206,7 @@ class ProductProvider extends ChangeNotifier {
|
||||
return false;
|
||||
},
|
||||
(response) {
|
||||
iswishloading = false;
|
||||
Fluttertoast.showToast(
|
||||
msg: "Wishlist updated successfully!",
|
||||
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 {
|
||||
iswishloading = true;
|
||||
notifyListeners();
|
||||
try {
|
||||
if (wishlist.contains(productId)) {
|
||||
wishlist.remove(productId);
|
||||
iswishloading = false;
|
||||
} else {
|
||||
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) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
@@ -297,13 +304,16 @@ class ProductProvider extends ChangeNotifier {
|
||||
Set<String> cartItems = {};
|
||||
Map<String, bool> isLoading = {};
|
||||
|
||||
Future<void> addToCart(BuildContext context, String productId) async {
|
||||
//if (cartItems.contains(productId)) return; // Prevent duplicate additions
|
||||
bool isLoadingCart=false;
|
||||
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;
|
||||
notifyListeners(); // Notify UI to show loading indicator
|
||||
|
||||
var data = {"productId": productId, "quantity": 1};
|
||||
var data = {"productId": productId, "quantity": quantity};
|
||||
|
||||
try {
|
||||
var result = await _homeRepo.addToCart(data);
|
||||
@@ -327,6 +337,7 @@ class ProductProvider extends ChangeNotifier {
|
||||
textColor: Colors.white,
|
||||
fontSize: 14.0,
|
||||
);
|
||||
iscardAdded=true;
|
||||
notifyListeners(); // Update UI after adding to cart
|
||||
},
|
||||
);
|
||||
@@ -338,19 +349,20 @@ class ProductProvider extends ChangeNotifier {
|
||||
),
|
||||
);
|
||||
} finally {
|
||||
isLoadingCart=false;
|
||||
isLoading[productId] = false;
|
||||
notifyListeners(); // Ensure UI updates after operation
|
||||
}
|
||||
}
|
||||
|
||||
List<BestDeal> countList = [];
|
||||
String lastImageurl = '';
|
||||
|
||||
Future<void> addToWithCart(
|
||||
BuildContext context, String productId, BestDeal bestdealproduct) async {
|
||||
//if (cartItems.contains(productId)) return; // Prevent duplicate additions
|
||||
Future<void> addToWithCart(BuildContext context, String productId,
|
||||
BestDeal bestdealproduct, url) async {
|
||||
|
||||
isLoading[productId] = true;
|
||||
notifyListeners(); // Notify UI to show loading indicator
|
||||
notifyListeners();
|
||||
|
||||
var data = {"productId": productId, "quantity": 1};
|
||||
|
||||
@@ -368,6 +380,7 @@ class ProductProvider extends ChangeNotifier {
|
||||
},
|
||||
(response) {
|
||||
countList.add(bestdealproduct);
|
||||
lastImageurl = url;
|
||||
cartItems.add(productId); // Add product to cart
|
||||
Fluttertoast.showToast(
|
||||
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;
|
||||
|
||||
List<WishListItem> wishListItem = [];
|
||||
@@ -427,30 +497,69 @@ class ProductProvider extends ChangeNotifier {
|
||||
}
|
||||
////////////////////////////// product increase ////////////////////////////////////
|
||||
|
||||
int _quantity = 1;
|
||||
int quantitys = 1;
|
||||
double _unitPrice = 0.0;
|
||||
double _totalPrice = 0.0;
|
||||
|
||||
int get quantity => _quantity;
|
||||
int get quantity => quantitys;
|
||||
double get totalPrice => _totalPrice;
|
||||
|
||||
void setProductPrice(double price) {
|
||||
_unitPrice = price;
|
||||
_totalPrice = _unitPrice * _quantity;
|
||||
_totalPrice = _unitPrice * quantitys;
|
||||
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() {
|
||||
print("kjfgkhkdfhgkjdhfg");
|
||||
_quantity++;
|
||||
_totalPrice = _unitPrice * _quantity;
|
||||
notifyListeners();
|
||||
int maxAllowed = productQuantity >= 100
|
||||
? 10
|
||||
: productQuantity; // Max limit based on stock
|
||||
|
||||
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() {
|
||||
if (_quantity > 1) {
|
||||
_quantity--;
|
||||
_totalPrice = _unitPrice * _quantity;
|
||||
if (quantitys > 1) {
|
||||
quantitys--;
|
||||
_totalPrice = _unitPrice * quantitys;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
94
lib/src/logic/provider/profile_provider.dart
Normal file
94
lib/src/logic/provider/profile_provider.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/login_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/logic/services/auth_service_locator.dart';
|
||||
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||
@@ -21,7 +22,6 @@ class AuthRepo {
|
||||
var response = await _authServices.sendOtp(data);
|
||||
final String model = response.toString();
|
||||
|
||||
|
||||
return right(model);
|
||||
} on DioException catch (e) {
|
||||
print("dhfgfdgjdhfgfgh ${e}");
|
||||
@@ -40,10 +40,10 @@ class AuthRepo {
|
||||
if (vendorOtpModel.data != null) {
|
||||
await SharedPrefUtils.setToken(
|
||||
authToken: vendorOtpModel.data!.accessToken ?? "");
|
||||
await SharedPrefUtils.setRefreshToken(
|
||||
refresh_token: vendorOtpModel.data!.refreshToken ?? "");
|
||||
}
|
||||
|
||||
|
||||
|
||||
return right(vendorOtpModel);
|
||||
} on DioException catch (e) {
|
||||
var error = CustomDioExceptions.handleError(e);
|
||||
@@ -51,16 +51,17 @@ class AuthRepo {
|
||||
}
|
||||
}
|
||||
|
||||
FutureResult<LoginResponse> loginOtp(data) async {
|
||||
FutureResult<LoginResponse> loginOtp(data) async {
|
||||
try {
|
||||
var response = await _authServices.loginOtp(data);
|
||||
|
||||
LoginResponse loginResponse = loginResponseFromJson(response.toString());
|
||||
|
||||
if (loginResponse.accessToken != null)
|
||||
{
|
||||
if (loginResponse.accessToken != null) {
|
||||
await SharedPrefUtils.setToken(
|
||||
authToken: loginResponse.accessToken ?? "");
|
||||
await SharedPrefUtils.setRefreshToken(
|
||||
refresh_token: loginResponse.refreshToken ?? "");
|
||||
}
|
||||
|
||||
// final String model = response.toString();
|
||||
@@ -119,12 +120,9 @@ class AuthRepo {
|
||||
|
||||
await SharedPrefUtils.setToken(
|
||||
authToken: registrationResponse.accessToken ?? "");
|
||||
print("dsfklgjkfgbfgkfdgjkhkfdjg ${registrationResponse.accessToken}");
|
||||
// if (response.statCode) {
|
||||
// print("dsfklgjkfgbfgkfdgjkhkfdjg");
|
||||
// }
|
||||
|
||||
final String model = response.toString();
|
||||
await SharedPrefUtils.setRefreshToken(
|
||||
refresh_token: registrationResponse.refreshToken ?? "");
|
||||
final String model = response.toString();
|
||||
return right(registrationResponse);
|
||||
} on DioException catch (e) {
|
||||
var error = CustomDioExceptions.handleError(e);
|
||||
|
||||
@@ -1,18 +1,27 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.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/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/all_cart_items.dart';
|
||||
import 'package:grocery_app/src/data/banners.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/login_response.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/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/logic/services/home_locator.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 {
|
||||
final ProductService _productService;
|
||||
@@ -36,12 +45,13 @@ class ProductRepo {
|
||||
}
|
||||
}
|
||||
|
||||
FutureResult<ProductDetailsData> getProductDetails(
|
||||
FutureResult<ProductDetailsData> getProductDetails(
|
||||
data, BuildContext context, id) async {
|
||||
try {
|
||||
var response = await _productService.getProductDetails(data, id);
|
||||
|
||||
ProductDetailsData loginResponse = productDetailsdataFromJson(response.toString());
|
||||
ProductDetailsData loginResponse =
|
||||
productDetailsdataFromJson(response.toString());
|
||||
|
||||
final String model = response.toString();
|
||||
|
||||
@@ -52,8 +62,6 @@ class ProductRepo {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
FutureResult<BestDealProduct> getBestDealProduct(
|
||||
data, BuildContext context) async {
|
||||
try {
|
||||
@@ -112,8 +120,19 @@ class ProductRepo {
|
||||
var response = await _productService.getItemCards(data);
|
||||
|
||||
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);
|
||||
} 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 {
|
||||
try {
|
||||
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 {
|
||||
try {
|
||||
var response = await _productService.addToWish(data);
|
||||
@@ -175,6 +249,22 @@ class ProductRepo {
|
||||
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 {
|
||||
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 {
|
||||
// try {
|
||||
// var response = await _homeService.getMe(data);
|
||||
|
||||
@@ -1,36 +1,27 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:grocery_app/src/core/constant/api.dart';
|
||||
import 'package:grocery_app/src/core/network_services/api_services.dart';
|
||||
|
||||
|
||||
|
||||
class AuthServices extends ApiService {
|
||||
/// Login
|
||||
Future sendOtp(data) async
|
||||
{
|
||||
Future sendOtp(data) async {
|
||||
var response = await api.post(APIURL.sendOtp, data: jsonEncode(data));
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Future verifyOtp(data) async {
|
||||
Future verifyOtp(data) async {
|
||||
var response = await api.post(APIURL.verifyOtp, data: jsonEncode(data));
|
||||
return response;
|
||||
}
|
||||
Future loginOtp(data) async {
|
||||
|
||||
Future loginOtp(data) async {
|
||||
var response = await api.post(APIURL.loginOtp, data: jsonEncode(data));
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
Future login(data) async
|
||||
{
|
||||
Future login(data) async {
|
||||
var response = await api.post(APIURL.login, data: jsonEncode(data));
|
||||
//response.statusCode
|
||||
|
||||
@@ -39,45 +30,30 @@ class AuthServices extends ApiService {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Future userRegister(data) async
|
||||
{
|
||||
var response = await api.post(APIURL.customerRegister, data: jsonEncode(data));
|
||||
Future userRegister(data) async {
|
||||
var response =
|
||||
await api.post(APIURL.customerRegister, data: jsonEncode(data));
|
||||
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;
|
||||
}
|
||||
|
||||
Future verifyForgetPassword(data) async
|
||||
{
|
||||
var response = await api.post(APIURL.verifyForgetPassword, data: jsonEncode(data));
|
||||
Future verifyForgetPassword(data) async {
|
||||
var response =
|
||||
await api.post(APIURL.verifyForgetPassword, data: jsonEncode(data));
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
Future reset_password(data) async
|
||||
{
|
||||
var response = await api.post(APIURL.reset_password, data: jsonEncode(data));
|
||||
Future reset_password(data) async {
|
||||
var response =
|
||||
await api.post(APIURL.reset_password, data: jsonEncode(data));
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// Login
|
||||
// Future profileUpdate(data) async {
|
||||
// var response = await api.put(Endpoints.update, data: data);
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
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/network_services/api_services.dart';
|
||||
|
||||
@@ -76,7 +78,39 @@ class ProductService extends ApiService {
|
||||
await api.delete(APIURL.deleteItem + id, data: jsonEncode(data));
|
||||
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 {
|
||||
var response = await api.post(APIURL.addToWish, data: jsonEncode(data));
|
||||
|
||||
@@ -89,6 +123,12 @@ class ProductService extends ApiService {
|
||||
return response;
|
||||
}
|
||||
|
||||
Future decreaseQuantity(data) async {
|
||||
var response = await api.patch(APIURL.addToCart, data: jsonEncode(data));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
Future gettAllWishList(data) async {
|
||||
var response =
|
||||
await api.get(APIURL.gettAllWishList, data: jsonEncode(data));
|
||||
|
||||
@@ -62,14 +62,21 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
||||
],
|
||||
),
|
||||
floatingActionButton: floatingAction(),
|
||||
body: itemBestdeal());
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.only(bottom: 100),
|
||||
child: itemBestdeal(),
|
||||
));
|
||||
}
|
||||
|
||||
Widget floatingAction() {
|
||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||
if (provider.countList.isEmpty) {
|
||||
Widget floatingAction()
|
||||
{
|
||||
return Consumer<ProductProvider>(builder: (context, provider, child)
|
||||
{
|
||||
if (provider.countList.isEmpty)
|
||||
{
|
||||
return Center();
|
||||
} else {
|
||||
} else
|
||||
{
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(left: 30),
|
||||
child: Container(
|
||||
@@ -93,7 +100,7 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
||||
color: Colors.white.withOpacity(0.5),
|
||||
borderRadius: BorderRadius.circular(10)),
|
||||
),
|
||||
const Positioned(
|
||||
Positioned(
|
||||
left: 20,
|
||||
bottom: 0,
|
||||
top: 0,
|
||||
@@ -102,7 +109,7 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
||||
height: 70,
|
||||
width: 70,
|
||||
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",
|
||||
backGroundColor: Colors.white,
|
||||
),
|
||||
@@ -113,15 +120,12 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
provider.countList.length.toString(),
|
||||
style: context.customRegular(Colors.white, 18),
|
||||
),
|
||||
],
|
||||
Text(
|
||||
provider.countList.length.toString(),
|
||||
style: context.customRegular(
|
||||
Colors.white,
|
||||
29,
|
||||
),
|
||||
),
|
||||
const Spacer(),
|
||||
InkWell(
|
||||
@@ -306,8 +310,12 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
||||
onTap: () async {
|
||||
if (await SharedPrefUtils.getToken() !=
|
||||
null) {
|
||||
await provider.addToWithCart(context,
|
||||
bestdealproduct.id!, bestdealproduct);
|
||||
await provider.addToWithCart(
|
||||
context,
|
||||
bestdealproduct.id!,
|
||||
bestdealproduct,
|
||||
bestdealproduct
|
||||
.productImages?.first.url);
|
||||
} else {
|
||||
context.push(MyRoutes.SIGNUP);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:geolocator/geolocator.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/favourite/favourite_screen.dart';
|
||||
import 'package:grocery_app/src/ui/header.dart';
|
||||
@@ -38,6 +39,7 @@ class _BottomBarState extends State<BottomBarWidget> {
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
Provider.of<BottomNavProvider>(context, listen: false).getProfile(context);
|
||||
_currentIndex = 0;
|
||||
bottomWidgetPageController = PageController(
|
||||
initialPage: 0,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
135
lib/src/ui/coupons/coupons_screen.dart
Normal file
135
lib/src/ui/coupons/coupons_screen.dart
Normal 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"),
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,19 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.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/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/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:image_picker/image_picker.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 {
|
||||
const EditProfileScreen({super.key});
|
||||
@@ -15,6 +23,51 @@ class EditProfileScreen extends StatefulWidget {
|
||||
}
|
||||
|
||||
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
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
@@ -43,40 +96,50 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
|
||||
),
|
||||
),
|
||||
),
|
||||
bottomNavigationBar: Container(
|
||||
color: Colors.transparent,
|
||||
height: 60,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(bottom: 10),
|
||||
child: Row(
|
||||
children: [
|
||||
const SizedBox(
|
||||
width: 15,
|
||||
),
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Container(
|
||||
height: 50,
|
||||
decoration: BoxDecoration(color: APPCOLOR.lightGreen, borderRadius: BorderRadius.circular(10)),
|
||||
child: Center(
|
||||
child: Text(
|
||||
"Update",
|
||||
style: context.customRegular(Colors.white, 16),
|
||||
bottomNavigationBar:
|
||||
Consumer<ProfileProvider>(builder: (context, imageProvider, child) {
|
||||
return Container(
|
||||
color: Colors.transparent,
|
||||
height: 60,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(bottom: 10),
|
||||
child: Row(
|
||||
children: [
|
||||
const SizedBox(
|
||||
width: 15,
|
||||
),
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: imageProvider.isImageLoading
|
||||
? () {
|
||||
imageProvider.createStore(context,
|
||||
firstController.text, lastController.text);
|
||||
}
|
||||
: null,
|
||||
child: Container(
|
||||
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(
|
||||
width: 15,
|
||||
),
|
||||
],
|
||||
const SizedBox(
|
||||
width: 15,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}),
|
||||
body: Padding(
|
||||
padding: context.bodyAllPadding,
|
||||
child: SingleChildScrollView(
|
||||
@@ -90,26 +153,37 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
|
||||
Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
const AppNetworkImage(
|
||||
height: 80,
|
||||
width: 80,
|
||||
imageUrl: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdQLwDqDwd2JfzifvfBTFT8I7iKFFevcedYg&s",
|
||||
radius: 90,
|
||||
backGroundColor: Colors.white,
|
||||
boxFit: BoxFit.fill,
|
||||
//
|
||||
CircleAvatar(
|
||||
radius: 40,
|
||||
backgroundColor: Colors.white,
|
||||
backgroundImage: _image != null
|
||||
? FileImage(_image!) as ImageProvider
|
||||
: (profile != null && profile!.isNotEmpty
|
||||
? NetworkImage(profile!)
|
||||
: const AssetImage("assets/default_profile.png")
|
||||
as ImageProvider),
|
||||
),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
right: 0,
|
||||
child: Container(
|
||||
height: 20,
|
||||
width: 20,
|
||||
decoration: BoxDecoration(color: APPCOLOR.lightGreen, border: Border.all(color: Colors.white), borderRadius: BorderRadius.circular(5)),
|
||||
child: Center(
|
||||
child: Icon(
|
||||
MdiIcons.pencil,
|
||||
size: 10,
|
||||
color: Colors.white,
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
_pickImage();
|
||||
},
|
||||
child: Container(
|
||||
height: 20,
|
||||
width: 20,
|
||||
decoration: BoxDecoration(
|
||||
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(
|
||||
height: 15,
|
||||
),
|
||||
const NameTextField(
|
||||
name: "Name",
|
||||
initText: "Smith Mate",
|
||||
Container(
|
||||
height: 60,
|
||||
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(
|
||||
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,
|
||||
Container(
|
||||
height: 60,
|
||||
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(
|
||||
"Last Name ",
|
||||
style: context.customMedium(APPCOLOR.lightGreen, 14),
|
||||
),
|
||||
Expanded(
|
||||
child: TextFormField(
|
||||
controller: lastController,
|
||||
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
@@ -1,3 +1,4 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
@@ -79,10 +80,25 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
|
||||
Widget productWidget() {
|
||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||
if (provider.isLoadingg) {
|
||||
if (provider.isLoadingg)
|
||||
{
|
||||
return Padding(
|
||||
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) {
|
||||
return Padding(
|
||||
@@ -106,8 +122,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
crossAxisSpacing: 10,
|
||||
mainAxisSpacing: 10,
|
||||
),
|
||||
itemBuilder: (context, index)
|
||||
{
|
||||
itemBuilder: (context, index) {
|
||||
var product = provider.products[index];
|
||||
|
||||
return InkWell(
|
||||
@@ -189,31 +204,31 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
// ),
|
||||
// ),
|
||||
|
||||
Positioned(
|
||||
right: 5,
|
||||
top: 5,
|
||||
child: InkWell(
|
||||
onTap: () async {
|
||||
if (await SharedPrefUtils
|
||||
.getToken() !=
|
||||
null) {
|
||||
provider.toggleWishlist(
|
||||
context, product.id!);
|
||||
} else {
|
||||
context.push(MyRoutes.SIGNUP);
|
||||
}
|
||||
},
|
||||
child: Icon(
|
||||
provider.wishlist.contains(product.id)
|
||||
? Icons.favorite
|
||||
: Icons.favorite_border,
|
||||
color: provider.wishlist
|
||||
.contains(product.id)
|
||||
? Colors.red
|
||||
: Colors.grey,
|
||||
),
|
||||
),
|
||||
),
|
||||
// Positioned(
|
||||
// right: 5,
|
||||
// top: 5,
|
||||
// child: InkWell(
|
||||
// onTap: () async {
|
||||
// if (await SharedPrefUtils
|
||||
// .getToken() !=
|
||||
// null) {
|
||||
// provider.toggleWishlist(
|
||||
// context, product.id!);
|
||||
// } else {
|
||||
// context.push(MyRoutes.SIGNUP);
|
||||
// }
|
||||
// },
|
||||
// child: Icon(
|
||||
// provider.wishlist.contains(product.id)
|
||||
// ? Icons.favorite
|
||||
// : Icons.favorite_border,
|
||||
// color: provider.wishlist
|
||||
// .contains(product.id)
|
||||
// ? Colors.red
|
||||
// : Colors.grey,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -221,7 +236,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
Text(
|
||||
product.name ?? " ",
|
||||
textAlign: TextAlign.left,
|
||||
maxLines: 2,
|
||||
maxLines: 3,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: context.customMedium(
|
||||
APPCOLOR.balck1A1A1A, 14),
|
||||
@@ -238,6 +253,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 3),
|
||||
Spacer(),
|
||||
Row(
|
||||
children: [
|
||||
Column(
|
||||
@@ -281,7 +297,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
if (await SharedPrefUtils.getToken() !=
|
||||
null) {
|
||||
await provider.addToCart(
|
||||
context, product.id!);
|
||||
context, product.id!, 1);
|
||||
} else {
|
||||
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);
|
||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||
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) {
|
||||
return Center(child: Text('No products available'));
|
||||
} else {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
466
lib/src/ui/map/add_locations.dart
Normal file
466
lib/src/ui/map/add_locations.dart
Normal 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),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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"),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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/core/routes/routes.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/utils/constants/assets_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:provider/provider.dart';
|
||||
import 'package:readmore/readmore.dart';
|
||||
import 'package:shimmer/shimmer.dart';
|
||||
|
||||
class ProductDetails extends StatefulWidget {
|
||||
String id;
|
||||
@@ -95,7 +97,6 @@ class _ProductDetailsState extends State<ProductDetails> {
|
||||
prodectDtails(),
|
||||
Divider(),
|
||||
reviews(),
|
||||
Divider(),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||
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() {
|
||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||
if (provider.isProductLoading) {
|
||||
return Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: Colors.green,
|
||||
));
|
||||
return _buildSkeletonLoader();
|
||||
} else if (provider.productDetails.data == null) {
|
||||
return Center(child: Text('No products available'));
|
||||
} 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(
|
||||
children: [
|
||||
SizedBox(
|
||||
@@ -206,43 +226,13 @@ class _ProductDetailsState extends State<ProductDetails> {
|
||||
color: Colors.green,
|
||||
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:
|
||||
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(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||
padding: const EdgeInsets.all(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),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
Shimmer.fromColors(
|
||||
baseColor: Colors.grey[300]!,
|
||||
highlightColor: Colors.grey[100]!,
|
||||
child: Container(
|
||||
height: 300,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
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),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
Shimmer.fromColors(
|
||||
baseColor: Colors.grey[300]!,
|
||||
highlightColor: Colors.grey[100]!,
|
||||
child: Container(
|
||||
height: 20,
|
||||
width: double.infinity,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
ReadMoreText(
|
||||
'Flutter is Google’s 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),
|
||||
Shimmer.fromColors(
|
||||
baseColor: Colors.grey[300]!,
|
||||
highlightColor: Colors.grey[100]!,
|
||||
child: Container(
|
||||
height: 20,
|
||||
width: 150,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// Widget similarProducts() {
|
||||
// return SizedBox(
|
||||
// height: 222,
|
||||
// child: ListView.builder(
|
||||
// itemCount: 5,
|
||||
// scrollDirection: Axis.horizontal,
|
||||
// itemBuilder: (context, index) {
|
||||
// return Padding(
|
||||
// padding: const EdgeInsets.only(right: 10, bottom: 5, top: 5),
|
||||
// child: Container(
|
||||
// height: 215,
|
||||
// width: 150,
|
||||
// decoration: BoxDecoration(
|
||||
// color: Colors.white,
|
||||
// borderRadius: BorderRadius.circular(15),
|
||||
// boxShadow: [
|
||||
// BoxShadow(
|
||||
// color: Colors.grey.withOpacity(0.1),
|
||||
// blurRadius: 1,
|
||||
// offset: const Offset(5, 5),
|
||||
// ),
|
||||
// ]),
|
||||
// child: Padding(
|
||||
// padding: const EdgeInsets.all(5),
|
||||
// child: Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
// children: [
|
||||
// Container(
|
||||
// height: 100,
|
||||
// width: 150,
|
||||
// decoration: BoxDecoration(
|
||||
// color: APPCOLOR.bgGrey,
|
||||
// borderRadius: BorderRadius.circular(15)),
|
||||
// child: const Stack(
|
||||
// alignment: Alignment.center,
|
||||
// children: [
|
||||
// AppNetworkImage(
|
||||
// height: 70,
|
||||
// width: 70,
|
||||
// imageUrl:
|
||||
// "https://5.imimg.com/data5/SELLER/Default/2024/2/385126988/OL/DA/VW/8627346/1l-fortune-sunflower-oil.jpg",
|
||||
// backGroundColor: Colors.transparent),
|
||||
// Positioned(
|
||||
// right: 5,
|
||||
// top: 5,
|
||||
// child: Icon(Icons.favorite_border))
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// Text(
|
||||
// "Fortune Arhar Dal (Toor Dal)",
|
||||
// textAlign: TextAlign.left,
|
||||
// maxLines: 2,
|
||||
// overflow: TextOverflow.ellipsis,
|
||||
// style: context.customMedium(APPCOLOR.balck1A1A1A, 14),
|
||||
// ),
|
||||
// const SizedBox(
|
||||
// height: 5,
|
||||
// ),
|
||||
// Text(
|
||||
// "500 ML",
|
||||
// textAlign: TextAlign.left,
|
||||
// maxLines: 1,
|
||||
// overflow: TextOverflow.ellipsis,
|
||||
// style: context.customMedium(
|
||||
// Colors.grey.withOpacity(0.8), 12),
|
||||
// ),
|
||||
// const SizedBox(
|
||||
// height: 3,
|
||||
// ),
|
||||
// Row(
|
||||
// children: [
|
||||
// Expanded(
|
||||
// child: Row(
|
||||
// children: [
|
||||
// Text(
|
||||
// "\$12",
|
||||
// textAlign: TextAlign.left,
|
||||
// maxLines: 1,
|
||||
// overflow: TextOverflow.ellipsis,
|
||||
// style: context.customSemiBold(Colors.black, 12),
|
||||
// ),
|
||||
// const SizedBox(
|
||||
// width: 5,
|
||||
// ),
|
||||
// Text(
|
||||
// "\$14",
|
||||
// textAlign: TextAlign.left,
|
||||
// maxLines: 1,
|
||||
// overflow: TextOverflow.ellipsis,
|
||||
// style: context
|
||||
// .customMedium(
|
||||
// Colors.grey.withOpacity(0.8), 12)
|
||||
// .copyWith(
|
||||
// decoration: TextDecoration.lineThrough,
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// )),
|
||||
// Expanded(
|
||||
// child: Align(
|
||||
// alignment: Alignment.centerRight,
|
||||
// child: Container(
|
||||
// height: 30,
|
||||
// width: 50,
|
||||
// decoration: BoxDecoration(
|
||||
// color: APPCOLOR.lightGreen,
|
||||
// borderRadius: BorderRadius.circular(5),
|
||||
// ),
|
||||
// child: Center(
|
||||
// child: Text(
|
||||
// 'Add',
|
||||
// style: context.customRegular(Colors.white, 12),
|
||||
// )),
|
||||
// ),
|
||||
// ),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// },
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
Widget reviews() {
|
||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||
if (provider.isProductLoading) {
|
||||
return SizedBox.shrink();
|
||||
} else if (provider.productDetails.data == null) {
|
||||
return Center(child: Text('No products available'));
|
||||
} else {
|
||||
return provider.productDetails.data!.productReview!.isNotEmpty
|
||||
? 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 Google’s 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 Google’s 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() {
|
||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||
@@ -678,7 +726,7 @@ class _ProductDetailsState extends State<ProductDetails> {
|
||||
false
|
||||
? null
|
||||
: () => provider.addToCart(
|
||||
context, bestdealproduct.id!);
|
||||
context, bestdealproduct.id!, 1);
|
||||
} else {
|
||||
context.push(MyRoutes.SIGNUP);
|
||||
}
|
||||
@@ -730,71 +778,90 @@ class _ProductDetailsState extends State<ProductDetails> {
|
||||
}
|
||||
|
||||
Widget bottomBar() {
|
||||
return Consumer<ProductProvider>(
|
||||
builder: (context, cartProvider, child) {
|
||||
return Container(
|
||||
padding: EdgeInsets.all(16),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
boxShadow: [BoxShadow(color: Colors.grey.shade300, blurRadius: 10)],
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.remove_circle_outline),
|
||||
onPressed: cartProvider.decreaseQuantity,
|
||||
),
|
||||
Text("${cartProvider.quantity}",
|
||||
style:
|
||||
TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||
IconButton(
|
||||
icon: Icon(Icons.add_circle_outline),
|
||||
onPressed: cartProvider.increaseQuantity,
|
||||
),
|
||||
],
|
||||
return Consumer<ProductProvider>(builder: (context, cartProvider, child) {
|
||||
return Container(
|
||||
padding: EdgeInsets.all(16),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
boxShadow: [BoxShadow(color: Colors.grey.shade300, blurRadius: 10)],
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.remove_circle_outline),
|
||||
onPressed: cartProvider.decreaseQuantity,
|
||||
),
|
||||
Text("${cartProvider.quantity}",
|
||||
style:
|
||||
TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||
IconButton(
|
||||
icon: Icon(Icons.add_circle_outline),
|
||||
onPressed: cartProvider.increaseQuantity,
|
||||
),
|
||||
],
|
||||
),
|
||||
Container(
|
||||
height: 50,
|
||||
decoration: BoxDecoration(
|
||||
color: APPCOLOR.lightGreen,
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
Container(
|
||||
height: 50,
|
||||
decoration: BoxDecoration(
|
||||
color: APPCOLOR.lightGreen,
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Center(
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
'Add to Cart',
|
||||
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),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Center(
|
||||
child: Row(
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
cartProvider.addToCart(
|
||||
context,
|
||||
cartProvider.productDetails.data!.id!,
|
||||
cartProvider.quantity);
|
||||
},
|
||||
child: cartProvider.isLoadingCart
|
||||
? Padding(
|
||||
padding:
|
||||
const EdgeInsets.only(left: 40, right: 40),
|
||||
child: Container(
|
||||
height: 15,
|
||||
width: 15,
|
||||
child: Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: Colors.white, strokeWidth: 2),
|
||||
),
|
||||
),
|
||||
)
|
||||
: Text(
|
||||
'Add to Cart',
|
||||
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),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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/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/map/google_map.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/notification/notification_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/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:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class ProfileScreen extends StatefulWidget {
|
||||
const ProfileScreen({super.key});
|
||||
@@ -25,7 +28,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
||||
var top = 0.0;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
Widget build(BuildContext context)
|
||||
{
|
||||
return Scaffold(
|
||||
body: NestedScrollView(
|
||||
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
|
||||
@@ -69,34 +73,34 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
||||
AppNetworkImage(
|
||||
height: top < 150 ? 30 : 50,
|
||||
width: top < 150 ? 30 : 50,
|
||||
imageUrl:
|
||||
imageUrl: "${APPSTRING.userProfile ?? ""}" ??
|
||||
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdQLwDqDwd2JfzifvfBTFT8I7iKFFevcedYg&s",
|
||||
radius: 90,
|
||||
backGroundColor: Colors.white,
|
||||
boxFit: BoxFit.fill,
|
||||
),
|
||||
top > 100
|
||||
? Positioned(
|
||||
bottom: 0,
|
||||
right: 0,
|
||||
child: Container(
|
||||
height: 18,
|
||||
width: 18,
|
||||
decoration: BoxDecoration(
|
||||
color: APPCOLOR.lightGreen,
|
||||
border: Border.all(
|
||||
color: Colors.white),
|
||||
borderRadius:
|
||||
BorderRadius.circular(5)),
|
||||
child: Center(
|
||||
child: Icon(
|
||||
MdiIcons.pencil,
|
||||
size: 10,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
))
|
||||
: const SizedBox(),
|
||||
// top > 100
|
||||
// ? Positioned(
|
||||
// bottom: 0,
|
||||
// right: 0,
|
||||
// child: Container(
|
||||
// height: 18,
|
||||
// width: 18,
|
||||
// decoration: BoxDecoration(
|
||||
// color: APPCOLOR.lightGreen,
|
||||
// border: Border.all(
|
||||
// color: Colors.white),
|
||||
// borderRadius:
|
||||
// BorderRadius.circular(5)),
|
||||
// child: Center(
|
||||
// child: Icon(
|
||||
// MdiIcons.pencil,
|
||||
// size: 10,
|
||||
// color: Colors.white,
|
||||
// ),
|
||||
// ),
|
||||
// ))
|
||||
// : const SizedBox(),
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
@@ -108,13 +112,13 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
"Smith Mate",
|
||||
APPSTRING.userName ?? "",
|
||||
style: context.customExtraBold(
|
||||
top < 100 ? Colors.black : Colors.white,
|
||||
14),
|
||||
),
|
||||
Text(
|
||||
'smithmate@example.com',
|
||||
APPSTRING.emailName,
|
||||
style: context.customRegular(
|
||||
top < 100 ? Colors.black : Colors.white,
|
||||
10),
|
||||
@@ -196,30 +200,31 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
||||
title: const Text('Notifications'),
|
||||
trailing: Icon(MdiIcons.chevronRight),
|
||||
),
|
||||
ListTile(
|
||||
onTap: () {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return const RatingReviewScreen();
|
||||
},
|
||||
));
|
||||
},
|
||||
leading: Icon(MdiIcons.starOutline),
|
||||
title: const Text('Rating & Review'),
|
||||
trailing: Icon(MdiIcons.chevronRight),
|
||||
),
|
||||
ListTile(
|
||||
onTap: () {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return const MessageScreen();
|
||||
},
|
||||
));
|
||||
},
|
||||
leading: Icon(MdiIcons.messageOutline),
|
||||
title: const Text('Driver Message'),
|
||||
trailing: Icon(MdiIcons.chevronRight),
|
||||
),
|
||||
// ListTile(
|
||||
// onTap: () {
|
||||
// Navigator.of(context).push(MaterialPageRoute(
|
||||
// builder: (context) {
|
||||
// return const RatingReviewScreen();
|
||||
// },
|
||||
// ));
|
||||
// },
|
||||
// leading: Icon(MdiIcons.starOutline),
|
||||
// title: const Text('Rating & Review'),
|
||||
// trailing: Icon(MdiIcons.chevronRight),
|
||||
// ),
|
||||
// ListTile(
|
||||
// onTap: () {
|
||||
// Navigator.of(context).push(MaterialPageRoute(
|
||||
// builder: (context) {
|
||||
// return const MessageScreen();
|
||||
// },
|
||||
// ));
|
||||
// },
|
||||
// leading: Icon(MdiIcons.messageOutline),
|
||||
// title: const Text('Driver Message'),
|
||||
// trailing: Icon(MdiIcons.chevronRight),
|
||||
// ),
|
||||
|
||||
ListTile(
|
||||
onTap: () {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
@@ -248,24 +253,12 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
||||
title: const Text('Term & Conditions'),
|
||||
trailing: Icon(MdiIcons.chevronRight),
|
||||
),
|
||||
ListTile(
|
||||
onTap: () {},
|
||||
leading: Icon(MdiIcons.basketOutline),
|
||||
title: const Text('Grocery List'),
|
||||
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),
|
||||
),
|
||||
// ListTile(
|
||||
// onTap: () {},
|
||||
// leading: Icon(MdiIcons.basketOutline),
|
||||
// title: const Text('Grocery List'),
|
||||
// trailing: Icon(MdiIcons.chevronRight),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import 'package:flutter/material.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/utils/constants/assets_constant.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/uicontext.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class SplashScreen extends StatefulWidget {
|
||||
const SplashScreen({super.key});
|
||||
@@ -14,6 +16,7 @@ class SplashScreen extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _SplashScreenState extends State<SplashScreen> {
|
||||
|
||||
couting() async {
|
||||
Future.delayed(const Duration(seconds: 3)).then((c) {
|
||||
Navigator.of(context).pushReplacement(MaterialPageRoute(
|
||||
@@ -27,6 +30,9 @@ class _SplashScreenState extends State<SplashScreen> {
|
||||
@override
|
||||
void initState() {
|
||||
Future.delayed(const Duration(seconds: 2), () async {
|
||||
|
||||
Provider.of<BottomNavProvider>(context, listen: false)
|
||||
.refreshToken(context);
|
||||
if (await SharedPrefUtils.isFreshInstall()) {
|
||||
context.clearAndPush(routePath: MyRoutes.ONBOARDING);
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// ignore_for_file: constant_identifier_names
|
||||
|
||||
import 'package:grocery_app/src/data/user_profile.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
// 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 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}) {
|
||||
_token = authToken;
|
||||
return SharedPreferences.getInstance()
|
||||
@@ -232,10 +269,7 @@ class SharedPrefUtils {
|
||||
return firstName!;
|
||||
}
|
||||
|
||||
static Future<String> getLastName() async {
|
||||
final sp = await SharedPreferences.getInstance();
|
||||
return sp.getString(LAST_NAME) ?? "";
|
||||
}
|
||||
|
||||
|
||||
static Future<String> getEmail() async {
|
||||
final sp = await SharedPreferences.getInstance();
|
||||
@@ -247,11 +281,6 @@ class SharedPrefUtils {
|
||||
return sp.getString(PASSWORD) ?? "";
|
||||
}
|
||||
|
||||
static Future<String> getUsername() async {
|
||||
final sp = await SharedPreferences.getInstance();
|
||||
return sp.getString(USER_NAME) ?? "";
|
||||
}
|
||||
|
||||
static Future<bool> getRandomInstruction() async {
|
||||
final sp = await SharedPreferences.getInstance();
|
||||
return sp.getBool(INS_RANDOM) ?? true;
|
||||
|
||||
@@ -2,10 +2,12 @@ class APPSTRING {
|
||||
//title
|
||||
static const String enterYourMobileNumber = "Enter Your Mobile 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 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";
|
||||
|
||||
//hint
|
||||
@@ -13,11 +15,16 @@ class APPSTRING {
|
||||
static const String firstNameHint = "First Name";
|
||||
static const String lastNameHint = "last Name";
|
||||
|
||||
static const String emailHint = "Email-ID";
|
||||
static const String emailHint = "Email-ID";
|
||||
static const String addressHint = "Address";
|
||||
|
||||
//button
|
||||
static const String verifyButton = "Verify";
|
||||
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";
|
||||
}
|
||||
|
||||
@@ -6,6 +6,14 @@
|
||||
|
||||
#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) {
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#
|
||||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
file_selector_linux
|
||||
url_launcher_linux
|
||||
)
|
||||
|
||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||
|
||||
@@ -6,17 +6,21 @@ import FlutterMacOS
|
||||
import Foundation
|
||||
|
||||
import connectivity_plus
|
||||
import file_selector_macos
|
||||
import geolocator_apple
|
||||
import package_info_plus
|
||||
import path_provider_foundation
|
||||
import shared_preferences_foundation
|
||||
import sqflite
|
||||
import url_launcher_macos
|
||||
|
||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
|
||||
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
||||
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||
}
|
||||
|
||||
220
pubspec.lock
220
pubspec.lock
@@ -121,6 +121,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -209,6 +217,38 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -528,6 +568,70 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -548,18 +652,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker
|
||||
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
|
||||
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "10.0.4"
|
||||
version: "10.0.5"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_flutter_testing
|
||||
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
|
||||
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.3"
|
||||
version: "3.0.5"
|
||||
leak_tracker_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -604,10 +708,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
|
||||
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.8.0"
|
||||
version: "0.11.1"
|
||||
material_design_icons_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -620,10 +724,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
|
||||
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
||||
url: "https://pub.dev"
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -864,6 +976,22 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@@ -953,10 +1081,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
|
||||
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.0"
|
||||
version: "0.7.2"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -965,6 +1093,70 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1009,10 +1201,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
|
||||
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "14.2.1"
|
||||
version: "14.2.5"
|
||||
web:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1046,5 +1238,5 @@ packages:
|
||||
source: hosted
|
||||
version: "6.5.0"
|
||||
sdks:
|
||||
dart: ">=3.4.4 <4.0.0"
|
||||
flutter: ">=3.22.0"
|
||||
dart: ">=3.5.0 <4.0.0"
|
||||
flutter: ">=3.24.0"
|
||||
|
||||
@@ -31,6 +31,8 @@ dependencies:
|
||||
google_api_headers:
|
||||
fluttertoast:
|
||||
flutter_rating_stars: ^1.1.0
|
||||
url_launcher: ^6.3.1
|
||||
skeletonizer: ^1.4.3
|
||||
|
||||
|
||||
|
||||
@@ -61,7 +63,8 @@ dependencies:
|
||||
|
||||
animations: ^2.0.1
|
||||
animation_list: ^3.1.0
|
||||
|
||||
image_picker: any
|
||||
shimmer: ^3.0.0
|
||||
|
||||
|
||||
dev_dependencies:
|
||||
|
||||
@@ -7,11 +7,17 @@
|
||||
#include "generated_plugin_registrant.h"
|
||||
|
||||
#include <connectivity_plus/connectivity_plus_windows_plugin.h>
|
||||
#include <file_selector_windows/file_selector_windows.h>
|
||||
#include <geolocator_windows/geolocator_windows.h>
|
||||
#include <url_launcher_windows/url_launcher_windows.h>
|
||||
|
||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||
ConnectivityPlusWindowsPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
|
||||
FileSelectorWindowsRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("FileSelectorWindows"));
|
||||
GeolocatorWindowsRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("GeolocatorWindows"));
|
||||
UrlLauncherWindowsRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
||||
}
|
||||
|
||||
@@ -4,7 +4,9 @@
|
||||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
connectivity_plus
|
||||
file_selector_windows
|
||||
geolocator_windows
|
||||
url_launcher_windows
|
||||
)
|
||||
|
||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||
|
||||
Reference in New Issue
Block a user