ArticuloController.dart 1.83 KB
Newer Older
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 47 48 49
import 'dart:convert';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:miapp_flutter/src/models/ArticuloModel.dart';
import '../http_api/ArticleApi.dart';

class ArticuloController {
  final Connectivity _connectivity = Connectivity();
  final ArticleApi _articleApi = ArticleApi();

  Future<Map<String, dynamic>> getArticles(int categoryId) async {
    Map<String, dynamic> mapResp = {
      'ok': false,
      'message': 'No hay artículos',
      'data': null
    };

        // Verificar la conectividad de la red
        List<ConnectivityResult> connectivityResult = await _connectivity.checkConnectivity();
    if (!connectivityResult.contains(ConnectivityResult.none)) {
      if (connectivityResult.contains(ConnectivityResult.wifi) || connectivityResult.contains(ConnectivityResult.mobile)) {
        try {
          // Realizar la solicitud a la API
          Map<String, dynamic> respGet = await _articleApi.getArticles(categoryId);
          if (respGet['statusCode'] == 200) {
            try {
              var decodeResp = json.decode(respGet['body']);
              List<ArticleModel> listArticles = ArticleModel.fromJsonArray(decodeResp['data']);
              mapResp['ok'] = true;
              mapResp['message'] = "${listArticles.length} artículos encontrados";
              mapResp['data'] = listArticles;
            } catch (e) {
              mapResp['message'] = "Error en procesamiento de datos: $e";
            }
          } else {
            mapResp['message'] = "Error en la respuesta de la API: ${respGet['body']}";
          }
        } catch (e) {
          mapResp['message'] = "Error en la solicitud a la API: $e";
        }
      } else {
        mapResp['message'] = 'No hay conexión a internet';
      }
    } else {
      mapResp['message'] = 'No hay conexión a internet';
    }

    return mapResp;
  }
}