serviceResolution function

Future<bool> serviceResolution(
  1. BuildContext context,
  2. {required Map<String, dynamic> response,
  3. required VoidCallback resolution,
  4. VoidCallback? actionForStatusFalse}
)

Implementation

Future<bool> serviceResolution(
  BuildContext context, {
  required Map<String, dynamic> response,
  required VoidCallback resolution,
  VoidCallback? actionForStatusFalse,
}) async {
  final InterfaceProvider interfaceProvider = Provider.of(
    context,
    listen: false,
  );

  bool success = false;

  if (response.containsKey('generic_error')) {
    interfaceProvider.loading = false;
    utils.showSnackbar(
      context,
      message: response['generic_error'],
    );
  } else if (response.containsKey('no_network')) {
    interfaceProvider.loading = false;
    utils.showSnackbar(
      context,
      message: 'No hay internet',
    );
  } else if (response.containsKey('error')) {
    interfaceProvider.loading = false;
    await showDialog(
      barrierDismissible: false,
      context: context,
      builder: (context) => ErrorDialog(
        supportSubject: AppMailMessages.tokenExpiration,
        onTap: () => utils.logout(context),
        iconPath: 'assets/icons/dialogs/danger.svg',
        iconColor: ApplicationTheme.red,
        title: 'El token no es válido',
        text: const <String>[
          'La sesión en su dispositivo caducó',
          'Vuelva a iniciar sesión',
        ],
        buttonText: 'Iniciar Sesión',
      ),
    );
  } else if (response.containsKey('status')) {
    if (response['status']) {
      success = true;
      resolution.call();
    } else {
      interfaceProvider.loading = false;
      if (response.containsKey('errors')) {
        if (actionForStatusFalse != null) {
          actionForStatusFalse.call();
        } else {
          await showDialog(
            context: context,
            builder: (context) => ErrorDialog(
              supportSubject: AppMailMessages.genericError,
              iconPath: 'assets/icons/dialogs/danger.svg',
              iconColor: Colors.orange,
              title: response['message'],
              text: (response['errors'] as List)
                  .map(
                    (element) => element.toString(),
                  )
                  .toList(),
              buttonText: 'Aceptar',
              onTap: actionForStatusFalse,
            ),
          );
        }
      } else {
        interfaceProvider.loading = false;
        utils.showSnackbar(
          context,
          message: response['message'],
        );
      }
    }
  } else {
    interfaceProvider.loading = false;
    utils.showSnackbar(
      context,
      message: GlobalMessagesEnvironment.genericError,
    );
  }
  return success;
}