feat: Implement repositories for permissions, profiles, resources, roles, and users
- Added PermissionsRepository for managing permissions, including fetching, creating, and deleting permissions. - Added ProfileRepository for handling user profile data, including fetching, updating, and uploading avatars. - Added ResourcesRepository for managing resources, including fetching, creating, updating, and deleting resources. - Added RolesRepository for managing roles, including fetching all roles and role permissions. - Added UserRepository for managing user data, including authentication checks, updating user metadata, and fetching user details. - Created a bindings file for personalization features.
This commit is contained in:
parent
867efe0bc9
commit
19b4809611
|
@ -1,7 +1,7 @@
|
|||
import 'package:animated_splash_screen/animated_splash_screen.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lottie/lottie.dart';
|
||||
import 'package:sigap/src/features/onboarding/screens/onboarding/onboarding_screen.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/pages/onboarding/onboarding_screen.dart';
|
||||
import 'package:sigap/src/utils/constants/colors.dart';
|
||||
import 'package:sigap/src/utils/constants/image_strings.dart';
|
||||
import 'package:sigap/src/utils/helpers/helper_functions.dart';
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/bindings/auth_bindings.dart';
|
||||
import 'package:sigap/src/features/onboarding/bindings/onboarding_binding.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/bindings/auth_bindings.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/bindings/onboarding_binding.dart';
|
||||
|
||||
class ControllerBindings extends Bindings {
|
||||
@override
|
||||
|
@ -11,7 +11,7 @@ class ControllerBindings extends Bindings {
|
|||
OnboardingBindings().dependencies();
|
||||
|
||||
// Auth Bindings
|
||||
AuthBindings().dependencies();
|
||||
AuthControllerBindings().dependencies();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ class UtilityBindings extends Bindings {
|
|||
@override
|
||||
void dependencies() {
|
||||
// Get.put(BackgroundService.instance, permanent: true);
|
||||
Get.put(NetworkManager());
|
||||
Get.put(NetworkManager(), permanent: true);
|
||||
Get.put(logger, permanent: true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart';
|
||||
import 'package:sigap/src/cores/repositories/daily-ops/officers_repository.dart';
|
||||
import 'package:sigap/src/cores/repositories/daily-ops/units_repository.dart';
|
||||
import 'package:sigap/src/cores/repositories/personalization/profile_repository.dart';
|
||||
import 'package:sigap/src/cores/repositories/personalization/roles_repository.dart';
|
||||
import 'package:sigap/src/cores/repositories/personalization/users_repository.dart';
|
||||
import 'package:sigap/src/features/auth/data/bindings/authentication_bindings_repository.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/bindings/daily_ops_repository_bindings.dart';
|
||||
import 'package:sigap/src/features/map/data/bindings/map_repository_bindings.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/bindings/panic_button_repository_bindings.dart';
|
||||
import 'package:sigap/src/features/personalization/data/bindings/personalization_repository_bindings.dart';
|
||||
|
||||
class RepositoryBindings extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
Get.lazyPut<AuthenticationRepository>(
|
||||
() => AuthenticationRepository(),
|
||||
fenix: true,
|
||||
);
|
||||
Get.lazyPut<UserRepository>(() => UserRepository(), fenix: true);
|
||||
Get.lazyPut<OfficerRepository>(() => OfficerRepository(), fenix: true);
|
||||
Get.lazyPut<UnitRepository>(() => UnitRepository(), fenix: true);
|
||||
Get.lazyPut<ProfileRepository>(() => ProfileRepository(), fenix: true);
|
||||
Get.lazyPut<RolesRepository>(() => RolesRepository(), fenix: true);
|
||||
// Register all feature repositories
|
||||
AuthRepositoryBindings().dependencies();
|
||||
|
||||
PersonalizationRepositoryBindings().dependencies();
|
||||
|
||||
PanicButtonRepositoryBindings().dependencies();
|
||||
|
||||
MapRepositoryBindings().dependencies();
|
||||
|
||||
DailyOpsRepositoryBindings().dependencies();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/screens/forgot-password/forgot_password.dart';
|
||||
import 'package:sigap/src/features/auth/screens/signin/signin_screen.dart';
|
||||
import 'package:sigap/src/features/auth/screens/signup/signup_screen.dart';
|
||||
import 'package:sigap/src/features/auth/screens/step-form/step_form_screen.dart';
|
||||
import 'package:sigap/src/features/onboarding/screens/onboarding/onboarding_screen.dart';
|
||||
import 'package:sigap/src/features/onboarding/screens/role-selection/role_selection_screen.dart';
|
||||
import 'package:sigap/src/features/onboarding/screens/welcome/welcome_screen.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/pages/forgot-password/forgot_password.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/pages/signin/signin_screen.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/pages/signup/signup_screen.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/pages/step-form/step_form_screen.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/pages/onboarding/onboarding_screen.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/pages/role-selection/role_selection_screen.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/pages/welcome/welcome_screen.dart';
|
||||
import 'package:sigap/src/utils/constants/app_routes.dart';
|
||||
|
||||
class AppPages {
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|||
import 'package:get/get.dart';
|
||||
import 'package:local_auth/local_auth.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/auth/models/user_metadata_model.dart';
|
||||
import 'package:sigap/src/features/auth/data/models/user_metadata_model.dart';
|
||||
|
||||
class BiometricService extends GetxService {
|
||||
static BiometricService get instance => Get.find<BiometricService>();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/models/user_metadata_model.dart';
|
||||
import 'package:sigap/src/features/auth/data/models/user_metadata_model.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
|
||||
class SupabaseService extends GetxService {
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/email_verification_controller.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/forgot_password_controller.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/signin_controller.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/signup_controller.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/step_form_controller.dart';
|
||||
|
||||
class AuthBindings extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
// Register all feature auth controllers
|
||||
Get.lazyPut(() => SignInController());
|
||||
Get.lazyPut(() => SignUpController());
|
||||
Get.lazyPut(() => StepFormController());
|
||||
Get.lazyPut(() => EmailVerificationController());
|
||||
Get.lazyPut(() => ForgotPasswordController());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/data/repositories/authentication_repository.dart';
|
||||
|
||||
class AuthRepositoryBindings extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
Get.lazyPut(() => AuthenticationRepository(), fenix: true);
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:sigap/src/features/daily-ops/models/models/officers_model.dart';
|
||||
import 'package:sigap/src/features/personalization/models/models/profile_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/officers_model.dart';
|
||||
import 'package:sigap/src/features/personalization/data/models/models/profile_model.dart';
|
||||
|
||||
class UserMetadataModel {
|
||||
final bool isOfficer;
|
|
@ -4,8 +4,8 @@ import 'package:get_storage/get_storage.dart';
|
|||
import 'package:sigap/src/cores/services/biometric_service.dart';
|
||||
import 'package:sigap/src/cores/services/location_service.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/auth/screens/signin/signin_screen.dart';
|
||||
import 'package:sigap/src/features/onboarding/screens/onboarding/onboarding_screen.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/pages/signin/signin_screen.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/pages/onboarding/onboarding_screen.dart';
|
||||
import 'package:sigap/src/utils/constants/app_routes.dart';
|
||||
import 'package:sigap/src/utils/exceptions/exceptions.dart';
|
||||
import 'package:sigap/src/utils/exceptions/format_exceptions.dart';
|
|
@ -0,0 +1,18 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/email_verification_controller.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/forgot_password_controller.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/signin_controller.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/signup_controller.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/step_form_controller.dart';
|
||||
|
||||
class AuthControllerBindings extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
// Register all feature auth controllers
|
||||
Get.lazyPut(() => SignInController(), fenix: true);
|
||||
Get.lazyPut(() => SignUpController(), fenix: true);
|
||||
Get.lazyPut(() => FormRegistrationController(), fenix: true);
|
||||
Get.lazyPut(() => EmailVerificationController(), fenix: true);
|
||||
Get.lazyPut(() => ForgotPasswordController(), fenix: true);
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@ import 'dart:async';
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart';
|
||||
import 'package:sigap/src/features/auth/data/repositories/authentication_repository.dart';
|
||||
import 'package:sigap/src/utils/constants/app_routes.dart';
|
||||
import 'package:sigap/src/utils/popups/loaders.dart';
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart';
|
||||
import 'package:sigap/src/features/auth/data/repositories/authentication_repository.dart';
|
||||
import 'package:sigap/src/utils/popups/loaders.dart';
|
||||
import 'package:sigap/src/utils/validators/validation.dart';
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart';
|
||||
import 'package:sigap/src/features/auth/data/repositories/authentication_repository.dart';
|
||||
import 'package:sigap/src/utils/constants/app_routes.dart';
|
||||
import 'package:sigap/src/utils/helpers/network_manager.dart';
|
||||
import 'package:sigap/src/utils/popups/loaders.dart';
|
|
@ -2,8 +2,8 @@ import 'package:flutter/material.dart';
|
|||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart';
|
||||
import 'package:sigap/src/features/auth/models/user_metadata_model.dart';
|
||||
import 'package:sigap/src/features/auth/data/repositories/authentication_repository.dart';
|
||||
import 'package:sigap/src/features/auth/data/models/user_metadata_model.dart';
|
||||
import 'package:sigap/src/utils/constants/app_routes.dart';
|
||||
import 'package:sigap/src/utils/helpers/network_manager.dart';
|
||||
import 'package:sigap/src/utils/popups/loaders.dart';
|
|
@ -1,14 +1,14 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/models/user_metadata_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/models/index.dart';
|
||||
import 'package:sigap/src/features/personalization/models/index.dart';
|
||||
import 'package:sigap/src/features/auth/data/models/user_metadata_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/index.dart';
|
||||
import 'package:sigap/src/features/personalization/data/models/index.dart';
|
||||
import 'package:sigap/src/utils/constants/app_routes.dart';
|
||||
import 'package:sigap/src/utils/popups/loaders.dart';
|
||||
import 'package:sigap/src/utils/validators/validation.dart';
|
||||
|
||||
class StepFormController extends GetxController {
|
||||
static StepFormController get to => Get.find();
|
||||
class FormRegistrationController extends GetxController {
|
||||
static FormRegistrationController get to => Get.find();
|
||||
|
||||
// Role information
|
||||
final Rx<RoleModel?> selectedRole = Rx<RoleModel?>(null);
|
|
@ -1,10 +1,10 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/email_verification_controller.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_header.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/otp_input_field.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/email_verification_controller.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_header.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/otp_input_field.dart';
|
||||
import 'package:sigap/src/utils/constants/colors.dart';
|
||||
|
||||
class EmailVerificationScreen extends StatelessWidget {
|
|
@ -1,9 +1,9 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/forgot_password_controller.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_header.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/forgot_password_controller.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_header.dart';
|
||||
import 'package:sigap/src/shared/widgets/text/custom_text_field.dart';
|
||||
import 'package:sigap/src/utils/constants/colors.dart';
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/signin_controller.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_divider.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_header.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/password_field.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/social_button.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/signin_controller.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_divider.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_header.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/password_field.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/social_button.dart';
|
||||
import 'package:sigap/src/shared/widgets/text/custom_text_field.dart';
|
||||
import 'package:sigap/src/utils/constants/colors.dart';
|
||||
import 'package:sigap/src/utils/validators/validation.dart';
|
|
@ -1,9 +1,9 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/signup_controller.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/password_field.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/signup_controller.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/password_field.dart';
|
||||
import 'package:sigap/src/shared/widgets/text/custom_text_field.dart';
|
||||
import 'package:sigap/src/utils/constants/colors.dart';
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/controllers/step_form_controller.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/personalization/models/index.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/controllers/step_form_controller.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/personalization/data/models/index.dart';
|
||||
import 'package:sigap/src/shared/widgets/dropdown/custom_dropdown.dart';
|
||||
import 'package:sigap/src/shared/widgets/indicators/step_indicator.dart';
|
||||
import 'package:sigap/src/shared/widgets/text/custom_text_field.dart';
|
||||
|
@ -16,7 +16,7 @@ class FormRegistrationScreen extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// Get the controller
|
||||
final controller = Get.find<StepFormController>();
|
||||
final controller = Get.find<FormRegistrationController>();
|
||||
|
||||
// Set system overlay style
|
||||
SystemChrome.setSystemUIOverlayStyle(
|
||||
|
@ -139,7 +139,7 @@ class FormRegistrationScreen extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
|
||||
Widget _buildStepContent(StepFormController controller) {
|
||||
Widget _buildStepContent(FormRegistrationController controller) {
|
||||
final isOfficer = controller.selectedRole.value?.isOfficer ?? false;
|
||||
|
||||
switch (controller.currentStep.value) {
|
||||
|
@ -160,7 +160,7 @@ class FormRegistrationScreen extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
|
||||
Widget _buildPersonalInfoStep(StepFormController controller) {
|
||||
Widget _buildPersonalInfoStep(FormRegistrationController controller) {
|
||||
return Form(
|
||||
key: controller.stepFormKeys[0],
|
||||
child: Column(
|
||||
|
@ -241,7 +241,7 @@ class FormRegistrationScreen extends StatelessWidget {
|
|||
);
|
||||
}
|
||||
|
||||
Widget _buildEmergencyContactStep(StepFormController controller) {
|
||||
Widget _buildEmergencyContactStep(FormRegistrationController controller) {
|
||||
return Form(
|
||||
key: controller.stepFormKeys[1],
|
||||
child: Column(
|
||||
|
@ -313,7 +313,7 @@ class FormRegistrationScreen extends StatelessWidget {
|
|||
);
|
||||
}
|
||||
|
||||
Widget _buildOfficerInfoStep(StepFormController controller) {
|
||||
Widget _buildOfficerInfoStep(FormRegistrationController controller) {
|
||||
return Form(
|
||||
key: controller.stepFormKeys[1],
|
||||
child: Column(
|
||||
|
@ -360,7 +360,9 @@ class FormRegistrationScreen extends StatelessWidget {
|
|||
);
|
||||
}
|
||||
|
||||
Widget _buildOfficerAdditionalInfoStep(StepFormController controller) {
|
||||
Widget _buildOfficerAdditionalInfoStep(
|
||||
FormRegistrationController controller,
|
||||
) {
|
||||
return Form(
|
||||
key: controller.stepFormKeys[2],
|
||||
child: Column(
|
|
@ -0,0 +1,20 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/repositories/patrol_units_repository.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/repositories/unit_statistics_repository.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/repositories/units_repository.dart';
|
||||
|
||||
class DailyOpsRepositoryBindings extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
// Register all feature daily ops controllers
|
||||
Get.lazyPut<UnitRepository>(() => UnitRepository(), fenix: true);
|
||||
Get.lazyPut<UnitStatisticsRepository>(
|
||||
() => UnitStatisticsRepository(),
|
||||
fenix: true,
|
||||
);
|
||||
Get.lazyPut<PatrolUnitRepository>(
|
||||
() => PatrolUnitRepository(),
|
||||
fenix: true,
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:sigap/src/features/personalization/models/models/roles_model.dart';
|
||||
import 'package:sigap/src/features/personalization/data/models/models/roles_model.dart';
|
||||
|
||||
class OfficerModel {
|
||||
final String id;
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:sigap/src/features/daily-ops/models/models/units_model.dart';
|
||||
import 'package:sigap/src/features/map/models/models/locations_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/models/models/officers_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/units_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/locations_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/officers_model.dart';
|
||||
|
||||
class PatrolUnitModel {
|
||||
final String id;
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:sigap/src/features/daily-ops/models/models/patrol_units_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/models/models/unit_statistics_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/models/models/officers_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/patrol_units_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/unit_statistics_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/officers_model.dart';
|
||||
|
||||
enum UnitType { polda, polsek, polres, other }
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/daily-ops/models/models/patrol_units_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/patrol_units_model.dart';
|
||||
import 'package:sigap/src/utils/exceptions/exceptions.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/daily-ops/models/models/unit_statistics_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/unit_statistics_model.dart';
|
||||
import 'package:sigap/src/utils/exceptions/exceptions.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/daily-ops/models/models/units_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/units_model.dart';
|
||||
import 'package:sigap/src/utils/exceptions/exceptions.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/map/data/repositories/cities_repository.dart';
|
||||
import 'package:sigap/src/features/map/data/repositories/demographics_repository.dart';
|
||||
import 'package:sigap/src/features/map/data/repositories/districts_repository.dart';
|
||||
import 'package:sigap/src/features/map/data/repositories/geogrpaphics_repository.dart';
|
||||
import 'package:sigap/src/features/map/data/repositories/location_logs_repository.dart';
|
||||
import 'package:sigap/src/features/map/data/repositories/locations_repository.dart';
|
||||
|
||||
class MapRepositoryBindings extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
// Register all feature map controllers
|
||||
Get.lazyPut<CitiesRepository>(() => CitiesRepository(), fenix: true);
|
||||
Get.lazyPut<DistrictsRepository>(() => DistrictsRepository(), fenix: true);
|
||||
Get.lazyPut<GeographicsRepository>(
|
||||
() => GeographicsRepository(),
|
||||
fenix: true,
|
||||
);
|
||||
Get.lazyPut<DemographicsRepository>(
|
||||
() => DemographicsRepository(),
|
||||
fenix: true,
|
||||
);
|
||||
Get.lazyPut<LocationsRepository>(() => LocationsRepository(), fenix: true);
|
||||
Get.lazyPut<LocationLogsRepository>(
|
||||
() => LocationLogsRepository(),
|
||||
fenix: true,
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:sigap/src/features/daily-ops/models/models/units_model.dart';
|
||||
import 'package:sigap/src/features/map/models/models/districts_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/units_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/districts_model.dart';
|
||||
|
||||
class CityModel {
|
||||
final String id;
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:sigap/src/features/map/models/models/districts_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/districts_model.dart';
|
||||
|
||||
class DemographicModel {
|
||||
final String id;
|
|
@ -1,9 +1,9 @@
|
|||
import 'package:sigap/src/features/daily-ops/models/models/units_model.dart';
|
||||
import 'package:sigap/src/features/map/models/models/cities_model.dart';
|
||||
import 'package:sigap/src/features/map/models/models/demographics_model.dart';
|
||||
import 'package:sigap/src/features/map/models/models/geographics_model.dart';
|
||||
import 'package:sigap/src/features/map/models/models/locations_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/models/models/crimes_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/units_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/cities_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/demographics_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/geographics_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/locations_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/models/models/crimes_model.dart';
|
||||
|
||||
class DistrictModel {
|
||||
final String id;
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:sigap/src/features/map/models/models/districts_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/districts_model.dart';
|
||||
|
||||
class GeographicModel {
|
||||
final String id;
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:sigap/src/features/personalization/models/models/users_model.dart';
|
||||
import 'package:sigap/src/features/personalization/data/models/models/users_model.dart';
|
||||
|
||||
class LocationLogModel {
|
||||
final String id;
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:sigap/src/features/daily-ops/models/models/patrol_units_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/models/models/crime_incidents_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/models/models/events_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/models/models/incident_logs_model.dart';
|
||||
import 'package:sigap/src/features/daily-ops/data/models/models/patrol_units_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/models/models/crime_incidents_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/models/models/events_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/models/models/incident_logs_model.dart';
|
||||
|
||||
class LocationModel {
|
||||
final String id;
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/map/models/models/cities_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/cities_model.dart';
|
||||
|
||||
class CitiesRepository extends GetxController {
|
||||
static CitiesRepository get instance => Get.find();
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:logger/Logger.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/map/models/models/demographics_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/demographics_model.dart';
|
||||
|
||||
class DemographicsRepository extends GetxController {
|
||||
static DemographicsRepository get instance => Get.find();
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/map/models/models/districts_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/districts_model.dart';
|
||||
|
||||
class DistrictsRepository extends GetxController {
|
||||
static DistrictsRepository get instance => Get.find();
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/map/models/models/geographics_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/geographics_model.dart';
|
||||
|
||||
class GeographicsRepository extends GetxController {
|
||||
static GeographicsRepository get instance => Get.find();
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/map/models/models/location_logs_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/location_logs_model.dart';
|
||||
|
||||
class LocationLogsRepository extends GetxController {
|
||||
static LocationLogsRepository get instance => Get.find();
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/features/map/models/models/locations_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/locations_model.dart';
|
||||
|
||||
class LocationsRepository extends GetxController {
|
||||
static LocationsRepository get instance => Get.find();
|
|
@ -1,14 +0,0 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/onboarding/controllers/onboarding_controller.dart';
|
||||
import 'package:sigap/src/features/onboarding/controllers/role_selection_controller.dart';
|
||||
import 'package:sigap/src/features/onboarding/controllers/splash_controller.dart';
|
||||
|
||||
class OnboardingBindings extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
// Register all feature onboarding controllers
|
||||
Get.lazyPut(() => OnboardingController());
|
||||
Get.lazyPut(() => RoleSelectionController());
|
||||
Get.lazyPut(() => SplashController());
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:sigap/src/features/onboarding/models/onboarding_model.dart';
|
||||
import 'package:sigap/src/features/onboarding/data/models/onboarding_model.dart';
|
||||
|
||||
|
||||
final List<OnboardingContent> contents = [
|
|
@ -0,0 +1,15 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/controllers/onboarding_controller.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/controllers/role_selection_controller.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/controllers/splash_controller.dart';
|
||||
|
||||
class OnboardingBindings extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
// Register all feature onboarding controllers
|
||||
Get.lazyPut(() => OnboardingController(), fenix: true);
|
||||
Get.lazyPut(() => RoleSelectionController(), fenix: true);
|
||||
Get.lazyPut(() => SplashController(), fenix: true);
|
||||
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:sigap/src/cores/services/location_service.dart';
|
||||
import 'package:sigap/src/features/onboarding/datas/onboarding_data.dart';
|
||||
import 'package:sigap/src/features/onboarding/data/dummy/onboarding_dummy.dart';
|
||||
import 'package:sigap/src/utils/constants/app_routes.dart';
|
||||
|
||||
class OnboardingController extends GetxController
|
|
@ -1,7 +1,6 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:sigap/src/cores/repositories/personalization/roles_repository.dart';
|
||||
import 'package:sigap/src/features/personalization/models/models/roles_model.dart';
|
||||
import 'package:sigap/src/features/personalization/data/repositories/roles_repository.dart';
|
||||
import 'package:sigap/src/features/personalization/data/models/models/roles_model.dart';
|
||||
import 'package:sigap/src/utils/constants/app_routes.dart';
|
||||
import 'package:sigap/src/utils/popups/loaders.dart';
|
||||
|
||||
|
@ -29,17 +28,7 @@ class RoleSelectionController extends GetxController {
|
|||
super.onInit();
|
||||
fetchRoles();
|
||||
}
|
||||
|
||||
// Method to return placeholder roles
|
||||
RoleModel getPlaceholderRole(int id) {
|
||||
return RoleModel(
|
||||
id: id.toString(),
|
||||
name: "Loading...",
|
||||
description: "Role information is loading",
|
||||
createdAt: DateTime.now(),
|
||||
updatedAt: DateTime.now(),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Fetch available roles from repository
|
||||
Future<void> fetchRoles() async {
|
||||
|
@ -88,7 +77,7 @@ class RoleSelectionController extends GetxController {
|
|||
try {
|
||||
isLoading.value = true;
|
||||
|
||||
Logger().i('Selected role: ${selectedRole.value?.name}');
|
||||
// Logger().i('Selected role: ${selectedRole.value?.name}');
|
||||
|
||||
// Check if the selected role is officer
|
||||
if (selectedRole.value?.name.toLowerCase() == 'officer') {
|
||||
|
@ -108,7 +97,7 @@ class RoleSelectionController extends GetxController {
|
|||
message:
|
||||
'An error occurred while selecting the role. Please try again.',
|
||||
);
|
||||
Logger().e('Error in continueWithRole: $e');
|
||||
// Logger().e('Error in continueWithRole: $e');
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart';
|
||||
import 'package:sigap/src/features/auth/data/repositories/authentication_repository.dart';
|
||||
|
||||
class SplashController extends GetxController {
|
||||
final authRepository = Get.find<AuthenticationRepository>();
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/onboarding/datas/onboarding_data.dart';
|
||||
import 'package:sigap/src/features/onboarding/data/dummy/onboarding_dummy.dart';
|
||||
import 'package:sigap/src/utils/constants/sizes.dart';
|
||||
import 'package:sigap/src/utils/helpers/helper_functions.dart';
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/screens/widgets/auth_header.dart';
|
||||
import 'package:sigap/src/features/onboarding/controllers/role_selection_controller.dart';
|
||||
import 'package:sigap/src/features/onboarding/screens/role-selection/widgets/role_card.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_button.dart';
|
||||
import 'package:sigap/src/features/auth/presentasion/widgets/auth_header.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/controllers/role_selection_controller.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/pages/role-selection/widgets/role_card.dart';
|
||||
import 'package:sigap/src/utils/constants/sizes.dart';
|
||||
import 'package:sigap/src/utils/loaders/shimmer.dart';
|
||||
|
||||
|
@ -57,7 +57,7 @@ class RoleSelectionScreen extends StatelessWidget {
|
|||
if (controller.isRolesLoading.value) {
|
||||
// Show shimmer placeholder cards
|
||||
return ListView.builder(
|
||||
itemCount: controller.roles.length,
|
||||
itemCount: 2,
|
||||
itemBuilder:
|
||||
(_, __) => Padding(
|
||||
padding: const EdgeInsets.only(
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:sigap/src/features/personalization/models/models/roles_model.dart';
|
||||
import 'package:sigap/src/features/personalization/data/models/models/roles_model.dart';
|
||||
import 'package:sigap/src/utils/constants/sizes.dart';
|
||||
|
||||
class RoleCard extends StatelessWidget {
|
|
@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:lottie/lottie.dart';
|
||||
import 'package:sigap/src/features/onboarding/controllers/onboarding_controller.dart';
|
||||
import 'package:sigap/src/features/onboarding/presentasion/controllers/onboarding_controller.dart';
|
||||
import 'package:sigap/src/utils/constants/image_strings.dart';
|
||||
import 'package:sigap/src/utils/constants/sizes.dart';
|
||||
import 'package:sigap/src/utils/helpers/helper_functions.dart';
|
|
@ -0,0 +1,38 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/repositories/crime_incidents_repository.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/repositories/crimes_repository.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/repositories/events_repository.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/repositories/evidences_repository.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/repositories/incident_logs_repository.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/repositories/panic_button_repository.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/repositories/sessions_repository.dart';
|
||||
|
||||
class PanicButtonRepositoryBindings implements Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
// Register the main panic button repository
|
||||
Get.lazyPut<PanicButtonRepository>(
|
||||
() => PanicButtonRepository(),
|
||||
fenix: true,
|
||||
);
|
||||
|
||||
// Register other related repositories
|
||||
Get.lazyPut<IncidentLogsRepository>(
|
||||
() => IncidentLogsRepository(),
|
||||
fenix: true,
|
||||
);
|
||||
|
||||
Get.lazyPut<EvidencesRepository>(() => EvidencesRepository(), fenix: true);
|
||||
|
||||
Get.lazyPut<EventsRepository>(() => EventsRepository(), fenix: true);
|
||||
|
||||
Get.lazyPut<CrimesRepository>(() => CrimesRepository(), fenix: true);
|
||||
|
||||
Get.lazyPut<CrimeIncidentsRepository>(
|
||||
() => CrimeIncidentsRepository(),
|
||||
fenix: true,
|
||||
);
|
||||
|
||||
Get.lazyPut<SessionsRepository>(() => SessionsRepository(), fenix: true);
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:sigap/src/features/map/models/models/districts_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/models/models/crime_incidents_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/districts_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/models/models/crime_incidents_model.dart';
|
||||
|
||||
enum CrimeRates { low, medium, high, critical }
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:sigap/src/features/map/models/models/locations_model.dart';
|
||||
import 'package:sigap/src/features/map/data/models/models/locations_model.dart';
|
||||
|
||||
class EventModel {
|
||||
final String id;
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:sigap/src/features/panic-button/models/models/incident_logs_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/models/models/incident_logs_model.dart';
|
||||
|
||||
class EvidenceModel {
|
||||
final String id;
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:sigap/src/features/panic-button/models/models/evidences_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/models/models/evidences_model.dart';
|
||||
|
||||
class IncidentLogModel {
|
||||
final String id;
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:sigap/src/features/panic-button/models/models/events_model.dart';
|
||||
import 'package:sigap/src/features/panic-button/data/models/models/events_model.dart';
|
||||
|
||||
enum SessionStatus { active, inactive }
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/utils/exceptions/exceptions.dart';
|
||||
|
||||
class CrimeIncidentsRepository extends GetxController {
|
||||
static CrimeIncidentsRepository get instance => Get.find();
|
||||
|
||||
final _supabase = SupabaseService.instance.client;
|
||||
|
||||
Future<List<Map<String, dynamic>>> getRecentIncidents() async {
|
||||
try {
|
||||
final response = await _supabase
|
||||
.from('incident_logs')
|
||||
.select('*, location_id(*), category_id(*)')
|
||||
.order('time', ascending: false)
|
||||
.limit(10);
|
||||
|
||||
return List<Map<String, dynamic>>.from(response);
|
||||
} catch (e) {
|
||||
throw TExceptions('Failed to fetch recent incidents: ${e.toString()}');
|
||||
}
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> getIncidentStatistics() async {
|
||||
try {
|
||||
final response = await _supabase.rpc('get_incident_statistics');
|
||||
return response as Map<String, dynamic>;
|
||||
} catch (e) {
|
||||
throw TExceptions('Failed to fetch incident statistics: ${e.toString()}');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sigap/src/cores/services/supabase_service.dart';
|
||||
import 'package:sigap/src/utils/exceptions/exceptions.dart';
|
||||
|
||||
class CrimesRepository extends GetxController {
|
||||
static CrimesRepository get instance => Get.find();
|
||||
|
||||
final _supabase = SupabaseService.instance.client;
|
||||
|
||||
Future<List<Map<String, dynamic>>> getCrimeCategories() async {
|
||||
try {
|
||||
final response = await _supabase
|
||||
.from('crime_categories')
|
||||
.select('*')
|
||||
.order('name', ascending: true);
|
||||
|
||||
return List<Map<String, dynamic>>.from(response);
|
||||
} catch (e) {
|
||||
throw TExceptions('Failed to fetch crime categories: ${e.toString()}');
|
||||
}
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> getCrimeCategoryById(String id) async {
|
||||
try {
|
||||
final response =
|
||||
await _supabase
|
||||
.from('crime_categories')
|
||||
.select('*')
|
||||
.eq('id', id)
|
||||
.single();
|
||||
|
||||
return response;
|
||||
} catch (e) {
|
||||
throw TExceptions('Failed to fetch crime category: ${e.toString()}');
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue