123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- import 'dart:convert';
- import 'package:camera/camera.dart';
- import 'package:flutter/material.dart';
- import '/models/toping_categoria_model.dart';
- import '../data/api_response.dart';
- import '../services/base_service.dart';
- import '../models/models.dart';
- import '../services/services.dart';
- class TopingViewModel extends ChangeNotifier {
- String _busqueda = "";
- String get busqueda => _busqueda;
- List<Toping> _registros = [];
- Toping? _selectedModelo;
- bool _isLoading = false;
- List<Toping> get registros => _registros;
- Toping? get selectedToping => _selectedModelo;
- bool get isLoading => _isLoading;
- int pagina = 1;
- int totalPaginas = 1;
- int limite = 10;
- setBusqueda(String value) {
- _busqueda = value;
- notifyListeners();
- }
- Toping? getById(int id) {
- try {
- return _registros.firstWhere((toping) => toping.id == id);
- } catch (e) {
- // Si no se encuentra ninguna categoría con ese ID, regresa null.
- return null;
- }
- }
- Future<List<Toping>> fetchRegistros(
- {String? q, bool segmentar = false, int limitee = 10}) async {
- Map<String, String> parametros = {
- "ordenar": "id-desc",
- "pagina": "$pagina",
- "limite": "$limite",
- "expand": "mediaToping,categoriaToping"
- };
- if (limitee == -1) {
- parametros['limite'] = limitee.toString();
- }
- if (_busqueda.isNotEmpty) {
- parametros["q"] = _busqueda;
- }
- if (segmentar) {
- parametros['segmentar'] = "1";
- }
- var r = ApiResponse(
- await BaseService().get("admin/toping", queryParameters: parametros));
- pagina = r.paginacion!.pagina;
- var total = r.paginacion!.total / r.paginacion!.limite;
- totalPaginas = total > 0 ? total.ceil() : 1;
- List<Toping> aux = [];
- if (r.isOk) {
- for (var x in r.resultados!) {
- Toping modelo = Toping.fromJson(x);
- aux.add(modelo);
- }
- }
- _registros = aux;
- notifyListeners();
- return _registros;
- }
- selectModelo(Toping Toping) {
- _selectedModelo = Toping;
- notifyListeners();
- }
- setIsLoading(bool loading) {
- _isLoading = loading;
- notifyListeners();
- }
- cambiarPagina(int nuevaPagina, {bool segmentar = false}) {
- pagina = nuevaPagina;
- fetchRegistros(segmentar: segmentar);
- }
- Future eliminarMedia(Media m) async {
- _selectedModelo!.mediaToping
- .removeWhere((mediaToping) => mediaToping.media?.id == m.id);
- notifyListeners();
- }
- Future<void> guardarModelo({
- required Toping modelo,
- required String clave,
- required String nombre,
- required String descripcion,
- required String costo,
- required int categoria,
- required bool activo,
- List<XFile>? fotos,
- }) async {
- modelo.clave = clave;
- modelo.nombre = nombre;
- modelo.descripcion = descripcion;
- modelo.idCategoria = categoria;
- modelo.costo = costo;
- modelo.activo = activo;
- var r = ApiResponse(await BaseService()
- .post("admin/toping/guardar", body: modelo.toJson()));
- int id = int.parse(r.detalle!["id"].toString());
- if (id > 0 && fotos != null && fotos.isNotEmpty) {
- for (var x in fotos) {
- await GeneralService().enviarMedia(
- id: id,
- media: x,
- modulo: "Toping",
- etiquetaID: "idToping",
- tipo: "imagen");
- }
- }
- var s =
- await BaseService().post("admin/toping/guardar", body: modelo.toJson());
- if (r.statusCode == 200) {}
- notifyListeners();
- }
- Future<void> eliminar(Toping m) async {
- var r = await BaseService()
- .delete("admin/toping", body: {"id": m.id.toString()});
- Map<String, dynamic> resJson = jsonDecode(r.body);
- if (r.statusCode == 200) {}
- }
- }
|