100 lines
2.6 KiB
Dart
100 lines
2.6 KiB
Dart
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<String, dynamic> map) {
|
|
return ProductModel(
|
|
name: map['name'] ?? '',
|
|
price: (map['price'] as num?)?.toDouble() ?? 0.0,
|
|
image: map['image'] ?? '📦',
|
|
category: map['category'] ?? '',
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'name': name,
|
|
'price': price,
|
|
'image': image,
|
|
'category': category,
|
|
};
|
|
}
|
|
}
|
|
|
|
class HomeController extends BaseController {
|
|
final products = <ProductModel>[].obs;
|
|
final categories = <String>[].obs;
|
|
final selectedCategory = ''.obs;
|
|
final searchQuery = ''.obs;
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
loadProducts();
|
|
}
|
|
|
|
Future<void> 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 = <String>{};
|
|
for (var product in mockProducts) {
|
|
categorySet.add(product.category);
|
|
}
|
|
categories.value = categorySet.toList();
|
|
});
|
|
}
|
|
|
|
List<ProductModel> 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 = '';
|
|
}
|
|
}
|