From 0fdab1288390190e3537fc684901e8829b2e9d63 Mon Sep 17 00:00:00 2001 From: nayeli92433 Date: Fri, 2 Aug 2024 12:44:14 -0600 Subject: [PATCH] Crear categoria API --- lib/src/controllers/ArticuloController.dart | 2 +- lib/src/controllers/CategoriaController.dart | 55 +++++++++++++++++++++++++++++++++++++++++++++++-------- lib/src/http_api/CategoryApi.dart | 37 ++++++++++++++++++++++++++++++++----- lib/src/pages/NewCategoryPage.dart | 36 +++++++++++++++++++++++++++--------- 4 files changed, 107 insertions(+), 23 deletions(-) diff --git a/lib/src/controllers/ArticuloController.dart b/lib/src/controllers/ArticuloController.dart index 040d040..07e12a6 100644 --- a/lib/src/controllers/ArticuloController.dart +++ b/lib/src/controllers/ArticuloController.dart @@ -15,7 +15,7 @@ class ArticuloController { }; // Verificar la conectividad de la red - List connectivityResult = await _connectivity.checkConnectivity(); + List connectivityResult = await _connectivity.checkConnectivity(); if (!connectivityResult.contains(ConnectivityResult.none)) { if (connectivityResult.contains(ConnectivityResult.wifi) || connectivityResult.contains(ConnectivityResult.mobile)) { try { diff --git a/lib/src/controllers/CategoriaController.dart b/lib/src/controllers/CategoriaController.dart index f331fd7..0757b46 100644 --- a/lib/src/controllers/CategoriaController.dart +++ b/lib/src/controllers/CategoriaController.dart @@ -15,28 +15,67 @@ class CategoryController { 'data': null }; - // Verificar la conectividad de la red List 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 respGet = await _categoryApi.getCategories(); if (respGet['statusCode'] == 200) { try { var decodeResp = json.decode(respGet['body']); - List listCategories = CategoriaModel - .fromJsonArray(decodeResp['data']); + List listCategories = CategoriaModel.fromJsonArray(decodeResp['data']); mapResp['ok'] = true; - mapResp['message'] = - "${listCategories.length} categorías encontradas"; + mapResp['message'] = "${listCategories.length} categorías encontradas"; mapResp['data'] = listCategories; } catch (e) { mapResp['message'] = "Error en procesamiento de datos: $e"; } } else { - mapResp['message'] = - "Error en la respuesta de la API: ${respGet['body']}"; + 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; + } + + // Método para crear una categoría + Future> createCategory(CategoriaModel categoria) async { + Map mapResp = { + 'ok': false, + 'message': 'No se pudo crear la categoría', + 'data': null + }; + + List connectivityResult = await _connectivity.checkConnectivity(); + if (!connectivityResult.contains(ConnectivityResult.none)) { + if (connectivityResult.contains(ConnectivityResult.wifi) || connectivityResult.contains(ConnectivityResult.mobile)) { + + try { + + Map respPost = await _categoryApi.postCategory(categoria); + + + if (respPost['statusCode'] == 200 || respPost['statusCode'] == 201) { + print('Regresa datos '); + try { + var decodeResp = json.decode(respPost['body']); + CategoriaModel newCategory = CategoriaModel.fromJson(decodeResp['data']); + mapResp['ok'] = true; + mapResp['message'] = "Categoría creada exitosamente"; + mapResp['data'] = newCategory; + } catch (e) { + mapResp['message'] = "Error en procesamiento de datos: $e"; + } + } else { + mapResp['message'] = "Error en la respuesta de la API: ${respPost['body']}"; } } catch (e) { mapResp['message'] = "Error en la solicitud a la API: $e"; diff --git a/lib/src/http_api/CategoryApi.dart b/lib/src/http_api/CategoryApi.dart index edc7646..81c1269 100644 --- a/lib/src/http_api/CategoryApi.dart +++ b/lib/src/http_api/CategoryApi.dart @@ -2,22 +2,19 @@ import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:flutter/foundation.dart'; import 'package:miapp_flutter/environments/archivo.dart'; +import 'package:miapp_flutter/src/models/CategoriaModel.dart'; class CategoryApi { + final String apiUrl = 'categoria'; // Asegúrate de que esta URL sea correcta - final String apiUrl = 'categoria'; - - // Método para obtener las categorías Future> getCategories() async { String url = '${apiApp}/$apiUrl?offset=0&max=100'; if (kDebugMode) { print('Url -> $url'); - } try { final response = await http.get(Uri.parse(url)); - // Verifica el estado de la respuesta if (response.statusCode == 200) { return { 'statusCode': response.statusCode, @@ -36,4 +33,34 @@ class CategoryApi { }; } } + + + Future> postCategory(CategoriaModel categoria) async { + String url = '$apiApp/$apiUrl'; + if (kDebugMode) { + print('Url -> $url'); + } + + try { + final response = await http.post( + Uri.parse(url), + headers: {'Content-Type': 'application/json'}, + body: json.encode(categoria.toJson()), + ); + + print('Status code: ${response.statusCode}'); + print('Response body: ${response.body}'); + + return { + "statusCode": response.statusCode, + "body": response.body, + }; + } catch (e) { + return { + "statusCode": 501, + "body": '$e', + }; + } + } + } diff --git a/lib/src/pages/NewCategoryPage.dart b/lib/src/pages/NewCategoryPage.dart index 32aaf09..60d06a2 100644 --- a/lib/src/pages/NewCategoryPage.dart +++ b/lib/src/pages/NewCategoryPage.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import 'package:miapp_flutter/src/models/CategoriaModel.dart'; +import 'dart:convert'; +import '../controllers/CategoriaController.dart'; class NewCategoryPage extends StatefulWidget { const NewCategoryPage({Key? key}) : super(key: key); @@ -14,7 +17,7 @@ class _NewCategoryPageState extends State { final _claveController = TextEditingController(); final _nombreController = TextEditingController(); DateTime _selectedDate = DateTime.now(); - + final _categoryController = CategoryController(); @override Widget build(BuildContext context) { return Scaffold( @@ -71,15 +74,30 @@ class _NewCategoryPageState extends State { ), const SizedBox(height: 16.0), ElevatedButton( - onPressed: () { + onPressed: () async { if (_formKey.currentState!.validate()) { - int fechaCreado = _selectedDate.millisecondsSinceEpoch; - print({ - "clave": _claveController.text, - "fechaCreado": fechaCreado, - "nombre": _nombreController.text - }); - Navigator.pop(context); + CategoriaModel newCategory = CategoriaModel( + id: 0, + key: _claveController.text, + name: _nombreController.text, + createdDate: _selectedDate.millisecondsSinceEpoch, + active: true, + ); + + var response = await _categoryController.createCategory(newCategory); + print('Datos de la categoría a enviar: ${json.encode(newCategory.toJson())}'); + print(response); + + if (response['statusCode'] == 200 || response['statusCode'] == 201) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error al crear categoría: ${response['body']}')), + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Categoría creada con éxito')), + ); + Navigator.pop(context); + } } }, child: const Text('GUARDAR'), -- libgit2 0.27.1