toping_view_model.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import 'dart:convert';
  2. import 'package:camera/camera.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:yoshi_papas_app/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 = 25;
  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}) async {
  35. Map<String, String> parametros = {
  36. "ordenar": "id-desc",
  37. "pagina": "$pagina",
  38. "limite": "$limite",
  39. "expand": "mediaToping,categoriaToping"
  40. };
  41. if (_busqueda.isNotEmpty) {
  42. parametros["q"] = _busqueda;
  43. }
  44. if (segmentar) {
  45. parametros['segmentar'] = "1";
  46. }
  47. var r = ApiResponse(
  48. await BaseService().get("admin/toping", queryParameters: parametros));
  49. pagina = r.paginacion!.pagina;
  50. var total = r.paginacion!.total / r.paginacion!.limite;
  51. totalPaginas = total > 0 ? total.ceil() : 1;
  52. List<Toping> aux = [];
  53. if (r.isOk) {
  54. for (var x in r.resultados!) {
  55. Toping modelo = Toping.fromJson(x);
  56. aux.add(modelo);
  57. }
  58. }
  59. _registros = aux;
  60. notifyListeners();
  61. return _registros;
  62. }
  63. selectModelo(Toping Toping) {
  64. _selectedModelo = Toping;
  65. notifyListeners();
  66. }
  67. setIsLoading(bool loading) {
  68. _isLoading = loading;
  69. notifyListeners();
  70. }
  71. cambiarPagina(int nuevaPagina, {bool segmentar = false}) {
  72. pagina = nuevaPagina;
  73. fetchRegistros(segmentar: segmentar);
  74. }
  75. Future eliminarMedia(Media m) async {
  76. _selectedModelo!.mediaToping
  77. .removeWhere((mediaToping) => mediaToping.media?.id == m.id);
  78. notifyListeners();
  79. }
  80. Future<void> guardarModelo({
  81. required Toping modelo,
  82. required String clave,
  83. required String nombre,
  84. required String descripcion,
  85. required String costo,
  86. required int categoria,
  87. required bool activo,
  88. List<XFile>? fotos,
  89. }) async {
  90. modelo.clave = clave;
  91. modelo.nombre = nombre;
  92. modelo.descripcion = descripcion;
  93. modelo.idCategoria = categoria;
  94. modelo.costo = costo;
  95. modelo.activo = activo;
  96. var r = ApiResponse(await BaseService()
  97. .post("admin/toping/guardar", body: modelo.toJson()));
  98. int id = int.parse(r.detalle!["id"].toString());
  99. if (id > 0 && fotos != null && fotos.isNotEmpty) {
  100. for (var x in fotos) {
  101. await GeneralService().enviarMedia(
  102. id: id,
  103. media: x,
  104. modulo: "Toping",
  105. etiquetaID: "idToping",
  106. tipo: "imagen");
  107. }
  108. }
  109. var s =
  110. await BaseService().post("admin/toping/guardar", body: modelo.toJson());
  111. if (r.statusCode == 200) {}
  112. notifyListeners();
  113. }
  114. Future<void> eliminar(Toping m) async {
  115. var r = await BaseService()
  116. .delete("admin/toping", body: {"id": m.id.toString()});
  117. Map<String, dynamic> resJson = jsonDecode(r.body);
  118. if (r.statusCode == 200) {}
  119. }
  120. }