signIn method

void signIn()

Implementation

void signIn() async {
  if (!isValidateFields()) return;

  final version = SharedAppConfig.appVersionBuildNumber;
  final fcmToken = SharedAppConfig.fcmToken ?? '';

  final params = {
    'username': userNameController?.text ?? '',
    'password': passwordController?.text ?? '',
    'lat': locationController.latitude.value.toString(),
    'lng': locationController.longitude.value.toString(),
    'fcmToken': fcmToken,
    'loginTypeId': kIsWeb ? 1 : 2,
    'appVersion': version,
    'timestamp': DateTime.now().millisecondsSinceEpoch.toString(),
    'deviceUniqueId': deviceId.value,
    'systemType': kIsWeb ? 'Web' : 'APK', // Web or Mobile
    'platform': getPlatform(), // Android / iPhone
    'device': deviceModel.value, // Device Name
    'osVersion': osVersion.value // OS Version
  };

  isLoading.value = true;
  try {
    final response =
        await _apiService.postData(AppUrls.loginApiNew, data: params);
    final userModel = LoginNewResponse.fromJson(response.data);
    if (userModel.data != null && userModel.statusCode == 200) {
      final positions = userModel.data?.positions ?? [];
      final userId = userModel.data?.userId ?? 0;

      // Super Admin (userId = 1)
      if (positions.isEmpty && userId == 1) {
        final defaultRole = OrganizationHierarchyData(
          idAclPositionMapping: 1,
          nameAclPositionMapping: userModel.data?.displayName ?? 'Admin',
          idOrganization: 1,
          idDivision: 1,
          idDepartment: 1,
          idRole: 1,
          idMasterRoleType: 1,
        );

        await saveUserDetailsNew(userModel.data, defaultRole);
        sessionController.startSessionTimer();
        navigationToModuleDashboard();
        return;
      }

      // No roles assigned
      if (positions.isEmpty) {
        AppUtils.showDialogPopUp(
          headerName: 'Access Denied',
          content: 'No roles are assigned to your account. Please contact your administrator.',
          buttonText: AppStrings.ok,
        );
        return;
      }

      if (positions.length == 1) {
        await saveUserDetailsNew(userModel.data, positions.first);
        navigationToModuleDashboard();
      } else {
        showRoleSelectionDialog(userModel.data!, positions);
      }
      sessionController.startSessionTimer();
      // saveUserDetailsNew(userModel.data);
      AppUtils.showSnackBar(userModel.message ?? 'Success Login');
    } else {
      AppUtils.showSnackBar(userModel.message ?? 'Something went wrong..');
    }
    errorMessage.value = '';
    isLoading.value = false;
  } catch (e) {
    isLoading.value = false;
    errorMessage.value = 'Failed to fetch data';
  } finally {
    isLoading.value = false;
  }
}