toping_view_model.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import 'dart:convert';
  2. import 'package:camera/camera.dart';
  3. import 'package:flutter/material.dart';
  4. import '/models/toping_categoria_model.dart';
  5. import '../data/api_response.dart';
  6. import '../services/base_service.dart';
  7. import '../models/models.dart';
  8. import '../services/services.dart';
  9. class TopingViewModel extends ChangeNotifier {
  10. String _busqueda = "";
  11. String get busqueda => _busqueda;
  12. List<Toping> _registros = [];
  13. Toping? _selectedModelo;
  14. bool _isLoading = false;
  15. List<Toping> get registros => _registros;
  16. Toping? get selectedToping => _selectedModelo;
  17. bool get isLoading => _isLoading;
  18. int pagina = 1;
  19. int totalPaginas = 1;
  20. int limite = 10;
  21. setBusqueda(String value) {
  22. _busqueda = value;
  23. notifyListeners();
  24. }
  25. Toping? getById(int id) {
  26. try {
  27. return _registros.firstWhere((toping) => toping.id == id);
  28. } catch (e) {
  29. // Si no se encuentra ninguna categoría con ese ID, regresa null.
  30. return null;
  31. }
  32. }
  33. Future<List<Toping>> fetchRegistros(
  34. {String? q, bool segmentar = false, int limitee = 10}) async {
  35. Map<String, String> parametros = {
  36. "ordenar": "id-desc",
  37. "pagina": "$pagina",
  38. "limite": "$limite",
  39. "expand": "mediaToping,categoriaToping"
  40. };
  41. if (limitee == -1) {
  42. parametros['limite'] = limitee.toString();
  43. }
  44. if (_busqueda.isNotEmpty) {
  45. parametros["q"] = _busqueda;
  46. }
  47. if (segmentar) {
  48. parametros['segmentar'] = "1";
  49. }
  50. var r = ApiResponse(
  51. await BaseService().get("admin/toping", queryParameters: parametros));
  52. pagina = r.paginacion!.pagina;
  53. var total = r.paginacion!.total / r.paginacion!.limite;
  54. totalPaginas = total > 0 ? total.ceil() : 1;
  55. List<Toping> aux = [];
  56. if (r.isOk) {
  57. for (var x in r.resultados!) {
  58. Toping modelo = Toping.fromJson(x);
  59. aux.add(modelo);
  60. }
  61. }
  62. _registros = aux;
  63. notifyListeners();
  64. return _registros;
  65. }
  66. selectModelo(Toping Toping) {
  67. _selectedModelo = Toping;
  68. notifyListeners();
  69. }
  70. setIsLoading(bool loading) {
  71. _isLoading = loading;
  72. notifyListeners();
  73. }
  74. cambiarPagina(int nuevaPagina, {bool segmentar = false}) {
  75. pagina = nuevaPagina;
  76. fetchRegistros(segmentar: segmentar);
  77. }
  78. Future eliminarMedia(Media m) async {
  79. _selectedModelo!.mediaToping
  80. .removeWhere((mediaToping) => mediaToping.media?.id == m.id);
  81. notifyListeners();
  82. }
  83. Future<void> guardarModelo({
  84. required Toping modelo,
  85. required String clave,
  86. required String nombre,
  87. required String descripcion,
  88. required String costo,
  89. required int categoria,
  90. required bool activo,
  91. List<XFile>? fotos,
  92. }) async {
  93. modelo.clave = clave;
  94. modelo.nombre = nombre;
  95. modelo.descripcion = descripcion;
  96. modelo.idCategoria = categoria;
  97. modelo.costo = costo;
  98. modelo.activo = activo;
  99. var r = ApiResponse(await BaseService()
  100. .post("admin/toping/guardar", body: modelo.toJson()));
  101. int id = int.parse(r.detalle!["id"].toString());
  102. if (id > 0 && fotos != null && fotos.isNotEmpty) {
  103. for (var x in fotos) {
  104. await GeneralService().enviarMedia(
  105. id: id,
  106. media: x,
  107. modulo: "Toping",
  108. etiquetaID: "idToping",
  109. tipo: "imagen");
  110. }
  111. }
  112. var s =
  113. await BaseService().post("admin/toping/guardar", body: modelo.toJson());
  114. if (r.statusCode == 200) {}
  115. notifyListeners();
  116. }
  117. Future<void> eliminar(Toping m) async {
  118. var r = await BaseService()
  119. .delete("admin/toping", body: {"id": m.id.toString()});
  120. Map<String, dynamic> resJson = jsonDecode(r.body);
  121. if (r.statusCode == 200) {}
  122. }
  123. }