location has been enabled in addition to sending the domain

This commit is contained in:
Daniah Ayad Al-sultani
2026-02-22 14:06:02 +03:00
parent f616a2c104
commit 8b0d849f1b
22 changed files with 312 additions and 43 deletions

View File

@@ -0,0 +1,16 @@
class AppUrls {
static const String themeLogoBase = 'https://hrm.go.iq/Images/';
static String buildThemeLogoUrl(String logoFileName) {
if (logoFileName.isEmpty) return '';
// If backend ever returns a full URL, keep it
final lower = logoFileName.toLowerCase();
if (lower.startsWith('http://') || lower.startsWith('https://')) {
return logoFileName;
}
// Encode spaces/special chars (important!)
return themeLogoBase + Uri.encodeComponent(logoFileName);
}
}

View File

@@ -32,6 +32,12 @@ import '../../domain/usecases/get_salary_summary_usecase.dart';
import '../../domain/usecases/change_password_usecase.dart';
import '../../presentation/blocs/login/login_bloc.dart';
import '../../presentation/blocs/change_password/change_password_bloc.dart';
import '../../data/datasources/theme_remote_data_source.dart';
import '../../data/repositories/theme_repository_impl.dart';
import '../../domain/repositories/theme_repository.dart';
import '../../domain/usecases/get_theme_usecase.dart';
import '../../presentation/blocs/theme/theme_cubit.dart';
import '../location/location_service.dart';
final sl = GetIt.instance;
@@ -124,4 +130,18 @@ Future<void> initializeDependencies() async {
sl.registerLazySingleton(() => CreateAdvanceUseCase(repository: sl()));
sl.registerLazySingleton(() => GetAdvancesUseCase(repository: sl()));
// Theme
sl.registerLazySingleton<ThemeRemoteDataSource>(
() => ThemeRemoteDataSourceImpl(apiClient: sl()),
);
sl.registerLazySingleton<ThemeRepository>(
() => ThemeRepositoryImpl(remote: sl()),
);
sl.registerLazySingleton(() => GetThemeUseCase(sl()));
sl.registerFactory(() => ThemeCubit(getThemeUseCase: sl()));
sl.registerLazySingleton<LocationService>(() => LocationService());
}

View File

@@ -0,0 +1,24 @@
import 'package:geolocator/geolocator.dart';
class LocationService {
Future<Position?> getCurrentPosition() async {
// 1) service enabled?
final serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) return null;
// 2) permission
var permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
}
if (permission == LocationPermission.denied ||
permission == LocationPermission.deniedForever) {
return null;
}
// 3) get location (geolocator v13+ API)
return Geolocator.getCurrentPosition(
locationSettings: const LocationSettings(accuracy: LocationAccuracy.high),
);
}
}