|
@@ -0,0 +1,93 @@
|
|
|
+import 'package:flutter/material.dart';
|
|
|
+import 'package:sqflite/sqflite.dart';
|
|
|
+import '../../core/services/reposit_factory.dart';
|
|
|
+import '../../core/services/services.dart';
|
|
|
+import '../../core/models/models.dart';
|
|
|
+
|
|
|
+class HomeViewModel extends ChangeNotifier {
|
|
|
+ final Repository<Producto> productoRepository;
|
|
|
+ final Repository<CategoriaProducto> categoriaRepository;
|
|
|
+
|
|
|
+ HomeViewModel({
|
|
|
+ required this.productoRepository,
|
|
|
+ required this.categoriaRepository,
|
|
|
+ });
|
|
|
+
|
|
|
+ String _busqueda = "";
|
|
|
+ String get busqueda => _busqueda;
|
|
|
+
|
|
|
+ List<CategoriaProducto> _categorias = [];
|
|
|
+ bool _isLoading = false;
|
|
|
+ CategoriaProducto? _selectedCategoria;
|
|
|
+
|
|
|
+ List<CategoriaProducto> get categorias => _categorias;
|
|
|
+ bool get isLoading => _isLoading;
|
|
|
+ CategoriaProducto? get selectedCategoria => _selectedCategoria;
|
|
|
+
|
|
|
+ List<Producto> _productos = [];
|
|
|
+ Producto? _selectedProducto;
|
|
|
+
|
|
|
+ List<Producto> get productos => _productos;
|
|
|
+ Producto? get selectedProducto => _selectedProducto;
|
|
|
+
|
|
|
+ int _currentPage = 1;
|
|
|
+ int _totalCategorias = 0;
|
|
|
+ int _limit = 10;
|
|
|
+
|
|
|
+ int get currentPage => _currentPage;
|
|
|
+ int get totalCategorias => _totalCategorias;
|
|
|
+ int get totalPages => (_totalCategorias / _limit).ceil();
|
|
|
+
|
|
|
+ setBusqueda(String value) {
|
|
|
+ _busqueda = value;
|
|
|
+ notifyListeners();
|
|
|
+ }
|
|
|
+
|
|
|
+ void selectCategoria(CategoriaProducto categoria) {
|
|
|
+ _selectedCategoria = categoria;
|
|
|
+ notifyListeners();
|
|
|
+ }
|
|
|
+
|
|
|
+ void selectProducto(Producto producto) {
|
|
|
+ _selectedProducto = producto;
|
|
|
+ notifyListeners();
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<void> fetchLocalCategorias() async {
|
|
|
+ _isLoading = true;
|
|
|
+ notifyListeners();
|
|
|
+
|
|
|
+ final resultado = await categoriaRepository.consultarConOrden(
|
|
|
+ orderBy: 'nombre ASC', where: 'eliminado IS NULL');
|
|
|
+
|
|
|
+ _categorias = resultado;
|
|
|
+ _isLoading = false;
|
|
|
+ notifyListeners();
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<void> fetchLocalProductosPorCategoria(
|
|
|
+ CategoriaProducto categoria) async {
|
|
|
+ _isLoading = true;
|
|
|
+ notifyListeners();
|
|
|
+
|
|
|
+ final resultado = await productoRepository.consultarConOrden(
|
|
|
+ orderBy: 'nombre ASC',
|
|
|
+ where: 'eliminado IS NULL AND idCategoria = ${categoria.id}');
|
|
|
+
|
|
|
+ _productos = resultado;
|
|
|
+ _isLoading = false;
|
|
|
+ notifyListeners();
|
|
|
+ }
|
|
|
+
|
|
|
+ // void nextPage() {
|
|
|
+ // if (_currentPage < totalPages) {
|
|
|
+ // fetchLocal(page: _currentPage + 1);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ // void previousPage() {
|
|
|
+ // if (_currentPage > 1) {
|
|
|
+ // fetchLocal(page: _currentPage - 1);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+}
|