Curso App restaurant con pedidos en Flutter
Implementación de ApiService para Obtener Datos de Menús e Items
En esta lección, aprenderás a implementar la clase ApiService, que permite realizar peticiones a una API para obtener datos de menús e items en tu aplicación de restaurante. A través de métodos específicos, podrás manejar las solicitudes HTTP y transformar la respuesta JSON en objetos
En esta lección, aprenderás a implementar el servicio de API (ApiService
) en tu aplicación de restaurante. Este servicio te permitirá obtener datos de los menús y los items de la API, facilitando la interacción con el backend desarrollado en Laravel.
Antes de comenzar, es necesario importar los paquetes y modelos requeridos:
dart
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:restaurant/models/menu.dart';
import 'package:restaurant/models/item.dart';
dart:convert
: Proporciona funciones para codificar y decodificar datos en formato JSON.http
: Este paquete se utiliza para realizar peticiones HTTP.menu.dart
y item.dart
: Modelos que representan la estructura de los datos de menús y items respectivamente.ApiService
La clase ApiService
se encargará de realizar las peticiones a la API:
dart
class ApiService {
final String baseUrl;
ApiService(this.baseUrl);
}
baseUrl
: Esta propiedad almacena la URL base de la API. Se pasa como parámetro al constructor de la clase.fetchMenus()
Este método se utiliza para obtener la lista de menús desde la API:
dart
Future<List<Menu>> fetchMenus() async {
final response = await http.get(Uri.parse('$baseUrl/menus'));
if (response.statusCode == 200) {
List<dynamic> data = json.decode(response.body);
return data.map((json) => Menu.fromJson(json)).toList();
} else {
throw Exception('Failed to load menus');
}
}
Descripción:
$baseUrl/menus
.Código:
http.get(Uri.parse('$baseUrl/menus'))
: Realiza la solicitud HTTP y espera la respuesta.if (response.statusCode == 200)
: Comprueba si la respuesta es exitosa (código 200).
json.decode(response.body)
: Decodifica el cuerpo de la respuesta JSON a una lista dinámica.data.map((json) => Menu.fromJson(json)).toList()
: Transforma la lista dinámica en una lista de objetos Menu
utilizando el método fromJson
definido en el modelo Menu
.else
: Si la respuesta no es exitosa, lanza una excepción con un mensaje de error.fetchItems()
Este método se utiliza para obtener la lista de items desde la API:
dart
Future<List<Item>> fetchItems() async {
final response = await http.get(Uri.parse('$baseUrl/item'));
if (response.statusCode == 200) {
List<dynamic> data = json.decode(response.body);
return data.map((json) => Item.fromJson(json)).toList();
} else {
throw Exception('Error al cargar los items');
}
}
Descripción:
$baseUrl/item
.Código:
http.get(Uri.parse('$baseUrl/item'))
: Envía la solicitud HTTP para obtener los items.if (response.statusCode == 200)
: Verifica si la respuesta es exitosa (código 200).
json.decode(response.body)
: Decodifica el cuerpo de la respuesta JSON a una lista dinámica.data.map((json) => Item.fromJson(json)).toList()
: Convierte la lista dinámica en una lista de objetos Item
usando el método fromJson
del modelo Item
.else
: Lanza una excepción si ocurre un error al cargar los items.ApiService
Para utilizar el ApiService
en tu aplicación, puedes crear una instancia de la clase y llamar a los métodos fetchMenus
y fetchItems
en la lógica de tu aplicación, por ejemplo, en un FutureBuilder
o en un Provider
para manejar el estado de carga.
dart
void main() async {
ApiService apiService = ApiService('http://your-api-url.com/api');
List<Menu> menus = await apiService.fetchMenus();
List<Item> items = await apiService.fetchItems();
}
2250 visitas
« Capítulo 4 – Modelos: Menu, Item y Cart
Capítulo 6 – Implementación de Provider »
Descarga el código fuente del proyecto adquiriendo el curso completo
Comprar© Copyright Codea::App Cursos de Programación Online | LATAM | 2020 - 2024