Files
kitchen/lib/src/controllers/farm/farm_shop_controller.dart
Developer ceb11d9aac feat: 新增口味偏好服务和菜谱分享功能
- 新增 TastePreferenceService 用于管理用户口味偏好设置
- 实现菜谱分享功能,包括 RecipeShareService 和分享页面
- 更新平台工具类以支持鸿蒙系统检测
- 优化收藏页和农场商店页面的UI交互
- 添加新的参考文献和关于页面内容
- 更新API文档至v3.3.0版本
2026-04-18 08:29:31 +08:00

74 lines
2.2 KiB
Dart

// 农场商店控制器
// 管理种子购买逻辑
import 'package:get/get.dart';
import 'package:mom_kitchen/src/models/farm/crop_config.dart';
import 'package:mom_kitchen/src/models/farm/crop_registry.dart';
import 'package:mom_kitchen/src/models/farm/inventory_item.dart';
import 'package:mom_kitchen/src/services/data/hive_service.dart';
import 'package:mom_kitchen/src/controllers/farm/farm_game_controller.dart';
import 'package:mom_kitchen/src/services/log/logger_service.dart';
import 'package:mom_kitchen/src/services/ui/toast_service.dart';
class FarmShopController extends GetxController {
final _gameController = Get.find<FarmGameController>();
RxList<CropConfig> availableCrops = <CropConfig>[].obs;
@override
void onInit() {
super.onInit();
_loadAvailableCrops();
}
void _loadAvailableCrops() {
availableCrops.assignAll(CropRegistry.getAll());
}
/// 购买种子
Future<void> buySeed(String cropId) async {
final crop = CropRegistry.getById(cropId);
if (crop == null) return;
final player = _gameController.player.value;
if (player.gold < crop.seedPrice) {
ToastService.warning('金币不足,需要 ${crop.seedPrice} 💰');
return;
}
// 扣除金币
player.gold -= crop.seedPrice;
_gameController.player.value = player;
await _gameController.savePlayer();
// 添加种子到背包
final seedItem = InventoryItem.seed(
cropId: crop.id,
name: crop.name,
emoji: crop.emoji,
price: crop.seedPrice,
quantity: 1,
);
final inventory = _gameController.inventory;
final existing = inventory
.where((item) => item.itemId == seedItem.itemId)
.firstOrNull;
if (existing != null) {
existing.quantity++;
await _saveInventoryItem(existing);
} else {
inventory.add(seedItem);
await _saveInventoryItem(seedItem);
}
ToastService.success('🛒 已购买 ${crop.name}种子');
LoggerService().info('Bought ${crop.name} seed for ${crop.seedPrice} gold');
}
Future<void> _saveInventoryItem(InventoryItem item) async {
final hiveService = HiveService();
await hiveService.farmInventory?.put(item.itemId, item);
}
}