diff --git a/assets/icons/current loc.svg b/assets/icons/current loc.svg
new file mode 100644
index 0000000..8c4d6fb
--- /dev/null
+++ b/assets/icons/current loc.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart
index c741a12..05059b7 100644
--- a/lib/gen/assets.gen.dart
+++ b/lib/gen/assets.gen.dart
@@ -135,6 +135,10 @@ class $AssetsIconsGen {
/// File path: assets/icons/coin.svg
SvgGenImage get coin => const SvgGenImage('assets/icons/coin.svg');
+ /// File path: assets/icons/current loc.svg
+ SvgGenImage get currentLoc =>
+ const SvgGenImage('assets/icons/current loc.svg');
+
/// File path: assets/icons/delivery off.svg
SvgGenImage get deliveryOff =>
const SvgGenImage('assets/icons/delivery off.svg');
@@ -463,6 +467,7 @@ class $AssetsIconsGen {
clander,
clock,
coin,
+ currentLoc,
deliveryOff,
deliveryOn,
dislike,
diff --git a/lib/screens/auth/login_page.dart b/lib/screens/auth/login_page.dart
index 33ca373..5734a24 100644
--- a/lib/screens/auth/login_page.dart
+++ b/lib/screens/auth/login_page.dart
@@ -5,6 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:lba/screens/auth/bloc/auth_bloc.dart';
import 'package:lba/screens/auth/user_info_page.dart';
+import 'package:lba/widgets/app_snackbar.dart';
import '../../extension/screenSize.dart';
import '../../gen/assets.gen.dart';
import '../../res/colors.dart';
@@ -185,12 +186,10 @@ class _LoginPageState extends State {
);
}
if (state is AuthError) {
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(
- duration: const Duration(seconds: 2),
- backgroundColor: AppColors.errorColor,
- content: Text(state.message),
- ),
+ AppSnackBar.showError(
+ context: context,
+ message: state.message,
+ duration: const Duration(seconds: 2),
);
}
},
diff --git a/lib/screens/auth/otp_verification_page.dart b/lib/screens/auth/otp_verification_page.dart
index ce04f68..f15e598 100644
--- a/lib/screens/auth/otp_verification_page.dart
+++ b/lib/screens/auth/otp_verification_page.dart
@@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:lba/res/colors.dart';
import 'package:lba/screens/auth/bloc/auth_bloc.dart';
+import 'package:lba/widgets/app_snackbar.dart';
import '../../gen/assets.gen.dart';
import '../../widgets/button.dart';
import '../../widgets/remainingTime.dart';
@@ -155,12 +156,10 @@ class _OTPVerificationPageState extends State {
);
}
if (state is AuthError) {
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(
- duration: const Duration(seconds: 2),
- backgroundColor: AppColors.errorColor,
- content: Text(state.message),
- ),
+ AppSnackBar.showError(
+ context: context,
+ message: state.message,
+ duration: const Duration(seconds: 2),
);
}
},
@@ -183,12 +182,9 @@ class _OTPVerificationPageState extends State {
phoneNumber: widget.phoneNumber,
));
} else {
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(
- backgroundColor: AppColors.errorColor,
- content: Text(
- 'Please enter the complete OTP code'),
- ),
+ AppSnackBar.showWarning(
+ context: context,
+ message: 'Please enter the complete OTP code',
);
}
},
diff --git a/lib/screens/mains/discover/discover.dart b/lib/screens/mains/discover/discover.dart
index b0bd958..2e96363 100644
--- a/lib/screens/mains/discover/discover.dart
+++ b/lib/screens/mains/discover/discover.dart
@@ -826,15 +826,6 @@ class FlashSaleCard extends StatelessWidget {
decoration: BoxDecoration(
color: AppColors.cardBackground,
borderRadius: BorderRadius.circular(12),
- border: Border.all(color: AppColors.divider),
- boxShadow: [
- BoxShadow(
- color: AppColors.shadowColor.withOpacity(0.1),
- spreadRadius: 1,
- blurRadius: 5,
- offset: const Offset(0, 3),
- ),
- ],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
diff --git a/lib/screens/mains/nearby/location_radius_screen.dart b/lib/screens/mains/nearby/location_radius_screen.dart
new file mode 100644
index 0000000..1f373d4
--- /dev/null
+++ b/lib/screens/mains/nearby/location_radius_screen.dart
@@ -0,0 +1,641 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_map/flutter_map.dart';
+import 'package:location/location.dart';
+import 'package:latlong2/latlong.dart';
+import 'package:lba/res/colors.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:lba/gen/assets.gen.dart';
+import 'package:lba/widgets/app_snackbar.dart';
+import 'dart:math' as math;
+
+class LocationRadiusScreen extends StatefulWidget {
+ const LocationRadiusScreen({super.key});
+
+ @override
+ State createState() => _LocationRadiusScreenState();
+}
+
+class _LocationRadiusScreenState extends State
+ with TickerProviderStateMixin {
+ final MapController _mapController = MapController();
+ LatLng _currentCenter = const LatLng(25.1972, 55.2744); // Default: Dubai
+ double _radiusInKm = 1.0;
+ bool _isCustomRadius = false;
+ bool _isLoadingLocation = true;
+ bool _mapLoadError = false;
+ int _currentTileProvider = 0;
+
+ Location location = Location();
+ late bool _serviceEnabled;
+ late PermissionStatus _permissionGranted;
+ late LocationData _locationData;
+
+ late AnimationController _animationController;
+ late List> _animations;
+
+ final List