location has been enabled in addition to sending the domain
This commit is contained in:
16
lib/core/config/app_urls.dart
Normal file
16
lib/core/config/app_urls.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
24
lib/core/location/location_service.dart
Normal file
24
lib/core/location/location_service.dart
Normal 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),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user