toping_view_model.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import 'package:camera/camera.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:yoshi_papas_app/models/toping_categoria_model.dart';
  4. import '../data/api_response.dart';
  5. import '../services/base_service.dart';
  6. import '../models/models.dart';
  7. import '../services/services.dart';
  8. class TopingViewModel extends ChangeNotifier {
  9. String _busqueda = "";
  10. String get busqueda => _busqueda;
  11. List<Toping> _registros = [];
  12. Toping? _selectedModelo;
  13. bool _isLoading = false;
  14. List<Toping> get registros => _registros;
  15. Toping? get selectedToping => _selectedModelo;
  16. bool get isLoading => _isLoading;
  17. int pagina = 1;
  18. int totalPaginas = 1;
  19. int limite = 25;
  20. setBusqueda(String value) {
  21. _busqueda = value;
  22. notifyListeners();
  23. }
  24. Future<List<Toping>> fetchRegistros(
  25. {String? q, bool segmentar = false}) async {
  26. Map<String, String> parametros = {
  27. "ordenar": "id-desc",
  28. "pagina": "$pagina",
  29. "limite": "$limite",
  30. "expand": "mediaToping,categoriaToping"
  31. };
  32. if (_busqueda.isNotEmpty) {
  33. parametros["q"] = _busqueda;
  34. }
  35. if (segmentar) {
  36. parametros['segmentar'] = "1";
  37. }
  38. var r = ApiResponse(
  39. await BaseService().get("admin/toping", queryParameters: parametros));
  40. pagina = r.paginacion!.pagina;
  41. var total = r.paginacion!.total / r.paginacion!.limite;
  42. totalPaginas = total > 0 ? total.ceil() : 1;
  43. List<Toping> aux = [];
  44. if (r.isOk) {
  45. for (var x in r.resultados!) {
  46. Toping modelo = Toping.fromJson(x);
  47. aux.add(modelo);
  48. }
  49. }
  50. _registros = aux;
  51. notifyListeners();
  52. return _registros;
  53. }
  54. selectModelo(Toping Toping) {
  55. _selectedModelo = Toping;
  56. notifyListeners();
  57. }
  58. setIsLoading(bool loading) {
  59. _isLoading = loading;
  60. notifyListeners();
  61. }
  62. cambiarPagina(int nuevaPagina, {bool segmentar = false}) {
  63. pagina = nuevaPagina;
  64. fetchRegistros(segmentar: segmentar);
  65. }
  66. Future eliminarMedia(Media m) async {
  67. _selectedModelo!.mediaToping
  68. .removeWhere((mediaToping) => mediaToping.media?.id == m.id);
  69. notifyListeners();
  70. }
  71. Future<void> guardarModelo({
  72. required Toping modelo,
  73. required String clave,
  74. required String nombre,
  75. required String descripcion,
  76. List<XFile>? fotos,
  77. }) async {
  78. modelo.clave = clave;
  79. modelo.nombre = nombre;
  80. modelo.descripcion = descripcion;
  81. var r = ApiResponse(
  82. await BaseService().post("admin/toping", body: modelo.toJson()));
  83. int id = int.parse(r.detalle!["id"].toString());
  84. if (id > 0 && fotos != null && fotos.isNotEmpty) {
  85. for (var x in fotos) {
  86. await GeneralService().enviarMedia(
  87. id: id,
  88. media: x,
  89. modulo: "Autotanque",
  90. etiquetaID: "idInspeccion",
  91. tipo: "imagen");
  92. }
  93. }
  94. var s =
  95. await BaseService().post("admin/toping/guardar", body: modelo.toJson());
  96. if (r.statusCode == 200) {}
  97. notifyListeners();
  98. }
  99. }