categoty_controller.dart 2.17 KB
Newer Older
yenisleydi committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
import 'dart:convert'; // Importa el paquete para trabajar con JSON.
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:primer_practica/src/http_api/category_service.dart';
import 'package:primer_practica/src/models/categoryModel.dart';


class CategoryController {
  final Connectivity _connectivity = Connectivity(); // Crea una instancia de Connectivity para verificar el estado de la red.

  Future<Map<String, dynamic>> getCategories() async {
    // Inicializa la respuesta por defecto.
    Map<String, dynamic> mapResp = {
      'ok': false,
      'message': 'No hay categorias',
      'data': null
    };

    // Verifica la conectividad.
    ConnectivityResult connectivityResult = (await _connectivity.checkConnectivity()) as ConnectivityResult;

    // Si hay conexión a internet.
    if (connectivityResult != ConnectivityResult.none) {
      if (connectivityResult == ConnectivityResult.wifi || connectivityResult == ConnectivityResult.mobile) {
        CategoryService categoryApi = CategoryService(); // Crea una instancia de CategoryApi.
        Map<String, dynamic> respGet = await categoryApi.getCategories(); // Obtiene las categorías desde la API.

        // Si la respuesta de la API es exitosa.
        if (respGet['statusCode'] == 200) {
          try {
            var decodeResp = json.decode(respGet['body']); // Decodifica la respuesta JSON.
            List<CategoryModel> listCategories = CategoryModel.fromJsonArray(decodeResp['data']); // Convierte los datos en una lista de categorías.
            mapResp['ok'] = true; // Marca la operación como exitosa.
            mapResp['message'] = "${listCategories.length} categorias encontradas"; // Actualiza el mensaje con el número de categorías encontradas.
            mapResp['data'] = listCategories; // Asigna los datos de las categorías a la respuesta.
          } catch (e) {
            mapResp['message'] = "Error en operador $e"; // Captura y asigna cualquier error durante la decodificación.
          }
        } else {
          mapResp['message'] = "${respGet['body']}"; // Asigna el mensaje de error de la API a la respuesta.
        }
      }
    }

    return mapResp; // Retorna la respuesta
  }
}