diff --git a/lib/src/controllers/home_controller.dart b/lib/src/controllers/home_controller.dart new file mode 100644 index 0000000..c47b683 --- /dev/null +++ b/lib/src/controllers/home_controller.dart @@ -0,0 +1,99 @@ +import 'package:get/get.dart'; +import 'package:mom_kitchen/src/controllers/base/base_controller.dart'; + +class ProductModel { + final String name; + final double price; + final String image; + final String category; + + ProductModel({ + required this.name, + required this.price, + required this.image, + required this.category, + }); + + factory ProductModel.fromMap(Map map) { + return ProductModel( + name: map['name'] ?? '', + price: (map['price'] as num?)?.toDouble() ?? 0.0, + image: map['image'] ?? '📦', + category: map['category'] ?? '', + ); + } + + Map toMap() { + return { + 'name': name, + 'price': price, + 'image': image, + 'category': category, + }; + } +} + +class HomeController extends BaseController { + final products = [].obs; + final categories = [].obs; + final selectedCategory = ''.obs; + final searchQuery = ''.obs; + + @override + void onInit() { + super.onInit(); + loadProducts(); + } + + Future loadProducts() async { + await runWithLoading(() async { + await Future.delayed(const Duration(milliseconds: 500)); + + final mockProducts = [ + ProductModel(name: 'Organic Apples', price: 4.99, image: '🍎', category: 'Fruits'), + ProductModel(name: 'Fresh Milk', price: 3.49, image: '🥛', category: 'Dairy'), + ProductModel(name: 'Whole Wheat Bread', price: 2.99, image: '🍞', category: 'Bakery'), + ProductModel(name: 'Free Range Eggs', price: 5.99, image: '🥚', category: 'Dairy'), + ProductModel(name: 'Organic Tomatoes', price: 3.99, image: '🍅', category: 'Vegetables'), + ProductModel(name: 'Fresh Salmon', price: 12.99, image: '🐟', category: 'Seafood'), + ]; + + products.value = mockProducts; + + final categorySet = {}; + for (var product in mockProducts) { + categorySet.add(product.category); + } + categories.value = categorySet.toList(); + }); + } + + List get filteredProducts { + var result = products.toList(); + + if (selectedCategory.value.isNotEmpty) { + result = result.where((p) => p.category == selectedCategory.value).toList(); + } + + if (searchQuery.value.isNotEmpty) { + result = result.where((p) => + p.name.toLowerCase().contains(searchQuery.value.toLowerCase()) + ).toList(); + } + + return result; + } + + void selectCategory(String category) { + selectedCategory.value = category; + } + + void search(String query) { + searchQuery.value = query; + } + + void clearFilters() { + selectedCategory.value = ''; + searchQuery.value = ''; + } +}