apiPost function

dynamic apiPost(
  1. String route,
  2. dynamic data, {
  3. String? token,
  4. String? customRoute,
  5. dynamic context,
  6. bool showSuccess = false,
  7. bool showError = false,
  8. String? successMessage,
  9. String? errorMessage,
})

Implementation

apiPost(
  String route,
  data, {
  String? token,
  String? customRoute,
  context,
  bool showSuccess = false,
  bool showError = false,
  String? successMessage,
  String? errorMessage,
}) async {
  final String response = await rootBundle.loadString('env.json');
  final jsonFile = await json.decode(response);

  String baseUrl = customRoute ?? await BaissApi.getBaseUrl();

  var dio = Dio();

  try {
    dio.options.connectTimeout = 10000;
    dio.options.receiveTimeout = 10000;
    dio.options.headers['content-Type'] = 'application/json';

    if (token != null) {
      dio.options.headers['Authorization'] =
          '${jsonFile["API_TOKEN_TYPE"] ?? "Bearer"} $token';
    }

    if (!jsonFile['APP_PROD_ENV']) {
      print("............................... Posting data to : $baseUrl$route");
    }

    final result = await dio.post(baseUrl + route,
        data: data, options: Options(method: "Post"));

    if (result.statusCode == 200) {
      if (!jsonFile['APP_PROD_ENV']) {
        print(
            "............................... Data posted to : $baseUrl$route successfuly");
      }

      if (context != null && showSuccess) {
        ScaffoldMessenger.of(context).showSnackBar(SnackBar(
            duration: const Duration(seconds: 2),
            backgroundColor: Colors.green,
            content: Text(
              successMessage ?? 'Effectué avec success 👌🏽',
              textAlign: TextAlign.center,
            )));
      }

      return {
        'data': result,
        'status': result.statusCode,
      };
    } else {
      return {
        'data': result,
        'status': result.statusCode,
      };
    }
  } catch (e) {
    if (e is DioError) {
      if (!jsonFile['APP_PROD_ENV']) {
        print(
            "............................... ${e.message} where posting data to : $baseUrl$route");
      }

      if (context != null && showError) {
        ScaffoldMessenger.of(context).showSnackBar(SnackBar(
            duration: const Duration(seconds: 2),
            backgroundColor: Colors.red,
            content: Text(
              errorMessage ?? "Une erreur est suevenue !!",
              textAlign: TextAlign.center,
            )));
      }

      return {
        'data': e,
        'status': e.response!.statusCode,
        'error': e.response,
      };
    }

    return {
      'data': e,
      'status': '',
      'error': e.toString(),
    };
  }
}