Files
kitchen/lib/src/controllers/home_controller.dart
2026-04-08 01:30:31 +08:00

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 = '';
}
}