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:fluttertoast/fluttertoast_web.dart';
|
||||||
import 'package:geolocator_web/geolocator_web.dart';
|
import 'package:geolocator_web/geolocator_web.dart';
|
||||||
import 'package:google_maps_flutter_web/google_maps_flutter_web.dart';
|
import 'package:google_maps_flutter_web/google_maps_flutter_web.dart';
|
||||||
|
import 'package:image_picker_for_web/image_picker_for_web.dart';
|
||||||
import 'package:package_info_plus/src/package_info_plus_web.dart';
|
import 'package:package_info_plus/src/package_info_plus_web.dart';
|
||||||
import 'package:shared_preferences_web/shared_preferences_web.dart';
|
import 'package:shared_preferences_web/shared_preferences_web.dart';
|
||||||
|
import 'package:url_launcher_web/url_launcher_web.dart';
|
||||||
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
|
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
|
||||||
|
|
||||||
void registerPlugins([final Registrar? pluginRegistrar]) {
|
void registerPlugins([final Registrar? pluginRegistrar]) {
|
||||||
@@ -20,7 +22,9 @@ void registerPlugins([final Registrar? pluginRegistrar]) {
|
|||||||
FluttertoastWebPlugin.registerWith(registrar);
|
FluttertoastWebPlugin.registerWith(registrar);
|
||||||
GeolocatorPlugin.registerWith(registrar);
|
GeolocatorPlugin.registerWith(registrar);
|
||||||
GoogleMapsPlugin.registerWith(registrar);
|
GoogleMapsPlugin.registerWith(registrar);
|
||||||
|
ImagePickerPlugin.registerWith(registrar);
|
||||||
PackageInfoPlusWebPlugin.registerWith(registrar);
|
PackageInfoPlusWebPlugin.registerWith(registrar);
|
||||||
SharedPreferencesPlugin.registerWith(registrar);
|
SharedPreferencesPlugin.registerWith(registrar);
|
||||||
|
UrlLauncherPlugin.registerWith(registrar);
|
||||||
registrar.registerMessageHandler();
|
registrar.registerMessageHandler();
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,533 +1,629 @@
|
|||||||
animation_list
|
animation_list
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/animation_list-3.1.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/animation_list-3.1.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/animation_list-3.1.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/animation_list-3.1.0/lib/
|
||||||
animations
|
animations
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/animations-2.0.11/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/animations-2.0.11/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/animations-2.0.11/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/animations-2.0.11/lib/
|
||||||
args
|
args
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/args-2.6.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/args-2.6.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/args-2.6.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/args-2.6.0/lib/
|
||||||
async
|
async
|
||||||
2.18
|
2.18
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/async-2.11.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/async-2.11.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/async-2.11.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/async-2.11.0/lib/
|
||||||
back_button_interceptor
|
back_button_interceptor
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/back_button_interceptor-8.0.3/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/back_button_interceptor-8.0.3/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/back_button_interceptor-8.0.3/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/back_button_interceptor-8.0.3/lib/
|
||||||
boolean_selector
|
boolean_selector
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/lib/
|
||||||
cached_network_image
|
cached_network_image
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/lib/
|
||||||
cached_network_image_platform_interface
|
cached_network_image_platform_interface
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/lib/
|
||||||
cached_network_image_web
|
cached_network_image_web
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image_web-1.2.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_web-1.2.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cached_network_image_web-1.2.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cached_network_image_web-1.2.0/lib/
|
||||||
carousel_slider
|
carousel_slider
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/carousel_slider-5.0.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/carousel_slider-5.0.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/carousel_slider-5.0.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/carousel_slider-5.0.0/lib/
|
||||||
characters
|
characters
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/characters-1.3.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/characters-1.3.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/characters-1.3.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/characters-1.3.0/lib/
|
||||||
clock
|
clock
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/clock-1.1.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/clock-1.1.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/clock-1.1.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/clock-1.1.1/lib/
|
||||||
collection
|
collection
|
||||||
2.18
|
2.18
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/collection-1.18.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/collection-1.18.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/
|
||||||
connectivity_plus
|
connectivity_plus
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/lib/
|
||||||
connectivity_plus_platform_interface
|
connectivity_plus_platform_interface
|
||||||
2.18
|
2.18
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus_platform_interface-2.0.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus_platform_interface-2.0.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus_platform_interface-2.0.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus_platform_interface-2.0.1/lib/
|
||||||
|
cross_file
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cross_file-0.3.4+2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cross_file-0.3.4+2/lib/
|
||||||
crypto
|
crypto
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/crypto-3.0.6/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/crypto-3.0.6/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/crypto-3.0.6/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/crypto-3.0.6/lib/
|
||||||
csslib
|
csslib
|
||||||
3.1
|
3.1
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/csslib-1.0.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/csslib-1.0.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/csslib-1.0.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/csslib-1.0.2/lib/
|
||||||
cupertino_icons
|
cupertino_icons
|
||||||
3.1
|
3.1
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/lib/
|
||||||
dbus
|
dbus
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dbus-0.7.11/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dbus-0.7.11/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dbus-0.7.11/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dbus-0.7.11/lib/
|
||||||
dio
|
dio
|
||||||
2.18
|
2.18
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dio-5.7.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dio-5.7.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dio-5.7.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dio-5.7.0/lib/
|
||||||
dio_web_adapter
|
dio_web_adapter
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0/lib/
|
||||||
dots_indicator
|
dots_indicator
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dots_indicator-3.0.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dots_indicator-3.0.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dots_indicator-3.0.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dots_indicator-3.0.0/lib/
|
||||||
dotted_border
|
dotted_border
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dotted_border-2.1.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dotted_border-2.1.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/dotted_border-2.1.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/dotted_border-2.1.0/lib/
|
||||||
fake_async
|
fake_async
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fake_async-1.3.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/fake_async-1.3.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fake_async-1.3.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/fake_async-1.3.1/lib/
|
||||||
ffi
|
ffi
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/ffi-2.1.3/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/ffi-2.1.3/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/ffi-2.1.3/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/ffi-2.1.3/lib/
|
||||||
file
|
file
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/file-7.0.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file-7.0.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/file-7.0.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file-7.0.1/lib/
|
||||||
|
file_selector_linux
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/lib/
|
||||||
|
file_selector_macos
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+2/lib/
|
||||||
|
file_selector_platform_interface
|
||||||
|
3.0
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_platform_interface-2.6.2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_platform_interface-2.6.2/lib/
|
||||||
|
file_selector_windows
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+3/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+3/lib/
|
||||||
fixnum
|
fixnum
|
||||||
3.1
|
3.1
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fixnum-1.1.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/fixnum-1.1.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fixnum-1.1.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/fixnum-1.1.1/lib/
|
||||||
flutter_animate
|
flutter_animate
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_animate-4.5.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_animate-4.5.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_animate-4.5.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_animate-4.5.2/lib/
|
||||||
flutter_cache_manager
|
flutter_cache_manager
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/lib/
|
||||||
flutter_google_places
|
flutter_google_places
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_google_places-0.3.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_google_places-0.3.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_google_places-0.3.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_google_places-0.3.0/lib/
|
||||||
flutter_lints
|
flutter_lints
|
||||||
3.1
|
3.1
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_lints-3.0.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_lints-3.0.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_lints-3.0.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_lints-3.0.2/lib/
|
||||||
flutter_plugin_android_lifecycle
|
flutter_plugin_android_lifecycle
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/lib/
|
||||||
flutter_rating_stars
|
flutter_rating_stars
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_rating_stars-1.1.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_rating_stars-1.1.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_rating_stars-1.1.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_rating_stars-1.1.0/lib/
|
||||||
flutter_screenutil
|
flutter_screenutil
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3/lib/
|
||||||
flutter_shaders
|
flutter_shaders
|
||||||
2.19
|
2.19
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_shaders-0.1.3/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_shaders-0.1.3/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_shaders-0.1.3/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_shaders-0.1.3/lib/
|
||||||
flutter_svg
|
flutter_svg
|
||||||
2.19
|
2.19
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_svg-2.0.9/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_svg-2.0.9/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_svg-2.0.9/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_svg-2.0.9/lib/
|
||||||
flutter_toggle_tab
|
flutter_toggle_tab
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_toggle_tab-1.5.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_toggle_tab-1.5.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_toggle_tab-1.5.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/flutter_toggle_tab-1.5.1/lib/
|
||||||
fluttertoast
|
fluttertoast
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/lib/
|
||||||
fpdart
|
fpdart
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fpdart-1.1.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/fpdart-1.1.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/fpdart-1.1.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/fpdart-1.1.1/lib/
|
||||||
gap
|
gap
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/gap-3.0.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/gap-3.0.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/gap-3.0.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/gap-3.0.1/lib/
|
||||||
geocoding
|
geocoding
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding-3.0.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding-3.0.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding-3.0.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding-3.0.0/lib/
|
||||||
geocoding_android
|
geocoding_android
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/lib/
|
||||||
geocoding_ios
|
geocoding_ios
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/lib/
|
||||||
geocoding_platform_interface
|
geocoding_platform_interface
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_platform_interface-3.2.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_platform_interface-3.2.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_platform_interface-3.2.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geocoding_platform_interface-3.2.0/lib/
|
||||||
geolocator
|
geolocator
|
||||||
2.15
|
2.15
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator-13.0.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator-13.0.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator-13.0.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator-13.0.2/lib/
|
||||||
geolocator_android
|
geolocator_android
|
||||||
2.15
|
2.15
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/lib/
|
||||||
geolocator_apple
|
geolocator_apple
|
||||||
2.15
|
2.15
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/lib/
|
||||||
geolocator_platform_interface
|
geolocator_platform_interface
|
||||||
2.15
|
2.15
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_platform_interface-4.2.4/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_platform_interface-4.2.4/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_platform_interface-4.2.4/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_platform_interface-4.2.4/lib/
|
||||||
geolocator_web
|
geolocator_web
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/lib/
|
||||||
geolocator_windows
|
geolocator_windows
|
||||||
2.15
|
2.15
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/lib/
|
||||||
get_it
|
get_it
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/get_it-8.0.3/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/get_it-8.0.3/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/get_it-8.0.3/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/get_it-8.0.3/lib/
|
||||||
go_router
|
go_router
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/go_router-14.7.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/go_router-14.7.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/go_router-14.7.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/go_router-14.7.1/lib/
|
||||||
google_api_headers
|
google_api_headers
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/lib/
|
||||||
google_fonts
|
google_fonts
|
||||||
2.14
|
2.14
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_fonts-4.0.4/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_fonts-4.0.4/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_fonts-4.0.4/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_fonts-4.0.4/lib/
|
||||||
google_maps
|
google_maps
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps-8.1.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps-8.1.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps-8.1.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps-8.1.1/lib/
|
||||||
google_maps_flutter
|
google_maps_flutter
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/lib/
|
||||||
google_maps_flutter_android
|
google_maps_flutter_android
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/lib/
|
||||||
google_maps_flutter_ios
|
google_maps_flutter_ios
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/lib/
|
||||||
google_maps_flutter_platform_interface
|
google_maps_flutter_platform_interface
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_platform_interface-2.9.5/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_platform_interface-2.9.5/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_platform_interface-2.9.5/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_platform_interface-2.9.5/lib/
|
||||||
google_maps_flutter_web
|
google_maps_flutter_web
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/lib/
|
||||||
google_maps_webservice
|
google_maps_webservice
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_webservice-0.0.20-nullsafety.5/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_webservice-0.0.20-nullsafety.5/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_webservice-0.0.20-nullsafety.5/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/google_maps_webservice-0.0.20-nullsafety.5/lib/
|
||||||
html
|
html
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/html-0.15.5/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/html-0.15.5/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/html-0.15.5/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/html-0.15.5/lib/
|
||||||
http
|
http
|
||||||
2.19
|
2.19
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/http-0.13.6/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/http-0.13.6/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/http-0.13.6/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/http-0.13.6/lib/
|
||||||
http_parser
|
http_parser
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/http_parser-4.0.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/http_parser-4.0.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/http_parser-4.0.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/http_parser-4.0.2/lib/
|
||||||
|
image_picker
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker-1.1.2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker-1.1.2/lib/
|
||||||
|
image_picker_android
|
||||||
|
3.5
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+20/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+20/lib/
|
||||||
|
image_picker_for_web
|
||||||
|
3.4
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/lib/
|
||||||
|
image_picker_ios
|
||||||
|
3.4
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/lib/
|
||||||
|
image_picker_linux
|
||||||
|
2.19
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/lib/
|
||||||
|
image_picker_macos
|
||||||
|
3.4
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/lib/
|
||||||
|
image_picker_platform_interface
|
||||||
|
3.4
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_platform_interface-2.10.1/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_platform_interface-2.10.1/lib/
|
||||||
|
image_picker_windows
|
||||||
|
2.19
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/lib/
|
||||||
intl
|
intl
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/intl-0.19.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/intl-0.19.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/intl-0.19.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/intl-0.19.0/lib/
|
||||||
json_annotation
|
json_annotation
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/lib/
|
||||||
leak_tracker
|
leak_tracker
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker-10.0.4/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker-10.0.4/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/
|
||||||
leak_tracker_flutter_testing
|
leak_tracker_flutter_testing
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.3/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.3/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/
|
||||||
leak_tracker_testing
|
leak_tracker_testing
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib/
|
||||||
lints
|
lints
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/lints-3.0.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/lints-3.0.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/lints-3.0.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/lints-3.0.0/lib/
|
||||||
loader_overlay
|
loader_overlay
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/loader_overlay-4.0.4+1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/loader_overlay-4.0.4+1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/loader_overlay-4.0.4+1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/loader_overlay-4.0.4+1/lib/
|
||||||
logging
|
logging
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/logging-1.3.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/logging-1.3.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/logging-1.3.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/logging-1.3.0/lib/
|
||||||
matcher
|
matcher
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/lib/
|
||||||
material_color_utilities
|
material_color_utilities
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/material_color_utilities-0.8.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/material_color_utilities-0.8.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1/lib/
|
||||||
material_design_icons_flutter
|
material_design_icons_flutter
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/material_design_icons_flutter-7.0.7296/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/material_design_icons_flutter-7.0.7296/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/material_design_icons_flutter-7.0.7296/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/material_design_icons_flutter-7.0.7296/lib/
|
||||||
meta
|
meta
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/meta-1.12.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/meta-1.15.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/meta-1.12.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/meta-1.15.0/lib/
|
||||||
|
mime
|
||||||
|
3.2
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/mime-2.0.0/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/mime-2.0.0/lib/
|
||||||
nested
|
nested
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/nested-1.0.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/nested-1.0.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/nested-1.0.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/nested-1.0.0/lib/
|
||||||
nm
|
nm
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/nm-0.5.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/nm-0.5.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/nm-0.5.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/nm-0.5.0/lib/
|
||||||
octo_image
|
octo_image
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/octo_image-2.1.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/octo_image-2.1.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/octo_image-2.1.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/octo_image-2.1.0/lib/
|
||||||
otp_text_field
|
otp_text_field
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/otp_text_field-1.1.3/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/otp_text_field-1.1.3/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/otp_text_field-1.1.3/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/otp_text_field-1.1.3/lib/
|
||||||
package_info_plus
|
package_info_plus
|
||||||
2.18
|
2.18
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/lib/
|
||||||
package_info_plus_platform_interface
|
package_info_plus_platform_interface
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-2.0.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-2.0.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-2.0.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-2.0.1/lib/
|
||||||
path
|
path
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path-1.9.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path-1.9.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path-1.9.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path-1.9.0/lib/
|
||||||
path_drawing
|
path_drawing
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_drawing-1.0.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_drawing-1.0.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_drawing-1.0.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_drawing-1.0.1/lib/
|
||||||
path_parsing
|
path_parsing
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_parsing-1.1.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_parsing-1.1.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_parsing-1.1.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_parsing-1.1.0/lib/
|
||||||
path_provider
|
path_provider
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider-2.1.5/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider-2.1.5/lib/
|
||||||
path_provider_android
|
path_provider_android
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/lib/
|
||||||
path_provider_foundation
|
path_provider_foundation
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/lib/
|
||||||
path_provider_linux
|
path_provider_linux
|
||||||
2.19
|
2.19
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/lib/
|
||||||
path_provider_platform_interface
|
path_provider_platform_interface
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/lib/
|
||||||
path_provider_windows
|
path_provider_windows
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/lib/
|
||||||
petitparser
|
petitparser
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/petitparser-6.0.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/petitparser-6.0.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/petitparser-6.0.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/petitparser-6.0.2/lib/
|
||||||
platform
|
platform
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/platform-3.1.6/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/platform-3.1.6/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/platform-3.1.6/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/platform-3.1.6/lib/
|
||||||
plugin_platform_interface
|
plugin_platform_interface
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8/lib/
|
||||||
pretty_dio_logger
|
pretty_dio_logger
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/pretty_dio_logger-1.4.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/pretty_dio_logger-1.4.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/pretty_dio_logger-1.4.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/pretty_dio_logger-1.4.0/lib/
|
||||||
provider
|
provider
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/provider-6.1.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/provider-6.1.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/provider-6.1.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/provider-6.1.2/lib/
|
||||||
readmore
|
readmore
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/readmore-3.0.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/readmore-3.0.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/readmore-3.0.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/readmore-3.0.0/lib/
|
||||||
rxdart
|
rxdart
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/rxdart-0.26.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/rxdart-0.26.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/rxdart-0.26.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/rxdart-0.26.0/lib/
|
||||||
sanitize_html
|
sanitize_html
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sanitize_html-2.1.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/sanitize_html-2.1.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sanitize_html-2.1.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/sanitize_html-2.1.0/lib/
|
||||||
shared_preferences
|
shared_preferences
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/lib/
|
||||||
shared_preferences_android
|
shared_preferences_android
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/lib/
|
||||||
shared_preferences_foundation
|
shared_preferences_foundation
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/lib/
|
||||||
shared_preferences_linux
|
shared_preferences_linux
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/lib/
|
||||||
shared_preferences_platform_interface
|
shared_preferences_platform_interface
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/lib/
|
||||||
shared_preferences_web
|
shared_preferences_web
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/lib/
|
||||||
shared_preferences_windows
|
shared_preferences_windows
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/lib/
|
||||||
|
shimmer
|
||||||
|
2.17
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shimmer-3.0.0/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/shimmer-3.0.0/lib/
|
||||||
|
skeletonizer
|
||||||
|
3.0
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/skeletonizer-1.4.3/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/skeletonizer-1.4.3/lib/
|
||||||
source_span
|
source_span
|
||||||
2.18
|
2.18
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/source_span-1.10.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/source_span-1.10.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/source_span-1.10.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/source_span-1.10.0/lib/
|
||||||
sprintf
|
sprintf
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sprintf-7.0.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/sprintf-7.0.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sprintf-7.0.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/sprintf-7.0.0/lib/
|
||||||
sqflite
|
sqflite
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/lib/
|
||||||
sqflite_common
|
sqflite_common
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite_common-2.5.4/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite_common-2.5.4/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite_common-2.5.4/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/sqflite_common-2.5.4/lib/
|
||||||
stack_trace
|
stack_trace
|
||||||
2.18
|
2.18
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/
|
||||||
stream_channel
|
stream_channel
|
||||||
2.19
|
2.19
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/lib/
|
||||||
stream_transform
|
stream_transform
|
||||||
3.1
|
3.1
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stream_transform-2.1.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/stream_transform-2.1.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/stream_transform-2.1.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/stream_transform-2.1.1/lib/
|
||||||
string_scanner
|
string_scanner
|
||||||
2.18
|
2.18
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/
|
||||||
synchronized
|
synchronized
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/lib/
|
||||||
term_glyph
|
term_glyph
|
||||||
2.12
|
2.12
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/
|
||||||
test_api
|
test_api
|
||||||
3.0
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/test_api-0.7.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/test_api-0.7.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/test_api-0.7.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/
|
||||||
typed_data
|
typed_data
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/typed_data-1.3.2/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/typed_data-1.3.2/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/typed_data-1.3.2/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/typed_data-1.3.2/lib/
|
||||||
|
url_launcher
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher-6.3.1/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher-6.3.1/lib/
|
||||||
|
url_launcher_android
|
||||||
|
3.5
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.14/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.14/lib/
|
||||||
|
url_launcher_ios
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.2/lib/
|
||||||
|
url_launcher_linux
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/lib/
|
||||||
|
url_launcher_macos
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_macos-3.2.2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_macos-3.2.2/lib/
|
||||||
|
url_launcher_platform_interface
|
||||||
|
3.1
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_platform_interface-2.3.2/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_platform_interface-2.3.2/lib/
|
||||||
|
url_launcher_web
|
||||||
|
3.3
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_web-2.3.3/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_web-2.3.3/lib/
|
||||||
|
url_launcher_windows
|
||||||
|
3.4
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/
|
||||||
|
file:///Users/apple/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/lib/
|
||||||
uuid
|
uuid
|
||||||
3.0
|
3.0
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/uuid-4.5.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/uuid-4.5.1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/uuid-4.5.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/uuid-4.5.1/lib/
|
||||||
vector_graphics
|
vector_graphics
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics-1.1.10+1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics-1.1.10+1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics-1.1.10+1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics-1.1.10+1/lib/
|
||||||
vector_graphics_codec
|
vector_graphics_codec
|
||||||
2.17
|
2.17
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.10+1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.10+1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.10+1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.10+1/lib/
|
||||||
vector_graphics_compiler
|
vector_graphics_compiler
|
||||||
2.19
|
2.19
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.10+1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.10+1/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.10+1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.10+1/lib/
|
||||||
vector_math
|
vector_math
|
||||||
2.14
|
2.14
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_math-2.1.4/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_math-2.1.4/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vector_math-2.1.4/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vector_math-2.1.4/lib/
|
||||||
vm_service
|
vm_service
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vm_service-14.2.1/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vm_service-14.2.5/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/vm_service-14.2.1/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/vm_service-14.2.5/lib/
|
||||||
web
|
web
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/web-1.1.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/web-1.1.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/web-1.1.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/web-1.1.0/lib/
|
||||||
win32
|
win32
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/win32-5.5.4/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/win32-5.5.4/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/win32-5.5.4/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/win32-5.5.4/lib/
|
||||||
xdg_directories
|
xdg_directories
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/lib/
|
||||||
xml
|
xml
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/xml-6.5.0/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/xml-6.5.0/
|
||||||
file:///Users/rajeevsingh/.pub-cache/hosted/pub.dev/xml-6.5.0/lib/
|
file:///Users/apple/.pub-cache/hosted/pub.dev/xml-6.5.0/lib/
|
||||||
grocery_app
|
grocery_app
|
||||||
3.4
|
3.4
|
||||||
file:///Users/rajeevsingh/Documents/FlutterProject/freelanceing/groceryApp/
|
file:///Users/apple/Documents/Allflutter%20/freelancing/groceryApp/
|
||||||
file:///Users/rajeevsingh/Documents/FlutterProject/freelanceing/groceryApp/lib/
|
file:///Users/apple/Documents/Allflutter%20/freelancing/groceryApp/lib/
|
||||||
sky_engine
|
sky_engine
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/bin/cache/pkg/sky_engine/
|
file:///Users/apple/Documents/development/flutter/bin/cache/pkg/sky_engine/
|
||||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/bin/cache/pkg/sky_engine/lib/
|
file:///Users/apple/Documents/development/flutter/bin/cache/pkg/sky_engine/lib/
|
||||||
flutter
|
flutter
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter/
|
file:///Users/apple/Documents/development/flutter/packages/flutter/
|
||||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter/lib/
|
file:///Users/apple/Documents/development/flutter/packages/flutter/lib/
|
||||||
flutter_test
|
flutter_test
|
||||||
3.3
|
3.3
|
||||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_test/
|
file:///Users/apple/Documents/development/flutter/packages/flutter_test/
|
||||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_test/lib/
|
file:///Users/apple/Documents/development/flutter/packages/flutter_test/lib/
|
||||||
flutter_web_plugins
|
flutter_web_plugins
|
||||||
3.2
|
3.2
|
||||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_web_plugins/
|
file:///Users/apple/Documents/development/flutter/packages/flutter_web_plugins/
|
||||||
file:///Users/rajeevsingh/Documents/allSoftwares/flutter/packages/flutter_web_plugins/lib/
|
file:///Users/apple/Documents/development/flutter/packages/flutter_web_plugins/lib/
|
||||||
2
|
2
|
||||||
|
|||||||
@@ -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.
|
# This is a generated file; do not edit or check into version control.
|
||||||
connectivity_plus=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/
|
connectivity_plus=/Users/apple/.pub-cache/hosted/pub.dev/connectivity_plus-6.1.2/
|
||||||
flutter_plugin_android_lifecycle=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/
|
file_selector_linux=/Users/apple/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/
|
||||||
fluttertoast=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/
|
file_selector_macos=/Users/apple/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+2/
|
||||||
geocoding=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding-3.0.0/
|
file_selector_windows=/Users/apple/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+3/
|
||||||
geocoding_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/
|
flutter_plugin_android_lifecycle=/Users/apple/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.22/
|
||||||
geocoding_ios=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/
|
fluttertoast=/Users/apple/.pub-cache/hosted/pub.dev/fluttertoast-8.2.10/
|
||||||
geolocator=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator-13.0.2/
|
geocoding=/Users/apple/.pub-cache/hosted/pub.dev/geocoding-3.0.0/
|
||||||
geolocator_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/
|
geocoding_android=/Users/apple/.pub-cache/hosted/pub.dev/geocoding_android-3.3.1/
|
||||||
geolocator_apple=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/
|
geocoding_ios=/Users/apple/.pub-cache/hosted/pub.dev/geocoding_ios-3.0.1/
|
||||||
geolocator_web=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/
|
geolocator=/Users/apple/.pub-cache/hosted/pub.dev/geolocator-13.0.2/
|
||||||
geolocator_windows=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/
|
geolocator_android=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_android-4.6.1/
|
||||||
google_api_headers=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/
|
geolocator_apple=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.8+1/
|
||||||
google_maps_flutter=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/
|
geolocator_web=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_web-4.1.1/
|
||||||
google_maps_flutter_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/
|
geolocator_windows=/Users/apple/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.3/
|
||||||
google_maps_flutter_ios=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/
|
google_api_headers=/Users/apple/.pub-cache/hosted/pub.dev/google_api_headers-1.6.0/
|
||||||
google_maps_flutter_web=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/
|
google_maps_flutter=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter-2.10.0/
|
||||||
package_info_plus=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/
|
google_maps_flutter_android=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.14.7/
|
||||||
path_provider=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
google_maps_flutter_ios=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.13.2/
|
||||||
path_provider_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/
|
google_maps_flutter_web=/Users/apple/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.10/
|
||||||
path_provider_foundation=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
|
image_picker=/Users/apple/.pub-cache/hosted/pub.dev/image_picker-1.1.2/
|
||||||
path_provider_linux=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
|
image_picker_android=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+20/
|
||||||
path_provider_windows=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/
|
image_picker_for_web=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/
|
||||||
shared_preferences=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/
|
image_picker_ios=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/
|
||||||
shared_preferences_android=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/
|
image_picker_linux=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/
|
||||||
shared_preferences_foundation=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/
|
image_picker_macos=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/
|
||||||
shared_preferences_linux=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/
|
image_picker_windows=/Users/apple/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/
|
||||||
shared_preferences_web=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/
|
package_info_plus=/Users/apple/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/
|
||||||
shared_preferences_windows=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/
|
path_provider=/Users/apple/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
||||||
sqflite=/Users/rajeevsingh/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/
|
path_provider_android=/Users/apple/.pub-cache/hosted/pub.dev/path_provider_android-2.2.10/
|
||||||
|
path_provider_foundation=/Users/apple/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
|
||||||
|
path_provider_linux=/Users/apple/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
|
||||||
|
path_provider_windows=/Users/apple/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/
|
||||||
|
shared_preferences=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences-2.3.3/
|
||||||
|
shared_preferences_android=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_android-2.3.2/
|
||||||
|
shared_preferences_foundation=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/
|
||||||
|
shared_preferences_linux=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/
|
||||||
|
shared_preferences_web=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.2/
|
||||||
|
shared_preferences_windows=/Users/apple/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/
|
||||||
|
sqflite=/Users/apple/.pub-cache/hosted/pub.dev/sqflite-2.3.3+1/
|
||||||
|
url_launcher=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher-6.3.1/
|
||||||
|
url_launcher_android=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.14/
|
||||||
|
url_launcher_ios=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.2/
|
||||||
|
url_launcher_linux=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/
|
||||||
|
url_launcher_macos=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_macos-3.2.2/
|
||||||
|
url_launcher_web=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_web-2.3.3/
|
||||||
|
url_launcher_windows=/Users/apple/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -7,9 +7,20 @@
|
|||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
|
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
|
||||||
|
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
|
||||||
|
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.CAMERA"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
|
android:requestLegacyExternalStorage="true"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:label="grocery_app"
|
android:label="grocery_app"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
@@ -40,6 +51,8 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<meta-data android:name="com.google.android.geo.API_KEY"
|
<meta-data android:name="com.google.android.geo.API_KEY"
|
||||||
android:value="AIzaSyAi3_Dls63iGs7Nccgdm-4FkS0rhT03-4U"/>
|
android:value="AIzaSyAi3_Dls63iGs7Nccgdm-4FkS0rhT03-4U"/>
|
||||||
<!-- Don't delete the meta-data below.
|
<!-- Don't delete the meta-data below.
|
||||||
@@ -59,4 +72,22 @@
|
|||||||
<data android:mimeType="text/plain"/>
|
<data android:mimeType="text/plain"/>
|
||||||
</intent>
|
</intent>
|
||||||
</queries>
|
</queries>
|
||||||
|
|
||||||
|
<!-- Provide required visibility configuration for API level 30 and above -->
|
||||||
|
<queries>
|
||||||
|
<!-- If your app checks for SMS support -->
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<data android:scheme="sms" />
|
||||||
|
</intent>
|
||||||
|
<!-- If your app checks for call support -->
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<data android:scheme="tel" />
|
||||||
|
</intent>
|
||||||
|
<!-- If your application checks for inAppBrowserView launch mode support -->
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.support.customtabs.action.CustomTabsService" />
|
||||||
|
</intent>
|
||||||
|
</queries>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|||||||
import 'package:grocery_app/src/core/network_services/service_locator.dart';
|
import 'package:grocery_app/src/core/network_services/service_locator.dart';
|
||||||
import 'package:grocery_app/src/core/routes/routes.dart';
|
import 'package:grocery_app/src/core/routes/routes.dart';
|
||||||
import 'package:grocery_app/src/logic/provider/addTocart_provider.dart';
|
import 'package:grocery_app/src/logic/provider/addTocart_provider.dart';
|
||||||
|
import 'package:grocery_app/src/logic/provider/address_provider.dart';
|
||||||
import 'package:grocery_app/src/logic/provider/auth_provider.dart';
|
import 'package:grocery_app/src/logic/provider/auth_provider.dart';
|
||||||
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
||||||
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
||||||
|
import 'package:grocery_app/src/logic/provider/profile_provider.dart';
|
||||||
import 'package:grocery_app/src/ui/splash/splash_screen.dart';
|
import 'package:grocery_app/src/ui/splash/splash_screen.dart';
|
||||||
import 'package:grocery_app/utils/constants/color_constant.dart';
|
import 'package:grocery_app/utils/constants/color_constant.dart';
|
||||||
import 'package:grocery_app/utils/constants/string_constant.dart';
|
import 'package:grocery_app/utils/constants/string_constant.dart';
|
||||||
@@ -30,21 +32,23 @@ class MyApplication extends StatelessWidget {
|
|||||||
splitScreenMode: true,
|
splitScreenMode: true,
|
||||||
builder: (context, child) => GlobalLoaderOverlay(
|
builder: (context, child) => GlobalLoaderOverlay(
|
||||||
overlayColor: APPCOLOR.whiteFBFEFB.withOpacity(0.5),
|
overlayColor: APPCOLOR.whiteFBFEFB.withOpacity(0.5),
|
||||||
|
|
||||||
useDefaultLoading: false,
|
useDefaultLoading: false,
|
||||||
// overlayWidgetBuilder: (progress) => const GlobalLoader(),
|
// overlayWidgetBuilder: (progress) => const GlobalLoader(),
|
||||||
child: MultiProvider(
|
child: MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
ChangeNotifierProvider(create: (_) => AuthProvider()),
|
ChangeNotifierProvider(create: (_) => AuthProvider()),
|
||||||
ChangeNotifierProvider(create: (_) => ProductProvider()),
|
ChangeNotifierProvider(create: (_) => ProductProvider()),
|
||||||
ChangeNotifierProvider(create: (_) => AddtocartProvider()),
|
ChangeNotifierProvider(create: (_) => AddtocartProvider()),
|
||||||
ChangeNotifierProvider(create: (_) => BottomNavProvider()),
|
ChangeNotifierProvider(create: (_) => BottomNavProvider()),
|
||||||
// ChangeNotifierProvider(create: (_) => HomeProvider()),
|
ChangeNotifierProvider(create: (_) => AddressProvider()),
|
||||||
|
ChangeNotifierProvider(create: (_) => ProfileProvider()),
|
||||||
],
|
],
|
||||||
child: MaterialApp.router(
|
child: MaterialApp.router(
|
||||||
routerConfig: MyRoutes.router,
|
routerConfig: MyRoutes.router,
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
theme: ThemeData(
|
theme: ThemeData(
|
||||||
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
|
colorScheme: ColorScheme.fromSeed(seedColor: Colors.lightGreen),
|
||||||
scaffoldBackgroundColor: Colors.white,
|
scaffoldBackgroundColor: Colors.white,
|
||||||
canvasColor: const Color.fromRGBO(255, 255, 255, 1),
|
canvasColor: const Color.fromRGBO(255, 255, 255, 1),
|
||||||
fontFamily: 'GoogleSans',
|
fontFamily: 'GoogleSans',
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ class NameTextField extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return
|
||||||
|
Container(
|
||||||
height: 60,
|
height: 60,
|
||||||
width: MediaQuery.sizeOf(context).width,
|
width: MediaQuery.sizeOf(context).width,
|
||||||
decoration: BoxDecoration(border: Border.all(color: APPCOLOR.lightGreen), borderRadius: BorderRadius.circular(15)),
|
decoration: BoxDecoration(border: Border.all(color: APPCOLOR.lightGreen), borderRadius: BorderRadius.circular(15)),
|
||||||
@@ -40,5 +41,7 @@ class NameTextField extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,8 +60,10 @@ class AppNetworkImage extends StatelessWidget {
|
|||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
placeholder: (context, url) {
|
placeholder: (context, url)
|
||||||
return Container(
|
{
|
||||||
|
return
|
||||||
|
Container(
|
||||||
width: width,
|
width: width,
|
||||||
height: height,
|
height: height,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@@ -76,6 +78,7 @@ class AppNetworkImage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
imageBuilder: (context, cIMage) {
|
imageBuilder: (context, cIMage) {
|
||||||
return Container(
|
return Container(
|
||||||
width: width,
|
width: width,
|
||||||
|
|||||||
@@ -1,33 +1,36 @@
|
|||||||
class APIURL {
|
class APIURL {
|
||||||
static const BASE_URL = "http://210.89.44.183:3333/xam/";
|
static const BASE_URL = "http://210.89.44.183:3333/xam/";
|
||||||
static const String sendOtp = "${BASE_URL}auth/send-otp/customer";
|
static const String sendOtp = "${BASE_URL}auth/send-otp/customer";
|
||||||
|
|
||||||
static const String verifyOtp = "${BASE_URL}auth/verify-otp/customer";
|
static const String verifyOtp = "${BASE_URL}auth/verify-otp/customer";
|
||||||
|
static const String loginOtp = "${BASE_URL}auth/login/customer";
|
||||||
static const String loginOtp = "${BASE_URL}auth/login/customer";
|
|
||||||
|
|
||||||
static const String login = "${BASE_URL}auth/login/vendor";
|
static const String login = "${BASE_URL}auth/login/vendor";
|
||||||
static const String customerRegister = "${BASE_URL}auth/register/customer";
|
static const String customerRegister = "${BASE_URL}auth/register/customer";
|
||||||
static const String getAllProduct = "${BASE_URL}products";
|
static const String getAllProduct = "${BASE_URL}products";
|
||||||
static const String getProductDetails = "${BASE_URL}products/";
|
static const String getProductDetails = "${BASE_URL}products/";
|
||||||
static const String getBanners = "${BASE_URL}banners";
|
static const String getBanners = "${BASE_URL}banners";
|
||||||
static const String customerLogOut = "${BASE_URL}auth/logout/customer";
|
static const String customerLogOut = "${BASE_URL}auth/logout/customer";
|
||||||
static const String getBestDealProduct = "${BASE_URL}products/best-deals";
|
static const String getBestDealProduct = "${BASE_URL}products/best-deals";
|
||||||
static const String getAllcategory = "${BASE_URL}categories";
|
static const String getAllcategory = "${BASE_URL}categories";
|
||||||
static const String addToWish = "${BASE_URL}carts/wishlist/items";
|
static const String addToWish = "${BASE_URL}carts/wishlist/items";
|
||||||
static const String deleteToWish = "${BASE_URL}carts/wishlist/items";
|
static const String deleteToWish = "${BASE_URL}carts/wishlist/items";
|
||||||
static const String addToCart = "${BASE_URL}carts/items";
|
static const String addToCart = "${BASE_URL}carts/items";
|
||||||
static const String gettAllWishList = "${BASE_URL}carts/wishlist";
|
static const String gettAllWishList = "${BASE_URL}carts/wishlist";
|
||||||
static const String similarProduct = "${BASE_URL}products/";
|
static const String similarProduct = "${BASE_URL}products/";
|
||||||
static const String getItemCards = "${BASE_URL}carts/current";
|
static const String getItemCards = "${BASE_URL}carts/current";
|
||||||
static const String checkPin = "${BASE_URL}pin-codes/check/";
|
static const String checkPin = "${BASE_URL}pin-codes/check/";
|
||||||
static const String deleteItem = "${BASE_URL}carts/items/";
|
static const String deleteItem = "${BASE_URL}carts/items/";
|
||||||
|
static const String userAddress = "${BASE_URL}user/addresses";
|
||||||
|
static const String addAddress = "${BASE_URL}user/addresses";
|
||||||
|
static const String getprofile = "${BASE_URL}user/profile/customer";
|
||||||
|
static const String refresh_token = "${BASE_URL}auth/refresh-token";
|
||||||
|
static const String uploadImage = "${BASE_URL}images/upload";
|
||||||
|
static const String updateProfile = "${BASE_URL}user/profile";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static const String updateStore = "${BASE_URL}stores/";
|
|
||||||
static const String forgetPassword = "${BASE_URL}auth/forgot-password/vendor";
|
static const String forgetPassword = "${BASE_URL}auth/forgot-password/vendor";
|
||||||
static const String verifyForgetPassword =
|
static const String verifyForgetPassword =
|
||||||
"${BASE_URL}auth/forgot-password-verify-otp/vendor";
|
"${BASE_URL}auth/forgot-password-verify-otp/vendor";
|
||||||
@@ -36,10 +39,10 @@ class APIURL {
|
|||||||
static const String getProduct = "${BASE_URL}products";
|
static const String getProduct = "${BASE_URL}products";
|
||||||
static const String getCategoryByLevel = "${BASE_URL}categories/by-level/1";
|
static const String getCategoryByLevel = "${BASE_URL}categories/by-level/1";
|
||||||
static const String getMe = "${BASE_URL}auth/me";
|
static const String getMe = "${BASE_URL}auth/me";
|
||||||
static const String refresh_token = "${BASE_URL}auth/refresh-token";
|
|
||||||
static const String createProduct = "${BASE_URL}products";
|
static const String createProduct = "${BASE_URL}products";
|
||||||
|
|
||||||
static const String uploadImage = "${BASE_URL}images/upload";
|
|
||||||
static const String deleteProduct = "${BASE_URL}products/";
|
static const String deleteProduct = "${BASE_URL}products/";
|
||||||
static const String updateProduct = "${BASE_URL}products/";
|
static const String updateProduct = "${BASE_URL}products/";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:grocery_app/src/data/allProduct_model.dart';
|
import 'package:grocery_app/src/data/allProduct_model.dart';
|
||||||
import 'package:grocery_app/src/ui/bottomnavigation/bottom_bar_widget.dart';
|
import 'package:grocery_app/src/ui/bottomnavigation/bottom_bar_widget.dart';
|
||||||
|
import 'package:grocery_app/src/ui/coupons/coupons_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/entername/enter_fullname_screen.dart';
|
import 'package:grocery_app/src/ui/entername/enter_fullname_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/fruitvegidetail/fruit_veggie_detail.dart';
|
import 'package:grocery_app/src/ui/fruitvegidetail/fruit_veggie_detail.dart';
|
||||||
import 'package:grocery_app/src/ui/login/login_screen.dart';
|
import 'package:grocery_app/src/ui/login/login_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/login/signup_screen.dart';
|
import 'package:grocery_app/src/ui/login/signup_screen.dart';
|
||||||
|
import 'package:grocery_app/src/ui/map/add_locations.dart';
|
||||||
import 'package:grocery_app/src/ui/onboarding/on_boarding_screen.dart';
|
import 'package:grocery_app/src/ui/onboarding/on_boarding_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/otp/login_otp.dart';
|
import 'package:grocery_app/src/ui/otp/login_otp.dart';
|
||||||
import 'package:grocery_app/src/ui/otp/otp_screen.dart';
|
import 'package:grocery_app/src/ui/otp/otp_screen.dart';
|
||||||
@@ -72,14 +74,16 @@ class MyRoutes {
|
|||||||
pageBuilder: (context, state) => const FruitVeggieDetail(),
|
pageBuilder: (context, state) => const FruitVeggieDetail(),
|
||||||
),
|
),
|
||||||
|
|
||||||
// animatedGoRoute(
|
animatedGoRoute(
|
||||||
// path: PRODUCTDETAILS,
|
path: COUPONSSCREEN,
|
||||||
// name: PRODUCTDETAILS,
|
name: COUPONSSCREEN,
|
||||||
// pageBuilder: (context, state)
|
pageBuilder: (context, state) => CouponsScreen(),
|
||||||
// {
|
),
|
||||||
// return const ProductDetails();
|
animatedGoRoute(
|
||||||
// }
|
path: ADDRESSS,
|
||||||
// ),
|
name: ADDRESSS,
|
||||||
|
pageBuilder: (context, state) => AddLocationAddress(),
|
||||||
|
),
|
||||||
|
|
||||||
animatedGoRoute(
|
animatedGoRoute(
|
||||||
path: PRODUCTDETAILS,
|
path: PRODUCTDETAILS,
|
||||||
@@ -219,44 +223,39 @@ class MyRoutes {
|
|||||||
static const FRUITVEGGIEDETAIL = "/FruitVeggieDetail";
|
static const FRUITVEGGIEDETAIL = "/FruitVeggieDetail";
|
||||||
static const PRODUCTDETAILS = "/productdetails";
|
static const PRODUCTDETAILS = "/productdetails";
|
||||||
static const LOGINOTPSCREEN = "/loginotpscreen";
|
static const LOGINOTPSCREEN = "/loginotpscreen";
|
||||||
|
static const COUPONSSCREEN = "/CouponsScreen";
|
||||||
|
static const ADDRESSS = "/address";
|
||||||
|
|
||||||
static const SELECTACCOUNT = "/selectAccount";
|
|
||||||
static const DASHBOARD = "/dashboard";
|
|
||||||
|
|
||||||
|
|
||||||
static const LOGIN = "/login";
|
static const LOGIN = "/login";
|
||||||
static const SIGNUP = "/signup";
|
static const SIGNUP = "/signup";
|
||||||
|
|
||||||
static const ONBOARDING = "/onboarding";
|
static const ONBOARDING = "/onboarding";
|
||||||
static const TERMANDCONDITIONS = "/termsandcondition";
|
|
||||||
static const SETUPBUSSINESS = "/setupbussiness";
|
|
||||||
static const CREATESTORE = "/createStore";
|
|
||||||
static const SUBMITSCREEN = "/submitscreen";
|
|
||||||
static const APPROVEDSTATUS = "/approvedstatus";
|
|
||||||
|
|
||||||
static const DASHBOARDSCREEN = "/dashboardscreen";
|
// static const TERMANDCONDITIONS = "/termsandcondition";
|
||||||
static const CUSTOMERORDER = "/customerorder";
|
// static const SETUPBUSSINESS = "/setupbussiness";
|
||||||
|
// static const CREATESTORE = "/createStore";
|
||||||
|
// static const SUBMITSCREEN = "/submitscreen";
|
||||||
|
// static const APPROVEDSTATUS = "/approvedstatus";
|
||||||
|
|
||||||
static const PRODUCTFORMSCREEN = "/productformscreen";
|
// static const DASHBOARDSCREEN = "/dashboardscreen";
|
||||||
|
// static const CUSTOMERORDER = "/customerorder";
|
||||||
|
|
||||||
static const TRANSACTIONHISTORY = "/transationhistory";
|
// static const PRODUCTFORMSCREEN = "/productformscreen";
|
||||||
|
|
||||||
static const INSIGHTSHISTORY = "/insightshistory";
|
// static const TRANSACTIONHISTORY = "/transationhistory";
|
||||||
|
|
||||||
static const DETAILSBUSSINESS = "/detailsbussiness";
|
// static const INSIGHTSHISTORY = "/insightshistory";
|
||||||
|
|
||||||
static const STOREMANAGEMENT = "/storemanagement";
|
// static const DETAILSBUSSINESS = "/detailsbussiness";
|
||||||
|
|
||||||
static const SETTING = "/settings";
|
// static const STOREMANAGEMENT = "/storemanagement";
|
||||||
|
|
||||||
static const FORGETPASSWORD = "/forgetpassword";
|
// static const SETTING = "/settings";
|
||||||
static const VERIFYPASSWORD = "/verifypassword";
|
|
||||||
|
|
||||||
static const FORGETNEWPASSWORD = "/forgetnewpassword";
|
// static const FORGETPASSWORD = "/forgetpassword";
|
||||||
|
// static const VERIFYPASSWORD = "/verifypassword";
|
||||||
|
|
||||||
static const UPDATESTORE = "/updatestore";
|
// static const FORGETNEWPASSWORD = "/forgetnewpassword";
|
||||||
|
|
||||||
|
// static const UPDATESTORE = "/updatestore";
|
||||||
static const OTPSCREEN = "/otpscreen";
|
static const OTPSCREEN = "/otpscreen";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
182
lib/src/data/address.dart
Normal file
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
|
// To parse this JSON data, do
|
||||||
//
|
//
|
||||||
// final wishListModel = wishListModelFromJson(jsondynamic);
|
// final wishListModel = wishListModelFromJson(jsondynamic);
|
||||||
@@ -14,7 +267,7 @@ class WishListModel {
|
|||||||
DateTime? createdAt;
|
DateTime? createdAt;
|
||||||
DateTime? updatedAt;
|
DateTime? updatedAt;
|
||||||
List<WishListItem>? items;
|
List<WishListItem>? items;
|
||||||
dynamic? totalItems;
|
dynamic totalItems;
|
||||||
|
|
||||||
WishListModel({
|
WishListModel({
|
||||||
this.id,
|
this.id,
|
||||||
@@ -28,8 +281,8 @@ class WishListModel {
|
|||||||
factory WishListModel.fromJson(Map<dynamic, dynamic> json) => WishListModel(
|
factory WishListModel.fromJson(Map<dynamic, dynamic> json) => WishListModel(
|
||||||
id: json["id"],
|
id: json["id"],
|
||||||
userId: json["userId"],
|
userId: json["userId"],
|
||||||
createdAt: DateTime.parse(json["createdAt"]),
|
createdAt: DateTime?.parse(json["createdAt"]),
|
||||||
updatedAt: DateTime.parse(json["updatedAt"]),
|
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||||
items: List<WishListItem>.from(json["items"].map((x) => WishListItem.fromJson(x))),
|
items: List<WishListItem>.from(json["items"].map((x) => WishListItem.fromJson(x))),
|
||||||
totalItems: json["totalItems"],
|
totalItems: json["totalItems"],
|
||||||
);
|
);
|
||||||
@@ -70,8 +323,8 @@ class WishListItem {
|
|||||||
wishlistId: json["wishlistId"],
|
wishlistId: json["wishlistId"],
|
||||||
productId: json["productId"],
|
productId: json["productId"],
|
||||||
storeId: json["storeId"],
|
storeId: json["storeId"],
|
||||||
createdAt: DateTime.parse(json["createdAt"]),
|
createdAt: DateTime?.parse(json["createdAt"]),
|
||||||
updatedAt: DateTime.parse(json["updatedAt"]),
|
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||||
product: ProductDatum.fromJson(json["product"]),
|
product: ProductDatum.fromJson(json["product"]),
|
||||||
store: Store.fromJson(json["store"]),
|
store: Store.fromJson(json["store"]),
|
||||||
);
|
);
|
||||||
@@ -96,20 +349,24 @@ class ProductDatum {
|
|||||||
dynamic brand;
|
dynamic brand;
|
||||||
dynamic basePrice;
|
dynamic basePrice;
|
||||||
dynamic discountPrice;
|
dynamic discountPrice;
|
||||||
dynamic stock;
|
dynamic? stock;
|
||||||
dynamic quantity;
|
dynamic? quantity;
|
||||||
dynamic unit;
|
dynamic unit;
|
||||||
dynamic slug;
|
dynamic slug;
|
||||||
dynamic rating;
|
dynamic averageRating;
|
||||||
bool? isInStock;
|
bool? isInStock;
|
||||||
bool? isActive;
|
bool? isActive;
|
||||||
bool? isInWishlist;
|
|
||||||
DateTime? createdAt;
|
DateTime? createdAt;
|
||||||
DateTime? updatedAt;
|
DateTime? updatedAt;
|
||||||
dynamic storeId;
|
dynamic storeId;
|
||||||
dynamic categoryId;
|
dynamic categoryId;
|
||||||
dynamic productTypeId;
|
dynamic productTypeId;
|
||||||
dynamic timeSlotId;
|
dynamic timeSlotId;
|
||||||
|
List<ProductImage>? productImages;
|
||||||
|
Category? category;
|
||||||
|
List<ProductTag>? productTags;
|
||||||
|
List<dynamic>? zones;
|
||||||
|
List<ProductReview>? productReview;
|
||||||
|
|
||||||
ProductDatum({
|
ProductDatum({
|
||||||
this.id,
|
this.id,
|
||||||
@@ -123,16 +380,20 @@ class ProductDatum {
|
|||||||
this.quantity,
|
this.quantity,
|
||||||
this.unit,
|
this.unit,
|
||||||
this.slug,
|
this.slug,
|
||||||
this.rating,
|
this.averageRating,
|
||||||
this.isInStock,
|
this.isInStock,
|
||||||
this.isActive,
|
this.isActive,
|
||||||
this.isInWishlist,
|
|
||||||
this.createdAt,
|
this.createdAt,
|
||||||
this.updatedAt,
|
this.updatedAt,
|
||||||
this.storeId,
|
this.storeId,
|
||||||
this.categoryId,
|
this.categoryId,
|
||||||
this.productTypeId,
|
this.productTypeId,
|
||||||
this.timeSlotId,
|
this.timeSlotId,
|
||||||
|
this.productImages,
|
||||||
|
this.category,
|
||||||
|
this.productTags,
|
||||||
|
this.zones,
|
||||||
|
this.productReview,
|
||||||
});
|
});
|
||||||
|
|
||||||
factory ProductDatum.fromJson(Map<dynamic, dynamic> json) => ProductDatum(
|
factory ProductDatum.fromJson(Map<dynamic, dynamic> json) => ProductDatum(
|
||||||
@@ -147,16 +408,20 @@ class ProductDatum {
|
|||||||
quantity: json["quantity"],
|
quantity: json["quantity"],
|
||||||
unit: json["unit"],
|
unit: json["unit"],
|
||||||
slug: json["slug"],
|
slug: json["slug"],
|
||||||
rating: json["rating"],
|
averageRating: json["averageRating"],
|
||||||
isInStock: json["isInStock"],
|
isInStock: json["isInStock"],
|
||||||
isActive: json["isActive"],
|
isActive: json["isActive"],
|
||||||
isInWishlist: json["isInWishlist"],
|
createdAt: DateTime?.parse(json["createdAt"]),
|
||||||
createdAt: DateTime.parse(json["createdAt"]),
|
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||||
updatedAt: DateTime.parse(json["updatedAt"]),
|
|
||||||
storeId: json["storeId"],
|
storeId: json["storeId"],
|
||||||
categoryId: json["categoryId"],
|
categoryId: json["categoryId"],
|
||||||
productTypeId: json["productTypeId"],
|
productTypeId: json["productTypeId"],
|
||||||
timeSlotId: json["timeSlotId"],
|
timeSlotId: json["timeSlotId"],
|
||||||
|
productImages: List<ProductImage>.from(json["productImages"].map((x) => ProductImage.fromJson(x))),
|
||||||
|
category: Category.fromJson(json["category"]),
|
||||||
|
productTags: List<ProductTag>.from(json["productTags"].map((x) => ProductTag.fromJson(x))),
|
||||||
|
zones: List<dynamic>.from(json["zones"].map((x) => x)),
|
||||||
|
productReview: List<ProductReview>.from(json["ProductReview"].map((x) => ProductReview.fromJson(x))),
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<dynamic, dynamic> toJson() => {
|
Map<dynamic, dynamic> toJson() => {
|
||||||
@@ -171,16 +436,204 @@ class ProductDatum {
|
|||||||
"quantity": quantity,
|
"quantity": quantity,
|
||||||
"unit": unit,
|
"unit": unit,
|
||||||
"slug": slug,
|
"slug": slug,
|
||||||
"rating": rating,
|
"averageRating": averageRating,
|
||||||
"isInStock": isInStock,
|
"isInStock": isInStock,
|
||||||
"isActive": isActive,
|
"isActive": isActive,
|
||||||
"isInWishlist": isInWishlist,
|
|
||||||
"createdAt": createdAt,
|
"createdAt": createdAt,
|
||||||
"updatedAt": updatedAt,
|
"updatedAt": updatedAt,
|
||||||
"storeId": storeId,
|
"storeId": storeId,
|
||||||
"categoryId": categoryId,
|
"categoryId": categoryId,
|
||||||
"productTypeId": productTypeId,
|
"productTypeId": productTypeId,
|
||||||
"timeSlotId": timeSlotId,
|
"timeSlotId": timeSlotId,
|
||||||
|
"productImages": List<dynamic>.from(productImages!.map((x) => x.toJson())),
|
||||||
|
"category": category!.toJson(),
|
||||||
|
"productTags": List<dynamic>.from(productTags!.map((x) => x.toJson())),
|
||||||
|
"zones": List<dynamic>.from(zones!.map((x) => x)),
|
||||||
|
"ProductReview": List<dynamic>.from(productReview!.map((x) => x.toJson())),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class Category {
|
||||||
|
dynamic id;
|
||||||
|
dynamic name;
|
||||||
|
dynamic description;
|
||||||
|
dynamic image;
|
||||||
|
dynamic slug;
|
||||||
|
dynamic? level;
|
||||||
|
bool? isActive;
|
||||||
|
DateTime? createdAt;
|
||||||
|
DateTime? updatedAt;
|
||||||
|
dynamic parentCategoryId;
|
||||||
|
dynamic path;
|
||||||
|
|
||||||
|
Category({
|
||||||
|
this.id,
|
||||||
|
this.name,
|
||||||
|
this.description,
|
||||||
|
this.image,
|
||||||
|
this.slug,
|
||||||
|
this.level,
|
||||||
|
this.isActive,
|
||||||
|
this.createdAt,
|
||||||
|
this.updatedAt,
|
||||||
|
this.parentCategoryId,
|
||||||
|
this.path,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory Category.fromJson(Map<dynamic, dynamic> json) => Category(
|
||||||
|
id: json["id"],
|
||||||
|
name: json["name"],
|
||||||
|
description: json["description"],
|
||||||
|
image: json["image"],
|
||||||
|
slug: json["slug"],
|
||||||
|
level: json["level"],
|
||||||
|
isActive: json["isActive"],
|
||||||
|
createdAt: DateTime?.parse(json["createdAt"]),
|
||||||
|
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||||
|
parentCategoryId: json["parentCategoryId"],
|
||||||
|
path: json["path"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<dynamic, dynamic> toJson() => {
|
||||||
|
"id": id,
|
||||||
|
"name": name,
|
||||||
|
"description": description,
|
||||||
|
"image": image,
|
||||||
|
"slug": slug,
|
||||||
|
"level": level,
|
||||||
|
"isActive": isActive,
|
||||||
|
"createdAt": createdAt,
|
||||||
|
"updatedAt": updatedAt,
|
||||||
|
"parentCategoryId": parentCategoryId,
|
||||||
|
"path": path,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class ProductImage {
|
||||||
|
dynamic id;
|
||||||
|
dynamic url;
|
||||||
|
bool? isDefault;
|
||||||
|
dynamic productId;
|
||||||
|
|
||||||
|
ProductImage({
|
||||||
|
this.id,
|
||||||
|
this.url,
|
||||||
|
this.isDefault,
|
||||||
|
this.productId,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory ProductImage.fromJson(Map<dynamic, dynamic> json) => ProductImage(
|
||||||
|
id: json["id"],
|
||||||
|
url: json["url"],
|
||||||
|
isDefault: json["isDefault"],
|
||||||
|
productId: json["productId"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<dynamic, dynamic> toJson() => {
|
||||||
|
"id": id,
|
||||||
|
"url": url,
|
||||||
|
"isDefault": isDefault,
|
||||||
|
"productId": productId,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class ProductReview {
|
||||||
|
dynamic id;
|
||||||
|
dynamic userId;
|
||||||
|
dynamic productId;
|
||||||
|
dynamic rating;
|
||||||
|
dynamic title;
|
||||||
|
dynamic description;
|
||||||
|
dynamic? likes;
|
||||||
|
dynamic? dislikes;
|
||||||
|
dynamic? helpfulCount;
|
||||||
|
bool? verifiedPurchase;
|
||||||
|
dynamic status;
|
||||||
|
DateTime? createdAt;
|
||||||
|
DateTime? updatedAt;
|
||||||
|
|
||||||
|
ProductReview({
|
||||||
|
this.id,
|
||||||
|
this.userId,
|
||||||
|
this.productId,
|
||||||
|
this.rating,
|
||||||
|
this.title,
|
||||||
|
this.description,
|
||||||
|
this.likes,
|
||||||
|
this.dislikes,
|
||||||
|
this.helpfulCount,
|
||||||
|
this.verifiedPurchase,
|
||||||
|
this.status,
|
||||||
|
this.createdAt,
|
||||||
|
this.updatedAt,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory ProductReview.fromJson(Map<dynamic, dynamic> json) => ProductReview(
|
||||||
|
id: json["id"],
|
||||||
|
userId: json["userId"],
|
||||||
|
productId: json["productId"],
|
||||||
|
rating: json["rating"],
|
||||||
|
title: json["title"],
|
||||||
|
description: json["description"],
|
||||||
|
likes: json["likes"],
|
||||||
|
dislikes: json["dislikes"],
|
||||||
|
helpfulCount: json["helpfulCount"],
|
||||||
|
verifiedPurchase: json["verifiedPurchase"],
|
||||||
|
status: json["status"],
|
||||||
|
createdAt: DateTime?.parse(json["createdAt"]),
|
||||||
|
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<dynamic, dynamic> toJson() => {
|
||||||
|
"id": id,
|
||||||
|
"userId": userId,
|
||||||
|
"productId": productId,
|
||||||
|
"rating": rating,
|
||||||
|
"title": title,
|
||||||
|
"description": description,
|
||||||
|
"likes": likes,
|
||||||
|
"dislikes": dislikes,
|
||||||
|
"helpfulCount": helpfulCount,
|
||||||
|
"verifiedPurchase": verifiedPurchase,
|
||||||
|
"status": status,
|
||||||
|
"createdAt": createdAt,
|
||||||
|
"updatedAt": updatedAt,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class ProductTag {
|
||||||
|
dynamic id;
|
||||||
|
dynamic name;
|
||||||
|
dynamic description;
|
||||||
|
bool? isActive;
|
||||||
|
DateTime? createdAt;
|
||||||
|
DateTime? updatedAt;
|
||||||
|
|
||||||
|
ProductTag({
|
||||||
|
this.id,
|
||||||
|
this.name,
|
||||||
|
this.description,
|
||||||
|
this.isActive,
|
||||||
|
this.createdAt,
|
||||||
|
this.updatedAt,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory ProductTag.fromJson(Map<dynamic, dynamic> json) => ProductTag(
|
||||||
|
id: json["id"],
|
||||||
|
name: json["name"],
|
||||||
|
description: json["description"],
|
||||||
|
isActive: json["isActive"],
|
||||||
|
createdAt: DateTime?.parse(json["createdAt"]),
|
||||||
|
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<dynamic, dynamic> toJson() => {
|
||||||
|
"id": id,
|
||||||
|
"name": name,
|
||||||
|
"description": description,
|
||||||
|
"isActive": isActive,
|
||||||
|
"createdAt": createdAt,
|
||||||
|
"updatedAt": updatedAt,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,8 +677,8 @@ class Store {
|
|||||||
gstNumber: json["gstNumber"],
|
gstNumber: json["gstNumber"],
|
||||||
gumastaNumber: json["gumastaNumber"],
|
gumastaNumber: json["gumastaNumber"],
|
||||||
storePicture: json["storePicture"],
|
storePicture: json["storePicture"],
|
||||||
createdAt: DateTime.parse(json["createdAt"]),
|
createdAt: DateTime?.parse(json["createdAt"]),
|
||||||
updatedAt: DateTime.parse(json["updatedAt"]),
|
updatedAt: DateTime?.parse(json["updatedAt"]),
|
||||||
vendorId: json["vendorId"],
|
vendorId: json["vendorId"],
|
||||||
isActive: json["isActive"],
|
isActive: json["isActive"],
|
||||||
couponId: json["couponId"],
|
couponId: json["couponId"],
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
import 'package:geocoding/geocoding.dart';
|
import 'package:geocoding/geocoding.dart';
|
||||||
import 'package:geolocator/geolocator.dart';
|
import 'package:geolocator/geolocator.dart';
|
||||||
import 'package:grocery_app/src/core/network_services/service_locator.dart';
|
import 'package:grocery_app/src/core/network_services/service_locator.dart';
|
||||||
|
import 'package:grocery_app/src/data/address.dart';
|
||||||
import 'package:grocery_app/src/data/all_cart_items.dart';
|
import 'package:grocery_app/src/data/all_cart_items.dart';
|
||||||
import 'package:grocery_app/src/logic/repo/product_repo.dart';
|
import 'package:grocery_app/src/logic/repo/product_repo.dart';
|
||||||
|
import 'package:grocery_app/utils/extensions/extensions.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
|
|
||||||
class AddtocartProvider extends ChangeNotifier {
|
class AddtocartProvider extends ChangeNotifier {
|
||||||
@@ -15,6 +18,7 @@ class AddtocartProvider extends ChangeNotifier {
|
|||||||
String get pinCode => _pinCode;
|
String get pinCode => _pinCode;
|
||||||
bool get isLoading => _isLoading;
|
bool get isLoading => _isLoading;
|
||||||
bool get isDeliverable => _isDeliverable;
|
bool get isDeliverable => _isDeliverable;
|
||||||
|
TextEditingController checkPinCode = TextEditingController();
|
||||||
|
|
||||||
Future<void> getCurrentLocation(BuildContext context) async {
|
Future<void> getCurrentLocation(BuildContext context) async {
|
||||||
_isLoading = true;
|
_isLoading = true;
|
||||||
@@ -23,16 +27,6 @@ class AddtocartProvider extends ChangeNotifier {
|
|||||||
try {
|
try {
|
||||||
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
||||||
if (!serviceEnabled) {
|
if (!serviceEnabled) {
|
||||||
_pinCode = "Location services disabled.";
|
|
||||||
_isLoading = false;
|
|
||||||
notifyListeners();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LocationPermission permission = await Geolocator.requestPermission();
|
|
||||||
if (permission == LocationPermission.denied) {
|
|
||||||
_pinCode = "Permission denied.";
|
|
||||||
_isLoading = false;
|
_isLoading = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
|
||||||
@@ -52,54 +46,58 @@ class AddtocartProvider extends ChangeNotifier {
|
|||||||
|
|
||||||
if (placemarks.isNotEmpty) {
|
if (placemarks.isNotEmpty) {
|
||||||
_pinCode = placemarks.first.postalCode ?? "Unknown";
|
_pinCode = placemarks.first.postalCode ?? "Unknown";
|
||||||
|
checkPinCode.text = _pinCode;
|
||||||
print("Pincode found: $_pinCode");
|
print("Pincode found: $_pinCode");
|
||||||
|
|
||||||
// Now check if this pin code is deliverable
|
// Now check if this pin code is deliverable
|
||||||
await checkPin(context, _pinCode);
|
await checkPin(context, _pinCode);
|
||||||
} else {
|
} else {
|
||||||
_pinCode = "Could not fetch pin code.";
|
_pinCode = "unable to current pi code";
|
||||||
print("Error: No placemarks found.");
|
print("Error: No placemarks found.");
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
_pinCode = "Error: ${e.toString()}";
|
_pinCode = "unable to current pi code";
|
||||||
print("Error: ${e.toString()}");
|
print("Error: ${e.toString()}");
|
||||||
}
|
}
|
||||||
|
_pinCode = "unable to current pi code";
|
||||||
_isLoading = false;
|
_isLoading = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ischeckpin = false;
|
||||||
Future<void> checkPin(BuildContext context, pin) async {
|
Future<void> checkPin(BuildContext context, pin) async {
|
||||||
|
ischeckpin = true;
|
||||||
|
_pinCode = pin;
|
||||||
|
notifyListeners();
|
||||||
var data = {};
|
var data = {};
|
||||||
try {
|
try {
|
||||||
var result = await _homeRepo.checkPin(data, pin);
|
var result = await _homeRepo.checkPin(data, pin);
|
||||||
|
|
||||||
return result.fold(
|
return result.fold(
|
||||||
(error) {
|
(error) {
|
||||||
|
ischeckpin = false;
|
||||||
_isDeliverable = false;
|
_isDeliverable = false;
|
||||||
isLoaddcartItem = false;
|
isLoaddcartItem = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
},
|
},
|
||||||
(response) {
|
(response) {
|
||||||
print("kdhfgkjfkghkfghkj ${response.isDeliverable!}");
|
|
||||||
if (response.isDeliverable!) {
|
if (response.isDeliverable!) {
|
||||||
_isDeliverable = true;
|
_isDeliverable = true;
|
||||||
}
|
}
|
||||||
|
ischeckpin = false;
|
||||||
isLoaddcartItem = false;
|
isLoaddcartItem = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
ischeckpin = false;
|
||||||
_isDeliverable = false;
|
_isDeliverable = false;
|
||||||
isLoaddcartItem = false;
|
isLoaddcartItem = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<String, bool> isRemoveItem = {};
|
||||||
|
|
||||||
Map<String, bool> isRemoveItem = {};
|
|
||||||
|
|
||||||
Future<void> deleteItem(BuildContext context, id) async {
|
Future<void> deleteItem(BuildContext context, id) async {
|
||||||
isRemoveItem[id] = true;
|
isRemoveItem[id] = true;
|
||||||
@@ -109,18 +107,17 @@ class AddtocartProvider extends ChangeNotifier {
|
|||||||
var result = await _homeRepo.deleteItem(data, id);
|
var result = await _homeRepo.deleteItem(data, id);
|
||||||
return result.fold(
|
return result.fold(
|
||||||
(error) {
|
(error) {
|
||||||
|
|
||||||
isRemoveItem[id] = false;
|
isRemoveItem[id] = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
},
|
},
|
||||||
(response) {
|
(response) {
|
||||||
getItemCards(context);
|
getItemCards(context);
|
||||||
isRemoveItem[id] = false;
|
isRemoveItem[id] = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
isRemoveItem[id] = false;
|
isRemoveItem[id] = false;
|
||||||
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
@@ -140,12 +137,10 @@ class AddtocartProvider extends ChangeNotifier {
|
|||||||
|
|
||||||
return result.fold(
|
return result.fold(
|
||||||
(error) {
|
(error) {
|
||||||
print("dsjfgkjhkdfgdkjfhg");
|
|
||||||
isLoaddcartItem = false;
|
isLoaddcartItem = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
},
|
},
|
||||||
(response) {
|
(response) {
|
||||||
print("dsjfgkjhkdjsfjkdhfsgfgdkjfhg");
|
|
||||||
allitem = response!;
|
allitem = response!;
|
||||||
isLoaddcartItem = false;
|
isLoaddcartItem = false;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
@@ -157,4 +152,165 @@ class AddtocartProvider extends ChangeNotifier {
|
|||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////// address/////////////////////////
|
||||||
|
List<Datum> addresslist = [];
|
||||||
|
|
||||||
|
Future<void> getAddress(BuildContext context) async {
|
||||||
|
var data = {};
|
||||||
|
try {
|
||||||
|
var result = await _homeRepo.getAddress(data);
|
||||||
|
|
||||||
|
return result.fold(
|
||||||
|
(error) {
|
||||||
|
print("dsjfgkjhkdfgdkjfhg");
|
||||||
|
|
||||||
|
notifyListeners();
|
||||||
|
},
|
||||||
|
(response) {
|
||||||
|
addresslist = response.data!;
|
||||||
|
if (response.data!.isNotEmpty) {
|
||||||
|
_selectedAddress = addresslist.last.id ?? "";
|
||||||
|
} else {
|
||||||
|
_selectedAddress = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyListeners();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
print("sfddsfdfff");
|
||||||
|
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String _selectedAddress = "";
|
||||||
|
|
||||||
|
String get selectedAddress => _selectedAddress;
|
||||||
|
|
||||||
|
void selectAddress(String address) {
|
||||||
|
_selectedAddress = address;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<String> cartItems = {};
|
||||||
|
Map<String, bool> isLoadings = {};
|
||||||
|
|
||||||
|
bool isLoadingCart = false;
|
||||||
|
bool iscardAdded = false;
|
||||||
|
|
||||||
|
Future<void> addToCart(
|
||||||
|
BuildContext context, String productId, int quantity) async {
|
||||||
|
context.showLoader(show: true);
|
||||||
|
|
||||||
|
isLoadingCart = true;
|
||||||
|
isLoadings[productId] = true;
|
||||||
|
notifyListeners();
|
||||||
|
|
||||||
|
var data = {"productId": productId, "quantity": quantity};
|
||||||
|
|
||||||
|
try {
|
||||||
|
var result = await _homeRepo.addToCart(data);
|
||||||
|
context.showLoader(
|
||||||
|
show: false,
|
||||||
|
);
|
||||||
|
|
||||||
|
result.fold(
|
||||||
|
(error) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(
|
||||||
|
content: Text(error.message),
|
||||||
|
backgroundColor: Colors.red,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(response) async {
|
||||||
|
await getItemCards(context);
|
||||||
|
cartItems.add(productId); // Add product to cart
|
||||||
|
// Fluttertoast.showToast(
|
||||||
|
// msg: "Added to cart successfully!",
|
||||||
|
// toastLength: Toast.LENGTH_SHORT,
|
||||||
|
// gravity: ToastGravity.BOTTOM,
|
||||||
|
// backgroundColor: Colors.green,
|
||||||
|
// textColor: Colors.white,
|
||||||
|
// fontSize: 14.0,
|
||||||
|
// );
|
||||||
|
iscardAdded = true;
|
||||||
|
notifyListeners(); // Update UI after adding to cart
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(
|
||||||
|
content: Text("Something went wrong"),
|
||||||
|
backgroundColor: Colors.red,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} finally {
|
||||||
|
isLoadingCart = false;
|
||||||
|
isLoadings[productId] = false;
|
||||||
|
notifyListeners(); // Ensure UI updates after operation
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> decreaseCartQuantity(
|
||||||
|
BuildContext context, String itemId, int quantity) async {
|
||||||
|
context.showLoader(show: true);
|
||||||
|
|
||||||
|
isLoadingCart = true;
|
||||||
|
|
||||||
|
notifyListeners();
|
||||||
|
|
||||||
|
// var data = {"productId": productId, "quantity": quantity};
|
||||||
|
|
||||||
|
final Map<String, dynamic> cartData = {
|
||||||
|
"items": [
|
||||||
|
{"itemId": itemId, "quantity": quantity}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
var result = await _homeRepo.decreaseQuantity(cartData);
|
||||||
|
context.showLoader(
|
||||||
|
show: false,
|
||||||
|
);
|
||||||
|
|
||||||
|
result.fold(
|
||||||
|
(error) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(
|
||||||
|
content: Text(error.message),
|
||||||
|
backgroundColor: Colors.red,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(response) async {
|
||||||
|
await getItemCards(context);
|
||||||
|
|
||||||
|
// Fluttertoast.showToast(
|
||||||
|
// msg: "Added to cart successfully!",
|
||||||
|
// toastLength: Toast.LENGTH_SHORT,
|
||||||
|
// gravity: ToastGravity.BOTTOM,
|
||||||
|
// backgroundColor: Colors.green,
|
||||||
|
// textColor: Colors.white,
|
||||||
|
// fontSize: 14.0,
|
||||||
|
// );
|
||||||
|
iscardAdded = true;
|
||||||
|
notifyListeners(); // Update UI after adding to cart
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(
|
||||||
|
content: Text("Something went wrong"),
|
||||||
|
backgroundColor: Colors.red,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} finally {
|
||||||
|
isLoadingCart = false;
|
||||||
|
|
||||||
|
notifyListeners(); // Ensure UI updates after operation
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
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:flutter/material.dart';
|
||||||
|
import 'package:grocery_app/src/core/network_services/service_locator.dart';
|
||||||
|
import 'package:grocery_app/src/data/user_profile.dart';
|
||||||
|
import 'package:grocery_app/src/logic/repo/product_repo.dart';
|
||||||
|
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||||
|
|
||||||
class BottomNavProvider with ChangeNotifier {
|
class BottomNavProvider with ChangeNotifier {
|
||||||
int _currentIndex = 0;
|
int _currentIndex = 0;
|
||||||
@@ -7,10 +11,58 @@ class BottomNavProvider with ChangeNotifier {
|
|||||||
int get currentIndex => _currentIndex;
|
int get currentIndex => _currentIndex;
|
||||||
PageController get pageController => _pageController;
|
PageController get pageController => _pageController;
|
||||||
|
|
||||||
void setIndex(int index)
|
void setIndex(int index) {
|
||||||
{
|
|
||||||
_currentIndex = index;
|
_currentIndex = index;
|
||||||
_pageController.jumpToPage(index);
|
_pageController.jumpToPage(index);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UserProfile allitem = UserProfile();
|
||||||
|
final _homeRepo = getIt<ProductRepo>();
|
||||||
|
bool isLoading = true;
|
||||||
|
|
||||||
|
Future<void> getProfile(BuildContext context) async {
|
||||||
|
print("kjdkjghdfjglhjdfhgldflghjkldfjgh");
|
||||||
|
isLoading = true;
|
||||||
|
notifyListeners();
|
||||||
|
var data = {};
|
||||||
|
try {
|
||||||
|
var result = await _homeRepo.getProfile(data);
|
||||||
|
|
||||||
|
return result.fold(
|
||||||
|
(error) {
|
||||||
|
isLoading = false;
|
||||||
|
notifyListeners();
|
||||||
|
},
|
||||||
|
(response) async {
|
||||||
|
print("kjdshgkjhdfkjg ${response.firstName}");
|
||||||
|
|
||||||
|
await SharedPrefUtils.saveUser(user: response);
|
||||||
|
allitem = response!;
|
||||||
|
isLoading = false;
|
||||||
|
notifyListeners();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
isLoading = false;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> refreshToken(BuildContext context) async {
|
||||||
|
var data = {"refresh_token": "${await SharedPrefUtils.getRefreshToken()}"};
|
||||||
|
|
||||||
|
|
||||||
|
var result = await _homeRepo.refreshToken(data, context);
|
||||||
|
return result.fold(
|
||||||
|
(error) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
(response) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
var data = {};
|
var data = {};
|
||||||
productDetails = ProductDetailsData();
|
productDetails = ProductDetailsData();
|
||||||
isProductLoading = true;
|
isProductLoading = true;
|
||||||
|
quantitys = 1;
|
||||||
|
_totalPrice = 0.0;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
|
||||||
var result = await _homeRepo.getProductDetails(data, context, id);
|
var result = await _homeRepo.getProductDetails(data, context, id);
|
||||||
@@ -186,8 +188,6 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
|
|
||||||
// Mock API call
|
// Mock API call
|
||||||
Future<bool> addToWish(BuildContext context, String productId) async {
|
Future<bool> addToWish(BuildContext context, String productId) async {
|
||||||
print("jsdkjfhkdfkg ${productId}");
|
|
||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
"productId": productId,
|
"productId": productId,
|
||||||
};
|
};
|
||||||
@@ -206,6 +206,7 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
(response) {
|
(response) {
|
||||||
|
iswishloading = false;
|
||||||
Fluttertoast.showToast(
|
Fluttertoast.showToast(
|
||||||
msg: "Wishlist updated successfully!",
|
msg: "Wishlist updated successfully!",
|
||||||
toastLength: Toast.LENGTH_SHORT,
|
toastLength: Toast.LENGTH_SHORT,
|
||||||
@@ -223,18 +224,24 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<String> wishlist = {}; // To store product IDs in the wishlist
|
Set<String> wishlist = {};
|
||||||
|
|
||||||
|
bool iswishloading = false;
|
||||||
|
|
||||||
Future<void> toggleWishlist(BuildContext context, String productId) async {
|
Future<void> toggleWishlist(BuildContext context, String productId) async {
|
||||||
|
iswishloading = true;
|
||||||
|
notifyListeners();
|
||||||
try {
|
try {
|
||||||
if (wishlist.contains(productId)) {
|
if (wishlist.contains(productId)) {
|
||||||
wishlist.remove(productId);
|
wishlist.remove(productId);
|
||||||
|
iswishloading = false;
|
||||||
} else {
|
} else {
|
||||||
var result = await addToWish(context, productId);
|
var result = await addToWish(context, productId);
|
||||||
|
|
||||||
wishlist.add(productId); // Add the product ID to the wishlist
|
wishlist.add(productId);
|
||||||
}
|
}
|
||||||
notifyListeners(); // Notify listeners to update the UI
|
iswishloading = false;
|
||||||
|
notifyListeners();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
@@ -297,13 +304,16 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
Set<String> cartItems = {};
|
Set<String> cartItems = {};
|
||||||
Map<String, bool> isLoading = {};
|
Map<String, bool> isLoading = {};
|
||||||
|
|
||||||
Future<void> addToCart(BuildContext context, String productId) async {
|
bool isLoadingCart=false;
|
||||||
//if (cartItems.contains(productId)) return; // Prevent duplicate additions
|
bool iscardAdded=false;
|
||||||
|
|
||||||
|
Future<void> addToCart(BuildContext context, String productId,int quantity) async {
|
||||||
|
//if (cartItems.contains(productId)) return; // Prevent duplicate additions
|
||||||
|
isLoadingCart=true;
|
||||||
isLoading[productId] = true;
|
isLoading[productId] = true;
|
||||||
notifyListeners(); // Notify UI to show loading indicator
|
notifyListeners(); // Notify UI to show loading indicator
|
||||||
|
|
||||||
var data = {"productId": productId, "quantity": 1};
|
var data = {"productId": productId, "quantity": quantity};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var result = await _homeRepo.addToCart(data);
|
var result = await _homeRepo.addToCart(data);
|
||||||
@@ -327,6 +337,7 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
textColor: Colors.white,
|
textColor: Colors.white,
|
||||||
fontSize: 14.0,
|
fontSize: 14.0,
|
||||||
);
|
);
|
||||||
|
iscardAdded=true;
|
||||||
notifyListeners(); // Update UI after adding to cart
|
notifyListeners(); // Update UI after adding to cart
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@@ -338,19 +349,20 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
} finally {
|
} finally {
|
||||||
|
isLoadingCart=false;
|
||||||
isLoading[productId] = false;
|
isLoading[productId] = false;
|
||||||
notifyListeners(); // Ensure UI updates after operation
|
notifyListeners(); // Ensure UI updates after operation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<BestDeal> countList = [];
|
List<BestDeal> countList = [];
|
||||||
|
String lastImageurl = '';
|
||||||
|
|
||||||
Future<void> addToWithCart(
|
Future<void> addToWithCart(BuildContext context, String productId,
|
||||||
BuildContext context, String productId, BestDeal bestdealproduct) async {
|
BestDeal bestdealproduct, url) async {
|
||||||
//if (cartItems.contains(productId)) return; // Prevent duplicate additions
|
|
||||||
|
|
||||||
isLoading[productId] = true;
|
isLoading[productId] = true;
|
||||||
notifyListeners(); // Notify UI to show loading indicator
|
notifyListeners();
|
||||||
|
|
||||||
var data = {"productId": productId, "quantity": 1};
|
var data = {"productId": productId, "quantity": 1};
|
||||||
|
|
||||||
@@ -368,6 +380,7 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
},
|
},
|
||||||
(response) {
|
(response) {
|
||||||
countList.add(bestdealproduct);
|
countList.add(bestdealproduct);
|
||||||
|
lastImageurl = url;
|
||||||
cartItems.add(productId); // Add product to cart
|
cartItems.add(productId); // Add product to cart
|
||||||
Fluttertoast.showToast(
|
Fluttertoast.showToast(
|
||||||
msg: "Added to cart successfully!",
|
msg: "Added to cart successfully!",
|
||||||
@@ -393,6 +406,63 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<ProductDatum> productDatum = [];
|
||||||
|
String productDatumlastImageurl = '';
|
||||||
|
|
||||||
|
Future<void> addToCartWithWishlist(BuildContext context, String productId,ProductDatum productdataum,
|
||||||
|
url) async {
|
||||||
|
|
||||||
|
isLoading[productId] = true;
|
||||||
|
notifyListeners();
|
||||||
|
|
||||||
|
var data = {"productId": productId, "quantity": 1};
|
||||||
|
|
||||||
|
try {
|
||||||
|
var result = await _homeRepo.addToCart(data);
|
||||||
|
|
||||||
|
result.fold(
|
||||||
|
(error) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(
|
||||||
|
content: Text(error.message),
|
||||||
|
backgroundColor: Colors.red,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(response) {
|
||||||
|
productDatum.add(productdataum);
|
||||||
|
productDatumlastImageurl = url;
|
||||||
|
cartItems.add(productId); // Add product to cart
|
||||||
|
Fluttertoast.showToast(
|
||||||
|
msg: "Added to cart successfully!",
|
||||||
|
toastLength: Toast.LENGTH_SHORT,
|
||||||
|
gravity: ToastGravity.BOTTOM,
|
||||||
|
backgroundColor: Colors.green,
|
||||||
|
textColor: Colors.white,
|
||||||
|
fontSize: 14.0,
|
||||||
|
);
|
||||||
|
notifyListeners(); // Update UI after adding to cart
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(
|
||||||
|
content: Text("Something went wrong"),
|
||||||
|
backgroundColor: Colors.red,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} finally {
|
||||||
|
isLoading[productId] = false;
|
||||||
|
notifyListeners(); // Ensure UI updates after operation
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool isWishListItemLoadingg = true;
|
bool isWishListItemLoadingg = true;
|
||||||
|
|
||||||
List<WishListItem> wishListItem = [];
|
List<WishListItem> wishListItem = [];
|
||||||
@@ -427,30 +497,69 @@ class ProductProvider extends ChangeNotifier {
|
|||||||
}
|
}
|
||||||
////////////////////////////// product increase ////////////////////////////////////
|
////////////////////////////// product increase ////////////////////////////////////
|
||||||
|
|
||||||
int _quantity = 1;
|
int quantitys = 1;
|
||||||
double _unitPrice = 0.0;
|
double _unitPrice = 0.0;
|
||||||
double _totalPrice = 0.0;
|
double _totalPrice = 0.0;
|
||||||
|
|
||||||
int get quantity => _quantity;
|
int get quantity => quantitys;
|
||||||
double get totalPrice => _totalPrice;
|
double get totalPrice => _totalPrice;
|
||||||
|
|
||||||
void setProductPrice(double price) {
|
void setProductPrice(double price) {
|
||||||
_unitPrice = price;
|
_unitPrice = price;
|
||||||
_totalPrice = _unitPrice * _quantity;
|
_totalPrice = _unitPrice * quantitys;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int productQuantity = 0;
|
||||||
|
|
||||||
|
// void increaseQuantity()
|
||||||
|
// {
|
||||||
|
// if(quantity<10)
|
||||||
|
// if (_quantity < 10)
|
||||||
|
// {
|
||||||
|
// // Limit to 10
|
||||||
|
// _quantity++;
|
||||||
|
// _totalPrice = _unitPrice * _quantity;
|
||||||
|
// notifyListeners();
|
||||||
|
// }
|
||||||
|
// {
|
||||||
|
// Fluttertoast.showToast(
|
||||||
|
// msg: "Sorry cart successfully!",
|
||||||
|
// toastLength: Toast.LENGTH_SHORT,
|
||||||
|
// gravity: ToastGravity.BOTTOM,
|
||||||
|
// backgroundColor: Colors.green,
|
||||||
|
// textColor: Colors.white,
|
||||||
|
// fontSize: 14.0,
|
||||||
|
// );
|
||||||
|
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
void increaseQuantity() {
|
void increaseQuantity() {
|
||||||
print("kjfgkhkdfhgkjdhfg");
|
int maxAllowed = productQuantity >= 100
|
||||||
_quantity++;
|
? 10
|
||||||
_totalPrice = _unitPrice * _quantity;
|
: productQuantity; // Max limit based on stock
|
||||||
notifyListeners();
|
|
||||||
|
if (quantitys < maxAllowed) {
|
||||||
|
quantitys++;
|
||||||
|
_totalPrice = _unitPrice * quantitys;
|
||||||
|
notifyListeners();
|
||||||
|
} else {
|
||||||
|
Fluttertoast.showToast(
|
||||||
|
msg: "Sorry, you can only add up to $maxAllowed items!",
|
||||||
|
toastLength: Toast.LENGTH_SHORT,
|
||||||
|
gravity: ToastGravity.BOTTOM,
|
||||||
|
backgroundColor: Colors.red,
|
||||||
|
textColor: Colors.white,
|
||||||
|
fontSize: 14.0,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void decreaseQuantity() {
|
void decreaseQuantity() {
|
||||||
if (_quantity > 1) {
|
if (quantitys > 1) {
|
||||||
_quantity--;
|
quantitys--;
|
||||||
_totalPrice = _unitPrice * _quantity;
|
_totalPrice = _unitPrice * quantitys;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
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/OTPResponseModel.dart';
|
||||||
import 'package:grocery_app/src/data/login_response.dart';
|
import 'package:grocery_app/src/data/login_response.dart';
|
||||||
import 'package:grocery_app/src/data/registration_response.dart';
|
import 'package:grocery_app/src/data/registration_response.dart';
|
||||||
|
import 'package:grocery_app/src/data/user_profile.dart';
|
||||||
import 'package:grocery_app/src/data/vendor_otpModel.dart';
|
import 'package:grocery_app/src/data/vendor_otpModel.dart';
|
||||||
import 'package:grocery_app/src/logic/services/auth_service_locator.dart';
|
import 'package:grocery_app/src/logic/services/auth_service_locator.dart';
|
||||||
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||||
@@ -21,7 +22,6 @@ class AuthRepo {
|
|||||||
var response = await _authServices.sendOtp(data);
|
var response = await _authServices.sendOtp(data);
|
||||||
final String model = response.toString();
|
final String model = response.toString();
|
||||||
|
|
||||||
|
|
||||||
return right(model);
|
return right(model);
|
||||||
} on DioException catch (e) {
|
} on DioException catch (e) {
|
||||||
print("dhfgfdgjdhfgfgh ${e}");
|
print("dhfgfdgjdhfgfgh ${e}");
|
||||||
@@ -40,10 +40,10 @@ class AuthRepo {
|
|||||||
if (vendorOtpModel.data != null) {
|
if (vendorOtpModel.data != null) {
|
||||||
await SharedPrefUtils.setToken(
|
await SharedPrefUtils.setToken(
|
||||||
authToken: vendorOtpModel.data!.accessToken ?? "");
|
authToken: vendorOtpModel.data!.accessToken ?? "");
|
||||||
|
await SharedPrefUtils.setRefreshToken(
|
||||||
|
refresh_token: vendorOtpModel.data!.refreshToken ?? "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return right(vendorOtpModel);
|
return right(vendorOtpModel);
|
||||||
} on DioException catch (e) {
|
} on DioException catch (e) {
|
||||||
var error = CustomDioExceptions.handleError(e);
|
var error = CustomDioExceptions.handleError(e);
|
||||||
@@ -51,16 +51,17 @@ class AuthRepo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureResult<LoginResponse> loginOtp(data) async {
|
FutureResult<LoginResponse> loginOtp(data) async {
|
||||||
try {
|
try {
|
||||||
var response = await _authServices.loginOtp(data);
|
var response = await _authServices.loginOtp(data);
|
||||||
|
|
||||||
LoginResponse loginResponse = loginResponseFromJson(response.toString());
|
LoginResponse loginResponse = loginResponseFromJson(response.toString());
|
||||||
|
|
||||||
if (loginResponse.accessToken != null)
|
if (loginResponse.accessToken != null) {
|
||||||
{
|
|
||||||
await SharedPrefUtils.setToken(
|
await SharedPrefUtils.setToken(
|
||||||
authToken: loginResponse.accessToken ?? "");
|
authToken: loginResponse.accessToken ?? "");
|
||||||
|
await SharedPrefUtils.setRefreshToken(
|
||||||
|
refresh_token: loginResponse.refreshToken ?? "");
|
||||||
}
|
}
|
||||||
|
|
||||||
// final String model = response.toString();
|
// final String model = response.toString();
|
||||||
@@ -119,12 +120,9 @@ class AuthRepo {
|
|||||||
|
|
||||||
await SharedPrefUtils.setToken(
|
await SharedPrefUtils.setToken(
|
||||||
authToken: registrationResponse.accessToken ?? "");
|
authToken: registrationResponse.accessToken ?? "");
|
||||||
print("dsfklgjkfgbfgkfdgjkhkfdjg ${registrationResponse.accessToken}");
|
await SharedPrefUtils.setRefreshToken(
|
||||||
// if (response.statCode) {
|
refresh_token: registrationResponse.refreshToken ?? "");
|
||||||
// print("dsfklgjkfgbfgkfdgjkhkfdjg");
|
final String model = response.toString();
|
||||||
// }
|
|
||||||
|
|
||||||
final String model = response.toString();
|
|
||||||
return right(registrationResponse);
|
return right(registrationResponse);
|
||||||
} on DioException catch (e) {
|
} on DioException catch (e) {
|
||||||
var error = CustomDioExceptions.handleError(e);
|
var error = CustomDioExceptions.handleError(e);
|
||||||
|
|||||||
@@ -1,18 +1,27 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:fpdart/fpdart.dart';
|
import 'package:fpdart/fpdart.dart';
|
||||||
|
import 'package:grocery_app/src/core/routes/routes.dart';
|
||||||
import 'package:grocery_app/src/core/utils/custom_dio_exception.dart';
|
import 'package:grocery_app/src/core/utils/custom_dio_exception.dart';
|
||||||
import 'package:grocery_app/src/core/utils/response_type_def.dart';
|
import 'package:grocery_app/src/core/utils/response_type_def.dart';
|
||||||
|
import 'package:grocery_app/src/data/address.dart';
|
||||||
import 'package:grocery_app/src/data/allProduct_model.dart';
|
import 'package:grocery_app/src/data/allProduct_model.dart';
|
||||||
import 'package:grocery_app/src/data/all_cart_items.dart';
|
import 'package:grocery_app/src/data/all_cart_items.dart';
|
||||||
import 'package:grocery_app/src/data/banners.dart';
|
import 'package:grocery_app/src/data/banners.dart';
|
||||||
import 'package:grocery_app/src/data/best_dealProduct.dart';
|
import 'package:grocery_app/src/data/best_dealProduct.dart';
|
||||||
import 'package:grocery_app/src/data/check_pin_response.dart';
|
import 'package:grocery_app/src/data/check_pin_response.dart';
|
||||||
|
import 'package:grocery_app/src/data/login_response.dart';
|
||||||
import 'package:grocery_app/src/data/product_category.dart';
|
import 'package:grocery_app/src/data/product_category.dart';
|
||||||
import 'package:grocery_app/src/data/product_details.dart';
|
import 'package:grocery_app/src/data/product_details.dart';
|
||||||
|
import 'package:grocery_app/src/data/upload_image.dart';
|
||||||
|
import 'package:grocery_app/src/data/user_profile.dart';
|
||||||
import 'package:grocery_app/src/data/wish_list_model.dart';
|
import 'package:grocery_app/src/data/wish_list_model.dart';
|
||||||
import 'package:grocery_app/src/logic/services/home_locator.dart';
|
import 'package:grocery_app/src/logic/services/home_locator.dart';
|
||||||
import 'package:grocery_app/src/ui/productdetails/product_details.dart';
|
import 'package:grocery_app/src/ui/productdetails/product_details.dart';
|
||||||
|
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||||
|
import 'package:grocery_app/utils/extensions/extensions.dart';
|
||||||
|
|
||||||
class ProductRepo {
|
class ProductRepo {
|
||||||
final ProductService _productService;
|
final ProductService _productService;
|
||||||
@@ -36,12 +45,13 @@ class ProductRepo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureResult<ProductDetailsData> getProductDetails(
|
FutureResult<ProductDetailsData> getProductDetails(
|
||||||
data, BuildContext context, id) async {
|
data, BuildContext context, id) async {
|
||||||
try {
|
try {
|
||||||
var response = await _productService.getProductDetails(data, id);
|
var response = await _productService.getProductDetails(data, id);
|
||||||
|
|
||||||
ProductDetailsData loginResponse = productDetailsdataFromJson(response.toString());
|
ProductDetailsData loginResponse =
|
||||||
|
productDetailsdataFromJson(response.toString());
|
||||||
|
|
||||||
final String model = response.toString();
|
final String model = response.toString();
|
||||||
|
|
||||||
@@ -52,8 +62,6 @@ class ProductRepo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FutureResult<BestDealProduct> getBestDealProduct(
|
FutureResult<BestDealProduct> getBestDealProduct(
|
||||||
data, BuildContext context) async {
|
data, BuildContext context) async {
|
||||||
try {
|
try {
|
||||||
@@ -112,8 +120,19 @@ class ProductRepo {
|
|||||||
var response = await _productService.getItemCards(data);
|
var response = await _productService.getItemCards(data);
|
||||||
|
|
||||||
AllCartItems allCartItems = allCartItemsFromJson(response.toString());
|
AllCartItems allCartItems = allCartItemsFromJson(response.toString());
|
||||||
|
return right(allCartItems);
|
||||||
|
} on DioException catch (e) {
|
||||||
|
var error = CustomDioExceptions.handleError(e);
|
||||||
|
return left(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
print("jdfgjkdf${allCartItems}");
|
FutureResult<AddressResponse> getAddress(data) async {
|
||||||
|
try {
|
||||||
|
var response = await _productService.getAddress(data);
|
||||||
|
|
||||||
|
AddressResponse allCartItems =
|
||||||
|
addressResponseFromJson(response.toString());
|
||||||
|
|
||||||
return right(allCartItems);
|
return right(allCartItems);
|
||||||
} on DioException catch (e) {
|
} on DioException catch (e) {
|
||||||
@@ -123,6 +142,47 @@ class ProductRepo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FutureResult<UserProfile> getProfile(data) async {
|
||||||
|
try {
|
||||||
|
var response = await _productService.getProfile(data);
|
||||||
|
|
||||||
|
print("kdjfgkljfdkjlghflkgjh ${response}");
|
||||||
|
UserProfile userProfile = userProfileFromJson(response.toString());
|
||||||
|
print("kdjfgkljfdkjlghflkgjhrerrrerr ${userProfile.createdAt}");
|
||||||
|
return right(userProfile);
|
||||||
|
} on DioException catch (e) {
|
||||||
|
var error = CustomDioExceptions.handleError(e);
|
||||||
|
return left(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FutureResult<String> updateProfile(data) async {
|
||||||
|
try {
|
||||||
|
var response = await _productService.updateProfile(data);
|
||||||
|
|
||||||
|
print("kdjfgkljfdkjlghflkgjh ${response}");
|
||||||
|
final String model = response.toString();
|
||||||
|
return right(model);
|
||||||
|
} on DioException catch (e) {
|
||||||
|
var error = CustomDioExceptions.handleError(e);
|
||||||
|
return left(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FutureResult<UploadImage> uploadImage(File imageFile)
|
||||||
|
async {
|
||||||
|
try {
|
||||||
|
final response = await _productService.uploadImage(imageFile);
|
||||||
|
UploadImage upload=uploadImageFromJson(response.toString());
|
||||||
|
return right(upload);
|
||||||
|
} on DioException catch (e) {
|
||||||
|
final error = CustomDioExceptions.handleError(e);
|
||||||
|
return left(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
FutureResult<CheckPinResponse> checkPin(data, pin) async {
|
FutureResult<CheckPinResponse> checkPin(data, pin) async {
|
||||||
try {
|
try {
|
||||||
var response = await _productService.checkPin(data, pin);
|
var response = await _productService.checkPin(data, pin);
|
||||||
@@ -148,6 +208,20 @@ class ProductRepo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FutureResult<String> addAddress(data) async {
|
||||||
|
try {
|
||||||
|
var response = await _productService.addAddress(data);
|
||||||
|
|
||||||
|
final String model = response.toString();
|
||||||
|
|
||||||
|
return right(model);
|
||||||
|
} on DioException catch (e) {
|
||||||
|
print("djhgfjdfhjg ${e}");
|
||||||
|
var error = CustomDioExceptions.handleError(e);
|
||||||
|
return left(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FutureResult<String> addToWish(data) async {
|
FutureResult<String> addToWish(data) async {
|
||||||
try {
|
try {
|
||||||
var response = await _productService.addToWish(data);
|
var response = await _productService.addToWish(data);
|
||||||
@@ -175,6 +249,22 @@ class ProductRepo {
|
|||||||
return left(error);
|
return left(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FutureResult<String> decreaseQuantity(data) async {
|
||||||
|
try {
|
||||||
|
var response = await _productService.decreaseQuantity(data);
|
||||||
|
|
||||||
|
final String model = response.toString();
|
||||||
|
|
||||||
|
return right(model);
|
||||||
|
} on DioException catch (e) {
|
||||||
|
print("djhgfjdfhjg ${e}");
|
||||||
|
var error = CustomDioExceptions.handleError(e);
|
||||||
|
return left(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FutureResult<WishListModel> gettAllWishList(data) async {
|
FutureResult<WishListModel> gettAllWishList(data) async {
|
||||||
try {
|
try {
|
||||||
@@ -221,6 +311,32 @@ class ProductRepo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FutureResult<String> refreshToken(data, BuildContext context) async {
|
||||||
|
try {
|
||||||
|
var response = await _productService.refresh_token(data);
|
||||||
|
LoginResponse loginResponse = loginResponseFromJson(response.toString());
|
||||||
|
|
||||||
|
if (loginResponse.accessToken != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
await SharedPrefUtils.setToken(
|
||||||
|
authToken: loginResponse.accessToken ?? "");
|
||||||
|
await SharedPrefUtils.setRefreshToken(
|
||||||
|
refresh_token: loginResponse.refreshToken ?? "");
|
||||||
|
}
|
||||||
|
|
||||||
|
final String model = response.toString();
|
||||||
|
|
||||||
|
return right(model);
|
||||||
|
} on DioException catch (e)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
var error = CustomDioExceptions.handleError(e);
|
||||||
|
return left(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// FutureResult<VendorModel> getMe(data) async {
|
// FutureResult<VendorModel> getMe(data) async {
|
||||||
// try {
|
// try {
|
||||||
// var response = await _homeService.getMe(data);
|
// var response = await _homeService.getMe(data);
|
||||||
|
|||||||
@@ -1,36 +1,27 @@
|
|||||||
|
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:grocery_app/src/core/constant/api.dart';
|
import 'package:grocery_app/src/core/constant/api.dart';
|
||||||
import 'package:grocery_app/src/core/network_services/api_services.dart';
|
import 'package:grocery_app/src/core/network_services/api_services.dart';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class AuthServices extends ApiService {
|
class AuthServices extends ApiService {
|
||||||
/// Login
|
/// Login
|
||||||
Future sendOtp(data) async
|
Future sendOtp(data) async {
|
||||||
{
|
|
||||||
var response = await api.post(APIURL.sendOtp, data: jsonEncode(data));
|
var response = await api.post(APIURL.sendOtp, data: jsonEncode(data));
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future verifyOtp(data) async {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Future verifyOtp(data) async {
|
|
||||||
var response = await api.post(APIURL.verifyOtp, data: jsonEncode(data));
|
var response = await api.post(APIURL.verifyOtp, data: jsonEncode(data));
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
Future loginOtp(data) async {
|
|
||||||
|
Future loginOtp(data) async {
|
||||||
var response = await api.post(APIURL.loginOtp, data: jsonEncode(data));
|
var response = await api.post(APIURL.loginOtp, data: jsonEncode(data));
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future login(data) async {
|
||||||
Future login(data) async
|
|
||||||
{
|
|
||||||
var response = await api.post(APIURL.login, data: jsonEncode(data));
|
var response = await api.post(APIURL.login, data: jsonEncode(data));
|
||||||
//response.statusCode
|
//response.statusCode
|
||||||
|
|
||||||
@@ -39,45 +30,30 @@ class AuthServices extends ApiService {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future userRegister(data) async {
|
||||||
|
var response =
|
||||||
Future userRegister(data) async
|
await api.post(APIURL.customerRegister, data: jsonEncode(data));
|
||||||
{
|
|
||||||
var response = await api.post(APIURL.customerRegister, data: jsonEncode(data));
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future forgetPassword(data) async {
|
||||||
|
var response =
|
||||||
|
await api.post(APIURL.forgetPassword, data: jsonEncode(data));
|
||||||
Future forgetPassword(data) async
|
|
||||||
{
|
|
||||||
var response = await api.post(APIURL.forgetPassword, data: jsonEncode(data));
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future verifyForgetPassword(data) async
|
Future verifyForgetPassword(data) async {
|
||||||
{
|
var response =
|
||||||
var response = await api.post(APIURL.verifyForgetPassword, data: jsonEncode(data));
|
await api.post(APIURL.verifyForgetPassword, data: jsonEncode(data));
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future reset_password(data) async {
|
||||||
Future reset_password(data) async
|
var response =
|
||||||
{
|
await api.post(APIURL.reset_password, data: jsonEncode(data));
|
||||||
var response = await api.post(APIURL.reset_password, data: jsonEncode(data));
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Login
|
/// Login
|
||||||
// Future profileUpdate(data) async {
|
// Future profileUpdate(data) async {
|
||||||
// var response = await api.put(Endpoints.update, data: data);
|
// var response = await api.put(Endpoints.update, data: data);
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
import 'package:grocery_app/src/core/constant/api.dart';
|
import 'package:grocery_app/src/core/constant/api.dart';
|
||||||
import 'package:grocery_app/src/core/network_services/api_services.dart';
|
import 'package:grocery_app/src/core/network_services/api_services.dart';
|
||||||
|
|
||||||
@@ -76,7 +78,39 @@ class ProductService extends ApiService {
|
|||||||
await api.delete(APIURL.deleteItem + id, data: jsonEncode(data));
|
await api.delete(APIURL.deleteItem + id, data: jsonEncode(data));
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
Future addAddress(data) async {
|
||||||
|
var response = await api.post(APIURL.addAddress, data: jsonEncode(data));
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future getProfile(data) async {
|
||||||
|
var response = await api.get(APIURL.getprofile, data: jsonEncode(data));
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
Future updateProfile(data) async {
|
||||||
|
var response = await api.patch(APIURL.updateProfile, data: jsonEncode(data));
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Future<Response> uploadImage(File imageFile,
|
||||||
|
{Map<String, dynamic>? additionalFields}) async {
|
||||||
|
const String url = APIURL.uploadImage;
|
||||||
|
return await api.uploadImage(
|
||||||
|
url,
|
||||||
|
imageFile,
|
||||||
|
additionalFields: additionalFields,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Future getAddress
|
||||||
|
(data) async {
|
||||||
|
var response =
|
||||||
|
await api.get(APIURL.userAddress, data: jsonEncode(data));
|
||||||
|
return response;
|
||||||
|
}
|
||||||
Future addToWish(data) async {
|
Future addToWish(data) async {
|
||||||
var response = await api.post(APIURL.addToWish, data: jsonEncode(data));
|
var response = await api.post(APIURL.addToWish, data: jsonEncode(data));
|
||||||
|
|
||||||
@@ -89,6 +123,12 @@ class ProductService extends ApiService {
|
|||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future decreaseQuantity(data) async {
|
||||||
|
var response = await api.patch(APIURL.addToCart, data: jsonEncode(data));
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
Future gettAllWishList(data) async {
|
Future gettAllWishList(data) async {
|
||||||
var response =
|
var response =
|
||||||
await api.get(APIURL.gettAllWishList, data: jsonEncode(data));
|
await api.get(APIURL.gettAllWishList, data: jsonEncode(data));
|
||||||
|
|||||||
@@ -62,14 +62,21 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
floatingActionButton: floatingAction(),
|
floatingActionButton: floatingAction(),
|
||||||
body: itemBestdeal());
|
body: Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 100),
|
||||||
|
child: itemBestdeal(),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget floatingAction() {
|
Widget floatingAction()
|
||||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
{
|
||||||
if (provider.countList.isEmpty) {
|
return Consumer<ProductProvider>(builder: (context, provider, child)
|
||||||
|
{
|
||||||
|
if (provider.countList.isEmpty)
|
||||||
|
{
|
||||||
return Center();
|
return Center();
|
||||||
} else {
|
} else
|
||||||
|
{
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(left: 30),
|
padding: const EdgeInsets.only(left: 30),
|
||||||
child: Container(
|
child: Container(
|
||||||
@@ -93,7 +100,7 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
|||||||
color: Colors.white.withOpacity(0.5),
|
color: Colors.white.withOpacity(0.5),
|
||||||
borderRadius: BorderRadius.circular(10)),
|
borderRadius: BorderRadius.circular(10)),
|
||||||
),
|
),
|
||||||
const Positioned(
|
Positioned(
|
||||||
left: 20,
|
left: 20,
|
||||||
bottom: 0,
|
bottom: 0,
|
||||||
top: 0,
|
top: 0,
|
||||||
@@ -102,7 +109,7 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
|||||||
height: 70,
|
height: 70,
|
||||||
width: 70,
|
width: 70,
|
||||||
radius: 10,
|
radius: 10,
|
||||||
imageUrl:
|
imageUrl: provider.lastImageurl ??
|
||||||
"https://5.imimg.com/data5/SELLER/Default/2024/2/385126988/OL/DA/VW/8627346/1l-fortune-sunflower-oil.jpg",
|
"https://5.imimg.com/data5/SELLER/Default/2024/2/385126988/OL/DA/VW/8627346/1l-fortune-sunflower-oil.jpg",
|
||||||
backGroundColor: Colors.white,
|
backGroundColor: Colors.white,
|
||||||
),
|
),
|
||||||
@@ -113,15 +120,12 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
|||||||
const SizedBox(
|
const SizedBox(
|
||||||
width: 10,
|
width: 10,
|
||||||
),
|
),
|
||||||
Column(
|
Text(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
provider.countList.length.toString(),
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
style: context.customRegular(
|
||||||
children: [
|
Colors.white,
|
||||||
Text(
|
29,
|
||||||
provider.countList.length.toString(),
|
),
|
||||||
style: context.customRegular(Colors.white, 18),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
InkWell(
|
InkWell(
|
||||||
@@ -306,8 +310,12 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
|||||||
onTap: () async {
|
onTap: () async {
|
||||||
if (await SharedPrefUtils.getToken() !=
|
if (await SharedPrefUtils.getToken() !=
|
||||||
null) {
|
null) {
|
||||||
await provider.addToWithCart(context,
|
await provider.addToWithCart(
|
||||||
bestdealproduct.id!, bestdealproduct);
|
context,
|
||||||
|
bestdealproduct.id!,
|
||||||
|
bestdealproduct,
|
||||||
|
bestdealproduct
|
||||||
|
.productImages?.first.url);
|
||||||
} else {
|
} else {
|
||||||
context.push(MyRoutes.SIGNUP);
|
context.push(MyRoutes.SIGNUP);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:geolocator/geolocator.dart';
|
import 'package:geolocator/geolocator.dart';
|
||||||
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
||||||
|
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
||||||
import 'package:grocery_app/src/ui/cart/cartview_screen.dart';
|
import 'package:grocery_app/src/ui/cart/cartview_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/favourite/favourite_screen.dart';
|
import 'package:grocery_app/src/ui/favourite/favourite_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/header.dart';
|
import 'package:grocery_app/src/ui/header.dart';
|
||||||
@@ -38,6 +39,7 @@ class _BottomBarState extends State<BottomBarWidget> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
Provider.of<BottomNavProvider>(context, listen: false).getProfile(context);
|
||||||
_currentIndex = 0;
|
_currentIndex = 0;
|
||||||
bottomWidgetPageController = PageController(
|
bottomWidgetPageController = PageController(
|
||||||
initialPage: 0,
|
initialPage: 0,
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
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/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:grocery_app/src/common_widget/name_text_field.dart';
|
import 'package:grocery_app/src/common_widget/name_text_field.dart';
|
||||||
import 'package:grocery_app/src/common_widget/network_image.dart';
|
import 'package:grocery_app/src/common_widget/network_image.dart';
|
||||||
|
import 'package:grocery_app/src/logic/provider/profile_provider.dart';
|
||||||
import 'package:grocery_app/utils/constants/assets_constant.dart';
|
import 'package:grocery_app/utils/constants/assets_constant.dart';
|
||||||
import 'package:grocery_app/utils/constants/color_constant.dart';
|
import 'package:grocery_app/utils/constants/color_constant.dart';
|
||||||
|
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||||
|
import 'package:grocery_app/utils/constants/string_constant.dart';
|
||||||
import 'package:grocery_app/utils/extensions/uicontext.dart';
|
import 'package:grocery_app/utils/extensions/uicontext.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
class EditProfileScreen extends StatefulWidget {
|
class EditProfileScreen extends StatefulWidget {
|
||||||
const EditProfileScreen({super.key});
|
const EditProfileScreen({super.key});
|
||||||
@@ -15,6 +23,51 @@ class EditProfileScreen extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _EditProfileScreenState extends State<EditProfileScreen> {
|
class _EditProfileScreenState extends State<EditProfileScreen> {
|
||||||
|
String? name;
|
||||||
|
String? email;
|
||||||
|
String? profile;
|
||||||
|
File? _image;
|
||||||
|
final ImagePicker _picker = ImagePicker();
|
||||||
|
|
||||||
|
TextEditingController firstController = TextEditingController();
|
||||||
|
TextEditingController lastController = TextEditingController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
getUserDetails();
|
||||||
|
// TODO: implement initState
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
getUserDetails() async {
|
||||||
|
firstController.text = APPSTRING.userName;
|
||||||
|
lastController.text = APPSTRING.userLastName;
|
||||||
|
profile = APPSTRING.userProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Pick image from gallery or camera
|
||||||
|
Future<void> _pickImage() async {
|
||||||
|
final XFile? pickedFile =
|
||||||
|
await _picker.pickImage(source: ImageSource.gallery);
|
||||||
|
|
||||||
|
if (pickedFile != null) {
|
||||||
|
setState(() {
|
||||||
|
profile = pickedFile.path;
|
||||||
|
_image = File(pickedFile.path);
|
||||||
|
});
|
||||||
|
|
||||||
|
Provider.of<ProfileProvider>(context, listen: false)
|
||||||
|
.uploadImage(context, _image);
|
||||||
|
|
||||||
|
await _saveProfileImage(pickedFile.path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _saveProfileImage(String imagePath) async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
await prefs.setString('KEY_PROFILE', imagePath);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
@@ -43,40 +96,50 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
bottomNavigationBar: Container(
|
bottomNavigationBar:
|
||||||
color: Colors.transparent,
|
Consumer<ProfileProvider>(builder: (context, imageProvider, child) {
|
||||||
height: 60,
|
return Container(
|
||||||
child: Padding(
|
color: Colors.transparent,
|
||||||
padding: const EdgeInsets.only(bottom: 10),
|
height: 60,
|
||||||
child: Row(
|
child: Padding(
|
||||||
children: [
|
padding: const EdgeInsets.only(bottom: 10),
|
||||||
const SizedBox(
|
child: Row(
|
||||||
width: 15,
|
children: [
|
||||||
),
|
const SizedBox(
|
||||||
Expanded(
|
width: 15,
|
||||||
child: InkWell(
|
),
|
||||||
onTap: () {
|
Expanded(
|
||||||
Navigator.of(context).pop();
|
child: InkWell(
|
||||||
},
|
onTap: imageProvider.isImageLoading
|
||||||
child: Container(
|
? () {
|
||||||
height: 50,
|
imageProvider.createStore(context,
|
||||||
decoration: BoxDecoration(color: APPCOLOR.lightGreen, borderRadius: BorderRadius.circular(10)),
|
firstController.text, lastController.text);
|
||||||
child: Center(
|
}
|
||||||
child: Text(
|
: null,
|
||||||
"Update",
|
child: Container(
|
||||||
style: context.customRegular(Colors.white, 16),
|
height: 50,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: imageProvider.isImageLoading
|
||||||
|
? APPCOLOR.lightGreen
|
||||||
|
: APPCOLOR.grey666666,
|
||||||
|
borderRadius: BorderRadius.circular(10)),
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
"Update",
|
||||||
|
style: context.customRegular(Colors.white, 16),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
const SizedBox(
|
||||||
const SizedBox(
|
width: 15,
|
||||||
width: 15,
|
),
|
||||||
),
|
],
|
||||||
],
|
),
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
),
|
}),
|
||||||
body: Padding(
|
body: Padding(
|
||||||
padding: context.bodyAllPadding,
|
padding: context.bodyAllPadding,
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
@@ -90,26 +153,37 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
|
|||||||
Stack(
|
Stack(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
children: [
|
children: [
|
||||||
const AppNetworkImage(
|
//
|
||||||
height: 80,
|
CircleAvatar(
|
||||||
width: 80,
|
radius: 40,
|
||||||
imageUrl: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdQLwDqDwd2JfzifvfBTFT8I7iKFFevcedYg&s",
|
backgroundColor: Colors.white,
|
||||||
radius: 90,
|
backgroundImage: _image != null
|
||||||
backGroundColor: Colors.white,
|
? FileImage(_image!) as ImageProvider
|
||||||
boxFit: BoxFit.fill,
|
: (profile != null && profile!.isNotEmpty
|
||||||
|
? NetworkImage(profile!)
|
||||||
|
: const AssetImage("assets/default_profile.png")
|
||||||
|
as ImageProvider),
|
||||||
),
|
),
|
||||||
Positioned(
|
Positioned(
|
||||||
bottom: 0,
|
bottom: 0,
|
||||||
right: 0,
|
right: 0,
|
||||||
child: Container(
|
child: GestureDetector(
|
||||||
height: 20,
|
onTap: () {
|
||||||
width: 20,
|
_pickImage();
|
||||||
decoration: BoxDecoration(color: APPCOLOR.lightGreen, border: Border.all(color: Colors.white), borderRadius: BorderRadius.circular(5)),
|
},
|
||||||
child: Center(
|
child: Container(
|
||||||
child: Icon(
|
height: 20,
|
||||||
MdiIcons.pencil,
|
width: 20,
|
||||||
size: 10,
|
decoration: BoxDecoration(
|
||||||
color: Colors.white,
|
color: APPCOLOR.lightGreen,
|
||||||
|
border: Border.all(color: Colors.white),
|
||||||
|
borderRadius: BorderRadius.circular(5)),
|
||||||
|
child: Center(
|
||||||
|
child: Icon(
|
||||||
|
MdiIcons.pencil,
|
||||||
|
size: 10,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
@@ -120,34 +194,103 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
|
|||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 15,
|
height: 15,
|
||||||
),
|
),
|
||||||
const NameTextField(
|
Container(
|
||||||
name: "Name",
|
height: 60,
|
||||||
initText: "Smith Mate",
|
width: MediaQuery.sizeOf(context).width,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(color: APPCOLOR.lightGreen),
|
||||||
|
borderRadius: BorderRadius.circular(15)),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"First Name",
|
||||||
|
style: context.customMedium(APPCOLOR.lightGreen, 14),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: TextFormField(
|
||||||
|
controller: firstController,
|
||||||
|
decoration: const InputDecoration(
|
||||||
|
border: InputBorder.none,
|
||||||
|
isCollapsed: true,
|
||||||
|
contentPadding: EdgeInsets.only(
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 5,
|
||||||
|
top: 5,
|
||||||
|
)),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 10,
|
height: 10,
|
||||||
),
|
),
|
||||||
const NameTextField(
|
Container(
|
||||||
name: "Email Address",
|
height: 60,
|
||||||
initText: "SmithMate@example.com",
|
width: MediaQuery.sizeOf(context).width,
|
||||||
),
|
decoration: BoxDecoration(
|
||||||
const SizedBox(
|
border: Border.all(color: APPCOLOR.lightGreen),
|
||||||
height: 10,
|
borderRadius: BorderRadius.circular(15)),
|
||||||
),
|
child: Padding(
|
||||||
const NameTextField(
|
padding: const EdgeInsets.all(8.0),
|
||||||
name: "Mobile Number",
|
child: Column(
|
||||||
initText: "(205) 555-0100",
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
const SizedBox(
|
children: [
|
||||||
height: 10,
|
Text(
|
||||||
),
|
"Last Name ",
|
||||||
const NameTextField(
|
style: context.customMedium(APPCOLOR.lightGreen, 14),
|
||||||
name: "Enter Address",
|
),
|
||||||
initText: "8502 Preston Rd. inglewood, USA",
|
Expanded(
|
||||||
),
|
child: TextFormField(
|
||||||
const SizedBox(
|
controller: lastController,
|
||||||
height: 10,
|
decoration: const InputDecoration(
|
||||||
|
border: InputBorder.none,
|
||||||
|
isCollapsed: true,
|
||||||
|
contentPadding: EdgeInsets.only(
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 5,
|
||||||
|
top: 5,
|
||||||
|
)),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
|
// const NameTextField(
|
||||||
|
// name: "Last Name",
|
||||||
|
// initText: "Smith Mate",
|
||||||
|
// ),
|
||||||
|
// const SizedBox(
|
||||||
|
// height: 10,
|
||||||
|
// ),
|
||||||
|
// const NameTextField(
|
||||||
|
// name: "Email Address",
|
||||||
|
// initText: "SmithMate@example.com",
|
||||||
|
// ),
|
||||||
|
// const SizedBox(
|
||||||
|
// height: 10,
|
||||||
|
// ),
|
||||||
|
// const NameTextField(
|
||||||
|
// name: "Mobile Number",
|
||||||
|
// initText: "(205) 555-0100",
|
||||||
|
// ),
|
||||||
|
// const SizedBox(
|
||||||
|
// height: 10,
|
||||||
|
// ),
|
||||||
|
// const NameTextField(
|
||||||
|
// name: "Enter Address",
|
||||||
|
// initText: "8502 Preston Rd. inglewood, USA",
|
||||||
|
// ),
|
||||||
|
// const SizedBox(
|
||||||
|
// height: 10,
|
||||||
|
// ),
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:fluttertoast/fluttertoast.dart';
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
@@ -79,10 +80,25 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
|||||||
|
|
||||||
Widget productWidget() {
|
Widget productWidget() {
|
||||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||||
if (provider.isLoadingg) {
|
if (provider.isLoadingg)
|
||||||
|
{
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(left: 120),
|
padding: const EdgeInsets.only(left: 120),
|
||||||
child: CircularProgressIndicator(),
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
width: 30,
|
||||||
|
height: 30,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.transparent,
|
||||||
|
borderRadius: BorderRadius.circular(20),
|
||||||
|
border: Border.all(
|
||||||
|
color: APPCOLOR.bgGrey,
|
||||||
|
width: 1,
|
||||||
|
)),
|
||||||
|
child: const Center(
|
||||||
|
child: CupertinoActivityIndicator(),
|
||||||
|
),
|
||||||
|
)),
|
||||||
);
|
);
|
||||||
} else if (provider.products.isEmpty) {
|
} else if (provider.products.isEmpty) {
|
||||||
return Padding(
|
return Padding(
|
||||||
@@ -106,8 +122,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
|||||||
crossAxisSpacing: 10,
|
crossAxisSpacing: 10,
|
||||||
mainAxisSpacing: 10,
|
mainAxisSpacing: 10,
|
||||||
),
|
),
|
||||||
itemBuilder: (context, index)
|
itemBuilder: (context, index) {
|
||||||
{
|
|
||||||
var product = provider.products[index];
|
var product = provider.products[index];
|
||||||
|
|
||||||
return InkWell(
|
return InkWell(
|
||||||
@@ -189,31 +204,31 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
|||||||
// ),
|
// ),
|
||||||
// ),
|
// ),
|
||||||
|
|
||||||
Positioned(
|
// Positioned(
|
||||||
right: 5,
|
// right: 5,
|
||||||
top: 5,
|
// top: 5,
|
||||||
child: InkWell(
|
// child: InkWell(
|
||||||
onTap: () async {
|
// onTap: () async {
|
||||||
if (await SharedPrefUtils
|
// if (await SharedPrefUtils
|
||||||
.getToken() !=
|
// .getToken() !=
|
||||||
null) {
|
// null) {
|
||||||
provider.toggleWishlist(
|
// provider.toggleWishlist(
|
||||||
context, product.id!);
|
// context, product.id!);
|
||||||
} else {
|
// } else {
|
||||||
context.push(MyRoutes.SIGNUP);
|
// context.push(MyRoutes.SIGNUP);
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
child: Icon(
|
// child: Icon(
|
||||||
provider.wishlist.contains(product.id)
|
// provider.wishlist.contains(product.id)
|
||||||
? Icons.favorite
|
// ? Icons.favorite
|
||||||
: Icons.favorite_border,
|
// : Icons.favorite_border,
|
||||||
color: provider.wishlist
|
// color: provider.wishlist
|
||||||
.contains(product.id)
|
// .contains(product.id)
|
||||||
? Colors.red
|
// ? Colors.red
|
||||||
: Colors.grey,
|
// : Colors.grey,
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -221,7 +236,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
|||||||
Text(
|
Text(
|
||||||
product.name ?? " ",
|
product.name ?? " ",
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
maxLines: 2,
|
maxLines: 3,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: context.customMedium(
|
style: context.customMedium(
|
||||||
APPCOLOR.balck1A1A1A, 14),
|
APPCOLOR.balck1A1A1A, 14),
|
||||||
@@ -238,6 +253,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 3),
|
const SizedBox(height: 3),
|
||||||
|
Spacer(),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Column(
|
Column(
|
||||||
@@ -281,7 +297,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
|||||||
if (await SharedPrefUtils.getToken() !=
|
if (await SharedPrefUtils.getToken() !=
|
||||||
null) {
|
null) {
|
||||||
await provider.addToCart(
|
await provider.addToCart(
|
||||||
context, product.id!);
|
context, product.id!, 1);
|
||||||
} else {
|
} else {
|
||||||
context.push(MyRoutes.SIGNUP);
|
context.push(MyRoutes.SIGNUP);
|
||||||
}
|
}
|
||||||
@@ -327,6 +343,8 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -348,7 +366,21 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
|||||||
final activeIndexProvider = Provider.of<ProductProvider>(context);
|
final activeIndexProvider = Provider.of<ProductProvider>(context);
|
||||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||||
if (provider.iscategroyloading) {
|
if (provider.iscategroyloading) {
|
||||||
return Center(child: CircularProgressIndicator());
|
return Center(
|
||||||
|
child: Container(
|
||||||
|
width: 20,
|
||||||
|
height: 20,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: APPCOLOR.bgGrey,
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
border: Border.all(
|
||||||
|
color: APPCOLOR.bgGrey,
|
||||||
|
width: 1,
|
||||||
|
)),
|
||||||
|
child: const Center(
|
||||||
|
child: CupertinoActivityIndicator(),
|
||||||
|
),
|
||||||
|
));
|
||||||
} else if (provider.categoryList.isEmpty) {
|
} else if (provider.categoryList.isEmpty) {
|
||||||
return Center(child: Text('No products available'));
|
return Center(child: Text('No products available'));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
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/common_widget/network_image.dart';
|
||||||
import 'package:grocery_app/src/core/routes/routes.dart';
|
import 'package:grocery_app/src/core/routes/routes.dart';
|
||||||
import 'package:grocery_app/src/data/allProduct_model.dart';
|
import 'package:grocery_app/src/data/allProduct_model.dart';
|
||||||
|
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
||||||
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
||||||
import 'package:grocery_app/utils/constants/assets_constant.dart';
|
import 'package:grocery_app/utils/constants/assets_constant.dart';
|
||||||
import 'package:grocery_app/utils/constants/color_constant.dart';
|
import 'package:grocery_app/utils/constants/color_constant.dart';
|
||||||
@@ -18,6 +19,7 @@ import 'package:grocery_app/utils/extensions/uicontext.dart';
|
|||||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:readmore/readmore.dart';
|
import 'package:readmore/readmore.dart';
|
||||||
|
import 'package:shimmer/shimmer.dart';
|
||||||
|
|
||||||
class ProductDetails extends StatefulWidget {
|
class ProductDetails extends StatefulWidget {
|
||||||
String id;
|
String id;
|
||||||
@@ -95,7 +97,6 @@ class _ProductDetailsState extends State<ProductDetails> {
|
|||||||
prodectDtails(),
|
prodectDtails(),
|
||||||
Divider(),
|
Divider(),
|
||||||
reviews(),
|
reviews(),
|
||||||
Divider(),
|
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
child: Text("Similar Products",
|
child: Text("Similar Products",
|
||||||
@@ -110,20 +111,39 @@ class _ProductDetailsState extends State<ProductDetails> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// bottomNavigationBar: bottomBar(),
|
bottomNavigationBar: bottomBar(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double calculateDiscountPercentage(double basePrice, double discountPrice) {
|
||||||
|
print(
|
||||||
|
"Base Price (Before Discount): $basePrice, Discount Price (After Discount): $discountPrice");
|
||||||
|
|
||||||
|
if (basePrice <= 0 || discountPrice <= 0 || discountPrice > basePrice) {
|
||||||
|
print("Error: Invalid price values.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
double discountAmount = basePrice - discountPrice;
|
||||||
|
double discountPercentage = (discountAmount / basePrice) * 100;
|
||||||
|
|
||||||
|
return discountPercentage;
|
||||||
|
}
|
||||||
|
|
||||||
Widget prodectDtails() {
|
Widget prodectDtails() {
|
||||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||||
if (provider.isProductLoading) {
|
if (provider.isProductLoading) {
|
||||||
return Center(
|
return _buildSkeletonLoader();
|
||||||
child: CircularProgressIndicator(
|
|
||||||
color: Colors.green,
|
|
||||||
));
|
|
||||||
} else if (provider.productDetails.data == null) {
|
} else if (provider.productDetails.data == null) {
|
||||||
return Center(child: Text('No products available'));
|
return Center(child: Text('No products available'));
|
||||||
} else {
|
} else {
|
||||||
|
provider.setProductPrice(
|
||||||
|
double.parse(provider.productDetails.data!.discountPrice));
|
||||||
|
provider.productQuantity = provider.productDetails.data!.quantity;
|
||||||
|
|
||||||
|
if (provider.productDetails.data!.isInWishlist!) {
|
||||||
|
provider.wishlist.contains(provider.productDetails.data!.id);
|
||||||
|
}
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
SizedBox(
|
SizedBox(
|
||||||
@@ -206,43 +226,13 @@ class _ProductDetailsState extends State<ProductDetails> {
|
|||||||
color: Colors.green,
|
color: Colors.green,
|
||||||
borderRadius: BorderRadius.circular(5),
|
borderRadius: BorderRadius.circular(5),
|
||||||
),
|
),
|
||||||
child: Text("10% OFF",
|
child: Text(
|
||||||
|
"${calculateDiscountPercentage(double.parse(provider.productDetails.data!.basePrice), double.parse(provider.productDetails.data!.discountPrice))}% OFF",
|
||||||
style:
|
style:
|
||||||
TextStyle(color: Colors.white, fontSize: 14)),
|
TextStyle(color: Colors.white, fontSize: 14)),
|
||||||
),
|
),
|
||||||
Spacer(),
|
|
||||||
InkWell(
|
|
||||||
onTap: () async {
|
|
||||||
if (await SharedPrefUtils.getToken() != null) {
|
|
||||||
provider.toggleWishlist(
|
|
||||||
context, provider.productDetails.data!.id!);
|
|
||||||
} else {
|
|
||||||
context.push(MyRoutes.SIGNUP);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Icon(
|
|
||||||
provider.wishlist
|
|
||||||
.contains(provider.productDetails.data!.id)
|
|
||||||
? Icons.favorite
|
|
||||||
: Icons.favorite_border,
|
|
||||||
color: provider.wishlist
|
|
||||||
.contains(provider.productDetails.data!.id)
|
|
||||||
? Colors.red
|
|
||||||
: Colors.grey,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SizedBox(height: 10),
|
|
||||||
ReadMoreText(
|
|
||||||
provider.productDetails.data!.description ?? "",
|
|
||||||
trimMode: TrimMode.Line,
|
|
||||||
trimLines: 2,
|
|
||||||
colorClickableText: APPCOLOR.appGreen,
|
|
||||||
trimCollapsedText: 'Read More',
|
|
||||||
trimExpandedText: 'Show less',
|
|
||||||
style: context.customMedium(APPCOLOR.balck1A1A1A, 14),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -252,262 +242,320 @@ class _ProductDetailsState extends State<ProductDetails> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget reviews() {
|
Widget _buildSkeletonLoader() {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text("Reviews & Ratings",
|
Shimmer.fromColors(
|
||||||
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
|
baseColor: Colors.grey[300]!,
|
||||||
SizedBox(height: 10),
|
highlightColor: Colors.grey[100]!,
|
||||||
Row(
|
child: Container(
|
||||||
children: [
|
height: 300,
|
||||||
Text("4.2",
|
color: Colors.white,
|
||||||
style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)),
|
),
|
||||||
SizedBox(
|
|
||||||
width: 10,
|
|
||||||
),
|
|
||||||
Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
RatingStars(
|
|
||||||
value: value,
|
|
||||||
onValueChanged: (v) {
|
|
||||||
//
|
|
||||||
setState(() {
|
|
||||||
value = v;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
starBuilder: (index, color) => Icon(
|
|
||||||
Icons.star,
|
|
||||||
color: color,
|
|
||||||
),
|
|
||||||
starCount: 5,
|
|
||||||
starSize: 20,
|
|
||||||
valueLabelColor: const Color(0xff9b9b9b),
|
|
||||||
valueLabelTextStyle: const TextStyle(
|
|
||||||
color: Colors.white,
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
fontStyle: FontStyle.normal,
|
|
||||||
fontSize: 12.0),
|
|
||||||
valueLabelRadius: 10,
|
|
||||||
maxValue: 5,
|
|
||||||
starSpacing: 2,
|
|
||||||
maxValueVisibility: false,
|
|
||||||
valueLabelVisibility: false,
|
|
||||||
animationDuration: Duration(milliseconds: 1000),
|
|
||||||
valueLabelPadding:
|
|
||||||
const EdgeInsets.symmetric(vertical: 1, horizontal: 8),
|
|
||||||
valueLabelMargin: const EdgeInsets.only(right: 8),
|
|
||||||
starOffColor: const Color(0xffe7e8ea),
|
|
||||||
starColor: Colors.green,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
"April 10, 2023",
|
|
||||||
style: TextStyle(color: Colors.grey),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
SizedBox(height: 10),
|
SizedBox(height: 10),
|
||||||
Row(
|
Shimmer.fromColors(
|
||||||
crossAxisAlignment:
|
baseColor: Colors.grey[300]!,
|
||||||
CrossAxisAlignment.start, // Align items at the top
|
highlightColor: Colors.grey[100]!,
|
||||||
children: [
|
child: Container(
|
||||||
CircleAvatar(
|
height: 20,
|
||||||
backgroundImage: NetworkImage('https://via.placeholder.com/50'),
|
width: double.infinity,
|
||||||
),
|
color: Colors.white,
|
||||||
SizedBox(width: 10),
|
),
|
||||||
|
|
||||||
// Column for Text and RatingStars
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
Row(
|
|
||||||
mainAxisAlignment:
|
|
||||||
MainAxisAlignment.spaceBetween, // Proper spacing
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
"Johnson Smith",
|
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
),
|
|
||||||
RatingStars(
|
|
||||||
value: value,
|
|
||||||
starBuilder: (index, color) => Icon(
|
|
||||||
Icons.star,
|
|
||||||
color: color,
|
|
||||||
),
|
|
||||||
starCount: 5,
|
|
||||||
starSize: 20,
|
|
||||||
maxValue: 5,
|
|
||||||
starSpacing: 2,
|
|
||||||
maxValueVisibility: false,
|
|
||||||
valueLabelVisibility: false,
|
|
||||||
animationDuration: Duration(milliseconds: 1000),
|
|
||||||
valueLabelPadding: const EdgeInsets.symmetric(
|
|
||||||
vertical: 1, horizontal: 8),
|
|
||||||
valueLabelMargin: const EdgeInsets.only(right: 8),
|
|
||||||
starOffColor: const Color(0xffe7e8ea),
|
|
||||||
starColor: Colors.green,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(height: 4),
|
|
||||||
Text(
|
|
||||||
"April 10, 2023",
|
|
||||||
style: TextStyle(color: Colors.grey),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
SizedBox(height: 10),
|
SizedBox(height: 10),
|
||||||
ReadMoreText(
|
Shimmer.fromColors(
|
||||||
'Flutter is Google’s mobile UI open source framework to build high-quality native (super fast) interfaces for iOS and Android apps with the unified codebase.',
|
baseColor: Colors.grey[300]!,
|
||||||
trimMode: TrimMode.Line,
|
highlightColor: Colors.grey[100]!,
|
||||||
trimLines: 2,
|
child: Container(
|
||||||
colorClickableText: APPCOLOR.appGreen,
|
height: 20,
|
||||||
trimCollapsedText: 'Read More',
|
width: 150,
|
||||||
trimExpandedText: 'Show less',
|
color: Colors.white,
|
||||||
style: context.customMedium(APPCOLOR.balck1A1A1A, 14),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget similarProducts() {
|
Widget reviews() {
|
||||||
// return SizedBox(
|
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||||
// height: 222,
|
if (provider.isProductLoading) {
|
||||||
// child: ListView.builder(
|
return SizedBox.shrink();
|
||||||
// itemCount: 5,
|
} else if (provider.productDetails.data == null) {
|
||||||
// scrollDirection: Axis.horizontal,
|
return Center(child: Text('No products available'));
|
||||||
// itemBuilder: (context, index) {
|
} else {
|
||||||
// return Padding(
|
return provider.productDetails.data!.productReview!.isNotEmpty
|
||||||
// padding: const EdgeInsets.only(right: 10, bottom: 5, top: 5),
|
? Padding(
|
||||||
// child: Container(
|
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
// height: 215,
|
child: Column(
|
||||||
// width: 150,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
// decoration: BoxDecoration(
|
children: [
|
||||||
// color: Colors.white,
|
Text("Reviews & Ratings",
|
||||||
// borderRadius: BorderRadius.circular(15),
|
style: TextStyle(
|
||||||
// boxShadow: [
|
fontSize: 20, fontWeight: FontWeight.bold)),
|
||||||
// BoxShadow(
|
SizedBox(height: 10),
|
||||||
// color: Colors.grey.withOpacity(0.1),
|
Row(
|
||||||
// blurRadius: 1,
|
children: [
|
||||||
// offset: const Offset(5, 5),
|
Text("4.2",
|
||||||
// ),
|
style: TextStyle(
|
||||||
// ]),
|
fontSize: 30, fontWeight: FontWeight.bold)),
|
||||||
// child: Padding(
|
SizedBox(
|
||||||
// padding: const EdgeInsets.all(5),
|
width: 10,
|
||||||
// child: Column(
|
),
|
||||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
Column(
|
||||||
// children: [
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
// Container(
|
children: [
|
||||||
// height: 100,
|
RatingStars(
|
||||||
// width: 150,
|
value: value,
|
||||||
// decoration: BoxDecoration(
|
onValueChanged: (v) {
|
||||||
// color: APPCOLOR.bgGrey,
|
//
|
||||||
// borderRadius: BorderRadius.circular(15)),
|
setState(() {
|
||||||
// child: const Stack(
|
value = v;
|
||||||
// alignment: Alignment.center,
|
});
|
||||||
// children: [
|
},
|
||||||
// AppNetworkImage(
|
starBuilder: (index, color) => Icon(
|
||||||
// height: 70,
|
Icons.star,
|
||||||
// width: 70,
|
color: color,
|
||||||
// imageUrl:
|
),
|
||||||
// "https://5.imimg.com/data5/SELLER/Default/2024/2/385126988/OL/DA/VW/8627346/1l-fortune-sunflower-oil.jpg",
|
starCount: 5,
|
||||||
// backGroundColor: Colors.transparent),
|
starSize: 20,
|
||||||
// Positioned(
|
valueLabelColor: const Color(0xff9b9b9b),
|
||||||
// right: 5,
|
valueLabelTextStyle: const TextStyle(
|
||||||
// top: 5,
|
color: Colors.white,
|
||||||
// child: Icon(Icons.favorite_border))
|
fontWeight: FontWeight.w400,
|
||||||
// ],
|
fontStyle: FontStyle.normal,
|
||||||
// ),
|
fontSize: 12.0),
|
||||||
// ),
|
valueLabelRadius: 10,
|
||||||
// Text(
|
maxValue: 5,
|
||||||
// "Fortune Arhar Dal (Toor Dal)",
|
starSpacing: 2,
|
||||||
// textAlign: TextAlign.left,
|
maxValueVisibility: false,
|
||||||
// maxLines: 2,
|
valueLabelVisibility: false,
|
||||||
// overflow: TextOverflow.ellipsis,
|
animationDuration: Duration(milliseconds: 1000),
|
||||||
// style: context.customMedium(APPCOLOR.balck1A1A1A, 14),
|
valueLabelPadding: const EdgeInsets.symmetric(
|
||||||
// ),
|
vertical: 1, horizontal: 8),
|
||||||
// const SizedBox(
|
valueLabelMargin: const EdgeInsets.only(right: 8),
|
||||||
// height: 5,
|
starOffColor: const Color(0xffe7e8ea),
|
||||||
// ),
|
starColor: Colors.green,
|
||||||
// Text(
|
),
|
||||||
// "500 ML",
|
Text(
|
||||||
// textAlign: TextAlign.left,
|
"April 10, 2023",
|
||||||
// maxLines: 1,
|
style: TextStyle(color: Colors.grey),
|
||||||
// overflow: TextOverflow.ellipsis,
|
),
|
||||||
// style: context.customMedium(
|
],
|
||||||
// Colors.grey.withOpacity(0.8), 12),
|
),
|
||||||
// ),
|
],
|
||||||
// const SizedBox(
|
),
|
||||||
// height: 3,
|
SizedBox(height: 10),
|
||||||
// ),
|
Row(
|
||||||
// Row(
|
crossAxisAlignment:
|
||||||
// children: [
|
CrossAxisAlignment.start, // Align items at the top
|
||||||
// Expanded(
|
children: [
|
||||||
// child: Row(
|
CircleAvatar(
|
||||||
// children: [
|
backgroundImage:
|
||||||
// Text(
|
NetworkImage('https://via.placeholder.com/50'),
|
||||||
// "\$12",
|
),
|
||||||
// textAlign: TextAlign.left,
|
SizedBox(width: 10),
|
||||||
// maxLines: 1,
|
|
||||||
// overflow: TextOverflow.ellipsis,
|
// Column for Text and RatingStars
|
||||||
// style: context.customSemiBold(Colors.black, 12),
|
Expanded(
|
||||||
// ),
|
child: Column(
|
||||||
// const SizedBox(
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
// width: 5,
|
children: [
|
||||||
// ),
|
Row(
|
||||||
// Text(
|
mainAxisAlignment: MainAxisAlignment
|
||||||
// "\$14",
|
.spaceBetween, // Proper spacing
|
||||||
// textAlign: TextAlign.left,
|
children: [
|
||||||
// maxLines: 1,
|
Text(
|
||||||
// overflow: TextOverflow.ellipsis,
|
"Johnson Smith",
|
||||||
// style: context
|
style:
|
||||||
// .customMedium(
|
TextStyle(fontWeight: FontWeight.bold),
|
||||||
// Colors.grey.withOpacity(0.8), 12)
|
),
|
||||||
// .copyWith(
|
RatingStars(
|
||||||
// decoration: TextDecoration.lineThrough,
|
value: value,
|
||||||
// ),
|
starBuilder: (index, color) => Icon(
|
||||||
// ),
|
Icons.star,
|
||||||
// ],
|
color: color,
|
||||||
// )),
|
),
|
||||||
// Expanded(
|
starCount: 5,
|
||||||
// child: Align(
|
starSize: 20,
|
||||||
// alignment: Alignment.centerRight,
|
maxValue: 5,
|
||||||
// child: Container(
|
starSpacing: 2,
|
||||||
// height: 30,
|
maxValueVisibility: false,
|
||||||
// width: 50,
|
valueLabelVisibility: false,
|
||||||
// decoration: BoxDecoration(
|
animationDuration:
|
||||||
// color: APPCOLOR.lightGreen,
|
Duration(milliseconds: 1000),
|
||||||
// borderRadius: BorderRadius.circular(5),
|
valueLabelPadding:
|
||||||
// ),
|
const EdgeInsets.symmetric(
|
||||||
// child: Center(
|
vertical: 1, horizontal: 8),
|
||||||
// child: Text(
|
valueLabelMargin:
|
||||||
// 'Add',
|
const EdgeInsets.only(right: 8),
|
||||||
// style: context.customRegular(Colors.white, 12),
|
starOffColor: const Color(0xffe7e8ea),
|
||||||
// )),
|
starColor: Colors.green,
|
||||||
// ),
|
),
|
||||||
// ),
|
],
|
||||||
// )
|
),
|
||||||
// ],
|
SizedBox(height: 4),
|
||||||
// ),
|
Text(
|
||||||
// ],
|
"April 10, 2023",
|
||||||
// ),
|
style: TextStyle(color: Colors.grey),
|
||||||
// ),
|
),
|
||||||
// ),
|
],
|
||||||
// );
|
),
|
||||||
// },
|
),
|
||||||
// ),
|
],
|
||||||
// );
|
),
|
||||||
// }
|
SizedBox(height: 10),
|
||||||
|
ReadMoreText(
|
||||||
|
'Flutter is 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() {
|
Widget bestDeal() {
|
||||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||||
@@ -678,7 +726,7 @@ class _ProductDetailsState extends State<ProductDetails> {
|
|||||||
false
|
false
|
||||||
? null
|
? null
|
||||||
: () => provider.addToCart(
|
: () => provider.addToCart(
|
||||||
context, bestdealproduct.id!);
|
context, bestdealproduct.id!, 1);
|
||||||
} else {
|
} else {
|
||||||
context.push(MyRoutes.SIGNUP);
|
context.push(MyRoutes.SIGNUP);
|
||||||
}
|
}
|
||||||
@@ -730,71 +778,90 @@ class _ProductDetailsState extends State<ProductDetails> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget bottomBar() {
|
Widget bottomBar() {
|
||||||
return Consumer<ProductProvider>(
|
return Consumer<ProductProvider>(builder: (context, cartProvider, child) {
|
||||||
builder: (context, cartProvider, child) {
|
return Container(
|
||||||
return Container(
|
padding: EdgeInsets.all(16),
|
||||||
padding: EdgeInsets.all(16),
|
decoration: BoxDecoration(
|
||||||
decoration: BoxDecoration(
|
color: Colors.white,
|
||||||
color: Colors.white,
|
boxShadow: [BoxShadow(color: Colors.grey.shade300, blurRadius: 10)],
|
||||||
boxShadow: [BoxShadow(color: Colors.grey.shade300, blurRadius: 10)],
|
),
|
||||||
),
|
child: Row(
|
||||||
child: Row(
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
children: [
|
||||||
children: [
|
Row(
|
||||||
Row(
|
children: [
|
||||||
children: [
|
IconButton(
|
||||||
IconButton(
|
icon: Icon(Icons.remove_circle_outline),
|
||||||
icon: Icon(Icons.remove_circle_outline),
|
onPressed: cartProvider.decreaseQuantity,
|
||||||
onPressed: cartProvider.decreaseQuantity,
|
),
|
||||||
),
|
Text("${cartProvider.quantity}",
|
||||||
Text("${cartProvider.quantity}",
|
style:
|
||||||
style:
|
TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||||
TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
IconButton(
|
||||||
IconButton(
|
icon: Icon(Icons.add_circle_outline),
|
||||||
icon: Icon(Icons.add_circle_outline),
|
onPressed: cartProvider.increaseQuantity,
|
||||||
onPressed: cartProvider.increaseQuantity,
|
),
|
||||||
),
|
],
|
||||||
],
|
),
|
||||||
|
Container(
|
||||||
|
height: 50,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: APPCOLOR.lightGreen,
|
||||||
|
borderRadius: BorderRadius.circular(5),
|
||||||
),
|
),
|
||||||
Container(
|
child: Padding(
|
||||||
height: 50,
|
padding: const EdgeInsets.all(8.0),
|
||||||
decoration: BoxDecoration(
|
child: Center(
|
||||||
color: APPCOLOR.lightGreen,
|
child: Row(
|
||||||
borderRadius: BorderRadius.circular(5),
|
children: [
|
||||||
),
|
InkWell(
|
||||||
child: Padding(
|
onTap: () {
|
||||||
padding: const EdgeInsets.all(8.0),
|
cartProvider.addToCart(
|
||||||
child: Center(
|
context,
|
||||||
child: Row(
|
cartProvider.productDetails.data!.id!,
|
||||||
children: [
|
cartProvider.quantity);
|
||||||
Text(
|
},
|
||||||
'Add to Cart',
|
child: cartProvider.isLoadingCart
|
||||||
style: TextStyle(
|
? Padding(
|
||||||
fontSize: 20,
|
padding:
|
||||||
fontWeight: FontWeight.bold,
|
const EdgeInsets.only(left: 40, right: 40),
|
||||||
color: Colors.white),
|
child: Container(
|
||||||
),
|
height: 15,
|
||||||
SizedBox(width: 10),
|
width: 15,
|
||||||
Container(
|
child: Center(
|
||||||
width: 2, height: 50, color: APPCOLOR.whiteFBFEFB),
|
child: CircularProgressIndicator(
|
||||||
SizedBox(width: 10),
|
color: Colors.white, strokeWidth: 2),
|
||||||
Text(
|
),
|
||||||
"\$${cartProvider.totalPrice}",
|
),
|
||||||
style: TextStyle(
|
)
|
||||||
fontSize: 25,
|
: Text(
|
||||||
fontWeight: FontWeight.bold,
|
'Add to Cart',
|
||||||
color: Colors.white),
|
style: TextStyle(
|
||||||
),
|
fontSize: 20,
|
||||||
],
|
fontWeight: FontWeight.bold,
|
||||||
),
|
color: Colors.white),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 10),
|
||||||
|
Container(
|
||||||
|
width: 2, height: 50, color: APPCOLOR.whiteFBFEFB),
|
||||||
|
SizedBox(width: 10),
|
||||||
|
Text(
|
||||||
|
"\$${cartProvider.totalPrice}",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 25,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.white),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
],
|
)
|
||||||
),
|
],
|
||||||
);
|
),
|
||||||
},
|
);
|
||||||
);
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,16 +3,19 @@ import 'package:grocery_app/src/common_widget/network_image.dart';
|
|||||||
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
||||||
import 'package:grocery_app/src/ui/card_checkout/card_checkout_screen.dart';
|
import 'package:grocery_app/src/ui/card_checkout/card_checkout_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/edit_profile/edit_profile_screen.dart';
|
import 'package:grocery_app/src/ui/edit_profile/edit_profile_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/map/google_map.dart';
|
|
||||||
import 'package:grocery_app/src/ui/mapscreen/map_screen.dart';
|
import 'package:grocery_app/src/ui/mapscreen/map_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/message/message_screen.dart';
|
import 'package:grocery_app/src/ui/message/message_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/notification/notification_screen.dart';
|
import 'package:grocery_app/src/ui/notification/notification_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/rating_review/rating_review_screen.dart';
|
import 'package:grocery_app/src/ui/rating_review/rating_review_screen.dart';
|
||||||
import 'package:grocery_app/src/ui/static_page/static_page_screen.dart';
|
import 'package:grocery_app/src/ui/static_page/static_page_screen.dart';
|
||||||
import 'package:grocery_app/utils/constants/color_constant.dart';
|
import 'package:grocery_app/utils/constants/color_constant.dart';
|
||||||
|
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||||
|
import 'package:grocery_app/utils/constants/string_constant.dart';
|
||||||
import 'package:grocery_app/utils/extensions/uicontext.dart';
|
import 'package:grocery_app/utils/extensions/uicontext.dart';
|
||||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
class ProfileScreen extends StatefulWidget {
|
class ProfileScreen extends StatefulWidget {
|
||||||
const ProfileScreen({super.key});
|
const ProfileScreen({super.key});
|
||||||
@@ -25,7 +28,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
|||||||
var top = 0.0;
|
var top = 0.0;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context)
|
||||||
|
{
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: NestedScrollView(
|
body: NestedScrollView(
|
||||||
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
|
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
|
||||||
@@ -69,34 +73,34 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
|||||||
AppNetworkImage(
|
AppNetworkImage(
|
||||||
height: top < 150 ? 30 : 50,
|
height: top < 150 ? 30 : 50,
|
||||||
width: top < 150 ? 30 : 50,
|
width: top < 150 ? 30 : 50,
|
||||||
imageUrl:
|
imageUrl: "${APPSTRING.userProfile ?? ""}" ??
|
||||||
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdQLwDqDwd2JfzifvfBTFT8I7iKFFevcedYg&s",
|
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdQLwDqDwd2JfzifvfBTFT8I7iKFFevcedYg&s",
|
||||||
radius: 90,
|
radius: 90,
|
||||||
backGroundColor: Colors.white,
|
backGroundColor: Colors.white,
|
||||||
boxFit: BoxFit.fill,
|
boxFit: BoxFit.fill,
|
||||||
),
|
),
|
||||||
top > 100
|
// top > 100
|
||||||
? Positioned(
|
// ? Positioned(
|
||||||
bottom: 0,
|
// bottom: 0,
|
||||||
right: 0,
|
// right: 0,
|
||||||
child: Container(
|
// child: Container(
|
||||||
height: 18,
|
// height: 18,
|
||||||
width: 18,
|
// width: 18,
|
||||||
decoration: BoxDecoration(
|
// decoration: BoxDecoration(
|
||||||
color: APPCOLOR.lightGreen,
|
// color: APPCOLOR.lightGreen,
|
||||||
border: Border.all(
|
// border: Border.all(
|
||||||
color: Colors.white),
|
// color: Colors.white),
|
||||||
borderRadius:
|
// borderRadius:
|
||||||
BorderRadius.circular(5)),
|
// BorderRadius.circular(5)),
|
||||||
child: Center(
|
// child: Center(
|
||||||
child: Icon(
|
// child: Icon(
|
||||||
MdiIcons.pencil,
|
// MdiIcons.pencil,
|
||||||
size: 10,
|
// size: 10,
|
||||||
color: Colors.white,
|
// color: Colors.white,
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
))
|
// ))
|
||||||
: const SizedBox(),
|
// : const SizedBox(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
@@ -108,13 +112,13 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
"Smith Mate",
|
APPSTRING.userName ?? "",
|
||||||
style: context.customExtraBold(
|
style: context.customExtraBold(
|
||||||
top < 100 ? Colors.black : Colors.white,
|
top < 100 ? Colors.black : Colors.white,
|
||||||
14),
|
14),
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
'smithmate@example.com',
|
APPSTRING.emailName,
|
||||||
style: context.customRegular(
|
style: context.customRegular(
|
||||||
top < 100 ? Colors.black : Colors.white,
|
top < 100 ? Colors.black : Colors.white,
|
||||||
10),
|
10),
|
||||||
@@ -196,30 +200,31 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
|||||||
title: const Text('Notifications'),
|
title: const Text('Notifications'),
|
||||||
trailing: Icon(MdiIcons.chevronRight),
|
trailing: Icon(MdiIcons.chevronRight),
|
||||||
),
|
),
|
||||||
ListTile(
|
// ListTile(
|
||||||
onTap: () {
|
// onTap: () {
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
// Navigator.of(context).push(MaterialPageRoute(
|
||||||
builder: (context) {
|
// builder: (context) {
|
||||||
return const RatingReviewScreen();
|
// return const RatingReviewScreen();
|
||||||
},
|
// },
|
||||||
));
|
// ));
|
||||||
},
|
// },
|
||||||
leading: Icon(MdiIcons.starOutline),
|
// leading: Icon(MdiIcons.starOutline),
|
||||||
title: const Text('Rating & Review'),
|
// title: const Text('Rating & Review'),
|
||||||
trailing: Icon(MdiIcons.chevronRight),
|
// trailing: Icon(MdiIcons.chevronRight),
|
||||||
),
|
// ),
|
||||||
ListTile(
|
// ListTile(
|
||||||
onTap: () {
|
// onTap: () {
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
// Navigator.of(context).push(MaterialPageRoute(
|
||||||
builder: (context) {
|
// builder: (context) {
|
||||||
return const MessageScreen();
|
// return const MessageScreen();
|
||||||
},
|
// },
|
||||||
));
|
// ));
|
||||||
},
|
// },
|
||||||
leading: Icon(MdiIcons.messageOutline),
|
// leading: Icon(MdiIcons.messageOutline),
|
||||||
title: const Text('Driver Message'),
|
// title: const Text('Driver Message'),
|
||||||
trailing: Icon(MdiIcons.chevronRight),
|
// trailing: Icon(MdiIcons.chevronRight),
|
||||||
),
|
// ),
|
||||||
|
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
Navigator.of(context).push(MaterialPageRoute(
|
||||||
@@ -248,24 +253,12 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
|||||||
title: const Text('Term & Conditions'),
|
title: const Text('Term & Conditions'),
|
||||||
trailing: Icon(MdiIcons.chevronRight),
|
trailing: Icon(MdiIcons.chevronRight),
|
||||||
),
|
),
|
||||||
ListTile(
|
// ListTile(
|
||||||
onTap: () {},
|
// onTap: () {},
|
||||||
leading: Icon(MdiIcons.basketOutline),
|
// leading: Icon(MdiIcons.basketOutline),
|
||||||
title: const Text('Grocery List'),
|
// title: const Text('Grocery List'),
|
||||||
trailing: Icon(MdiIcons.chevronRight),
|
// trailing: Icon(MdiIcons.chevronRight),
|
||||||
),
|
// ),
|
||||||
ListTile(
|
|
||||||
onTap: () {
|
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
|
||||||
builder: (context) {
|
|
||||||
return MapScreen();
|
|
||||||
},
|
|
||||||
));
|
|
||||||
},
|
|
||||||
leading: Icon(MdiIcons.basketOutline),
|
|
||||||
title: const Text('Map List'),
|
|
||||||
trailing: Icon(MdiIcons.chevronRight),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:grocery_app/src/core/routes/routes.dart';
|
import 'package:grocery_app/src/core/routes/routes.dart';
|
||||||
|
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
||||||
import 'package:grocery_app/src/ui/onboarding/on_boarding_screen.dart';
|
import 'package:grocery_app/src/ui/onboarding/on_boarding_screen.dart';
|
||||||
import 'package:grocery_app/utils/constants/assets_constant.dart';
|
import 'package:grocery_app/utils/constants/assets_constant.dart';
|
||||||
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||||
import 'package:grocery_app/utils/extensions/extensions.dart';
|
import 'package:grocery_app/utils/extensions/extensions.dart';
|
||||||
import 'package:grocery_app/utils/extensions/uicontext.dart';
|
import 'package:grocery_app/utils/extensions/uicontext.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class SplashScreen extends StatefulWidget {
|
class SplashScreen extends StatefulWidget {
|
||||||
const SplashScreen({super.key});
|
const SplashScreen({super.key});
|
||||||
@@ -14,6 +16,7 @@ class SplashScreen extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _SplashScreenState extends State<SplashScreen> {
|
class _SplashScreenState extends State<SplashScreen> {
|
||||||
|
|
||||||
couting() async {
|
couting() async {
|
||||||
Future.delayed(const Duration(seconds: 3)).then((c) {
|
Future.delayed(const Duration(seconds: 3)).then((c) {
|
||||||
Navigator.of(context).pushReplacement(MaterialPageRoute(
|
Navigator.of(context).pushReplacement(MaterialPageRoute(
|
||||||
@@ -27,6 +30,9 @@ class _SplashScreenState extends State<SplashScreen> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
Future.delayed(const Duration(seconds: 2), () async {
|
Future.delayed(const Duration(seconds: 2), () async {
|
||||||
|
|
||||||
|
Provider.of<BottomNavProvider>(context, listen: false)
|
||||||
|
.refreshToken(context);
|
||||||
if (await SharedPrefUtils.isFreshInstall()) {
|
if (await SharedPrefUtils.isFreshInstall()) {
|
||||||
context.clearAndPush(routePath: MyRoutes.ONBOARDING);
|
context.clearAndPush(routePath: MyRoutes.ONBOARDING);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
// ignore_for_file: constant_identifier_names
|
// ignore_for_file: constant_identifier_names
|
||||||
|
|
||||||
|
import 'package:grocery_app/src/data/user_profile.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
// Shared preference for the app to store data locally
|
// Shared preference for the app to store data locally
|
||||||
@@ -35,7 +36,43 @@ class SharedPrefUtils {
|
|||||||
static const String STORE_ID = "STORE_ID";
|
static const String STORE_ID = "STORE_ID";
|
||||||
static const String REFRESH_TOKEN = "REFRESH_TOKEN";
|
static const String REFRESH_TOKEN = "REFRESH_TOKEN";
|
||||||
|
|
||||||
/// Set bearer authorization token
|
static const String KEY_NAME = "user_name";
|
||||||
|
static const String KEY_LAST_NAME = "user_name";
|
||||||
|
static const String KEY_EMAIL = "user_email";
|
||||||
|
static const String KEY_PROFILE = "user_profile";
|
||||||
|
|
||||||
|
static Future<void> saveUser({
|
||||||
|
required UserProfile user,
|
||||||
|
}) async {
|
||||||
|
print("jdhsfhjdjfhg ${user.img}");
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
await prefs.setString(KEY_NAME, user.firstName ?? "");
|
||||||
|
await prefs.setString(KEY_LAST_NAME, user.lastName ?? "");
|
||||||
|
await prefs.setString(KEY_EMAIL, user.email ?? " ");
|
||||||
|
await prefs.setString(KEY_PROFILE, user.img ?? " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<String?> getUserName() async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
return prefs.getString(KEY_NAME);
|
||||||
|
}
|
||||||
|
static Future<String?> getLastName() async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
return prefs.getString(KEY_LAST_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get user email
|
||||||
|
static Future<String?> getUserEmail() async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
return prefs.getString(KEY_EMAIL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get user profile URL
|
||||||
|
static Future<String?> getUserProfile() async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
return prefs.getString(KEY_PROFILE);
|
||||||
|
}
|
||||||
|
|
||||||
static Future<bool> setToken({required String authToken}) {
|
static Future<bool> setToken({required String authToken}) {
|
||||||
_token = authToken;
|
_token = authToken;
|
||||||
return SharedPreferences.getInstance()
|
return SharedPreferences.getInstance()
|
||||||
@@ -232,10 +269,7 @@ class SharedPrefUtils {
|
|||||||
return firstName!;
|
return firstName!;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<String> getLastName() async {
|
|
||||||
final sp = await SharedPreferences.getInstance();
|
|
||||||
return sp.getString(LAST_NAME) ?? "";
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<String> getEmail() async {
|
static Future<String> getEmail() async {
|
||||||
final sp = await SharedPreferences.getInstance();
|
final sp = await SharedPreferences.getInstance();
|
||||||
@@ -247,11 +281,6 @@ class SharedPrefUtils {
|
|||||||
return sp.getString(PASSWORD) ?? "";
|
return sp.getString(PASSWORD) ?? "";
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<String> getUsername() async {
|
|
||||||
final sp = await SharedPreferences.getInstance();
|
|
||||||
return sp.getString(USER_NAME) ?? "";
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<bool> getRandomInstruction() async {
|
static Future<bool> getRandomInstruction() async {
|
||||||
final sp = await SharedPreferences.getInstance();
|
final sp = await SharedPreferences.getInstance();
|
||||||
return sp.getBool(INS_RANDOM) ?? true;
|
return sp.getBool(INS_RANDOM) ?? true;
|
||||||
|
|||||||
@@ -2,10 +2,12 @@ class APPSTRING {
|
|||||||
//title
|
//title
|
||||||
static const String enterYourMobileNumber = "Enter Your Mobile Number";
|
static const String enterYourMobileNumber = "Enter Your Mobile Number";
|
||||||
static const String whatYourPhoneNumber = "What's your phone number?";
|
static const String whatYourPhoneNumber = "What's your phone number?";
|
||||||
static const String codeSentText = "A code will be send to verify your phone number";
|
static const String codeSentText =
|
||||||
|
"A code will be send to verify your phone number";
|
||||||
|
|
||||||
static const String enterVerificationCode = "Enter Verification Code";
|
static const String enterVerificationCode = "Enter Verification Code";
|
||||||
static const String enterCode = "Enter the 6-digit code sent to you at ********8902";
|
static const String enterCode =
|
||||||
|
"Enter the 6-digit code sent to you at ********8902";
|
||||||
static const String pleaseEnterYourFullName = "Please Enter Your Full Name";
|
static const String pleaseEnterYourFullName = "Please Enter Your Full Name";
|
||||||
|
|
||||||
//hint
|
//hint
|
||||||
@@ -13,11 +15,16 @@ class APPSTRING {
|
|||||||
static const String firstNameHint = "First Name";
|
static const String firstNameHint = "First Name";
|
||||||
static const String lastNameHint = "last Name";
|
static const String lastNameHint = "last Name";
|
||||||
|
|
||||||
static const String emailHint = "Email-ID";
|
static const String emailHint = "Email-ID";
|
||||||
static const String addressHint = "Address";
|
static const String addressHint = "Address";
|
||||||
|
|
||||||
//button
|
//button
|
||||||
static const String verifyButton = "Verify";
|
static const String verifyButton = "Verify";
|
||||||
static const String continueBtn = "Continue";
|
static const String continueBtn = "Continue";
|
||||||
static const String appName = "Customer App";
|
static const String appName = "Customer App";
|
||||||
|
|
||||||
|
static String userName = "user_name";
|
||||||
|
static String userLastName = "user_name";
|
||||||
|
static String emailName = "user_email";
|
||||||
|
static String userProfile = "user_profile";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,14 @@
|
|||||||
|
|
||||||
#include "generated_plugin_registrant.h"
|
#include "generated_plugin_registrant.h"
|
||||||
|
|
||||||
|
#include <file_selector_linux/file_selector_plugin.h>
|
||||||
|
#include <url_launcher_linux/url_launcher_plugin.h>
|
||||||
|
|
||||||
void fl_register_plugins(FlPluginRegistry* registry) {
|
void fl_register_plugins(FlPluginRegistry* registry) {
|
||||||
|
g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
|
||||||
|
fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
|
||||||
|
file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
|
||||||
|
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
|
||||||
|
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
|
||||||
|
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
list(APPEND FLUTTER_PLUGIN_LIST
|
list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
|
file_selector_linux
|
||||||
|
url_launcher_linux
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||||
|
|||||||
@@ -6,17 +6,21 @@ import FlutterMacOS
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
import connectivity_plus
|
import connectivity_plus
|
||||||
|
import file_selector_macos
|
||||||
import geolocator_apple
|
import geolocator_apple
|
||||||
import package_info_plus
|
import package_info_plus
|
||||||
import path_provider_foundation
|
import path_provider_foundation
|
||||||
import shared_preferences_foundation
|
import shared_preferences_foundation
|
||||||
import sqflite
|
import sqflite
|
||||||
|
import url_launcher_macos
|
||||||
|
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
|
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
|
||||||
|
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
||||||
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
||||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||||
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
}
|
}
|
||||||
|
|||||||
220
pubspec.lock
220
pubspec.lock
@@ -121,6 +121,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.1"
|
||||||
|
cross_file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cross_file
|
||||||
|
sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.4+2"
|
||||||
crypto:
|
crypto:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -209,6 +217,38 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.0.1"
|
version: "7.0.1"
|
||||||
|
file_selector_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file_selector_linux
|
||||||
|
sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.3+2"
|
||||||
|
file_selector_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file_selector_macos
|
||||||
|
sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.4+2"
|
||||||
|
file_selector_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file_selector_platform_interface
|
||||||
|
sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.6.2"
|
||||||
|
file_selector_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file_selector_windows
|
||||||
|
sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.3+3"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -528,6 +568,70 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.2"
|
version: "4.0.2"
|
||||||
|
image_picker:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: image_picker
|
||||||
|
sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.2"
|
||||||
|
image_picker_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_android
|
||||||
|
sha256: b62d34a506e12bb965e824b6db4fbf709ee4589cf5d3e99b45ab2287b008ee0c
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.8.12+20"
|
||||||
|
image_picker_for_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_for_web
|
||||||
|
sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.6"
|
||||||
|
image_picker_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_ios
|
||||||
|
sha256: "05da758e67bc7839e886b3959848aa6b44ff123ab4b28f67891008afe8ef9100"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.8.12+2"
|
||||||
|
image_picker_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_linux
|
||||||
|
sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.1+1"
|
||||||
|
image_picker_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_macos
|
||||||
|
sha256: "1b90ebbd9dcf98fb6c1d01427e49a55bd96b5d67b8c67cf955d60a5de74207c1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.1+2"
|
||||||
|
image_picker_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_platform_interface
|
||||||
|
sha256: "886d57f0be73c4b140004e78b9f28a8914a09e50c2d816bdd0520051a71236a0"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.10.1"
|
||||||
|
image_picker_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_windows
|
||||||
|
sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.1+1"
|
||||||
intl:
|
intl:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -548,18 +652,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker
|
name: leak_tracker
|
||||||
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
|
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.0.4"
|
version: "10.0.5"
|
||||||
leak_tracker_flutter_testing:
|
leak_tracker_flutter_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker_flutter_testing
|
name: leak_tracker_flutter_testing
|
||||||
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
|
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.3"
|
version: "3.0.5"
|
||||||
leak_tracker_testing:
|
leak_tracker_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -604,10 +708,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: material_color_utilities
|
name: material_color_utilities
|
||||||
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
|
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.8.0"
|
version: "0.11.1"
|
||||||
material_design_icons_flutter:
|
material_design_icons_flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -620,10 +724,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
|
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.12.0"
|
version: "1.15.0"
|
||||||
|
mime:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: mime
|
||||||
|
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
nested:
|
nested:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -864,6 +976,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.1"
|
version: "2.4.1"
|
||||||
|
shimmer:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: shimmer
|
||||||
|
sha256: "5f88c883a22e9f9f299e5ba0e4f7e6054857224976a5d9f839d4ebdc94a14ac9"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0"
|
||||||
|
skeletonizer:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: skeletonizer
|
||||||
|
sha256: "0dcacc51c144af4edaf37672072156f49e47036becbc394d7c51850c5c1e884b"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.3"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -953,10 +1081,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
|
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.0"
|
version: "0.7.2"
|
||||||
typed_data:
|
typed_data:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -965,6 +1093,70 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.2"
|
version: "1.3.2"
|
||||||
|
url_launcher:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: url_launcher
|
||||||
|
sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.3.1"
|
||||||
|
url_launcher_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_android
|
||||||
|
sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.3.14"
|
||||||
|
url_launcher_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_ios
|
||||||
|
sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.3.2"
|
||||||
|
url_launcher_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_linux
|
||||||
|
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.2.1"
|
||||||
|
url_launcher_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_macos
|
||||||
|
sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.2.2"
|
||||||
|
url_launcher_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_platform_interface
|
||||||
|
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.2"
|
||||||
|
url_launcher_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_web
|
||||||
|
sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.3"
|
||||||
|
url_launcher_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_windows
|
||||||
|
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.4"
|
||||||
uuid:
|
uuid:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1009,10 +1201,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
|
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.2.1"
|
version: "14.2.5"
|
||||||
web:
|
web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1046,5 +1238,5 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "6.5.0"
|
version: "6.5.0"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.4.4 <4.0.0"
|
dart: ">=3.5.0 <4.0.0"
|
||||||
flutter: ">=3.22.0"
|
flutter: ">=3.24.0"
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ dependencies:
|
|||||||
google_api_headers:
|
google_api_headers:
|
||||||
fluttertoast:
|
fluttertoast:
|
||||||
flutter_rating_stars: ^1.1.0
|
flutter_rating_stars: ^1.1.0
|
||||||
|
url_launcher: ^6.3.1
|
||||||
|
skeletonizer: ^1.4.3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -61,7 +63,8 @@ dependencies:
|
|||||||
|
|
||||||
animations: ^2.0.1
|
animations: ^2.0.1
|
||||||
animation_list: ^3.1.0
|
animation_list: ^3.1.0
|
||||||
|
image_picker: any
|
||||||
|
shimmer: ^3.0.0
|
||||||
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
|||||||
@@ -7,11 +7,17 @@
|
|||||||
#include "generated_plugin_registrant.h"
|
#include "generated_plugin_registrant.h"
|
||||||
|
|
||||||
#include <connectivity_plus/connectivity_plus_windows_plugin.h>
|
#include <connectivity_plus/connectivity_plus_windows_plugin.h>
|
||||||
|
#include <file_selector_windows/file_selector_windows.h>
|
||||||
#include <geolocator_windows/geolocator_windows.h>
|
#include <geolocator_windows/geolocator_windows.h>
|
||||||
|
#include <url_launcher_windows/url_launcher_windows.h>
|
||||||
|
|
||||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
ConnectivityPlusWindowsPluginRegisterWithRegistrar(
|
ConnectivityPlusWindowsPluginRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
|
registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
|
||||||
|
FileSelectorWindowsRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("FileSelectorWindows"));
|
||||||
GeolocatorWindowsRegisterWithRegistrar(
|
GeolocatorWindowsRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("GeolocatorWindows"));
|
registry->GetRegistrarForPlugin("GeolocatorWindows"));
|
||||||
|
UrlLauncherWindowsRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,9 @@
|
|||||||
|
|
||||||
list(APPEND FLUTTER_PLUGIN_LIST
|
list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
connectivity_plus
|
connectivity_plus
|
||||||
|
file_selector_windows
|
||||||
geolocator_windows
|
geolocator_windows
|
||||||
|
url_launcher_windows
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||||
|
|||||||
Reference in New Issue
Block a user