- 新增 TastePreferenceService 用于管理用户口味偏好设置 - 实现菜谱分享功能,包括 RecipeShareService 和分享页面 - 更新平台工具类以支持鸿蒙系统检测 - 优化收藏页和农场商店页面的UI交互 - 添加新的参考文献和关于页面内容 - 更新API文档至v3.3.0版本
74 lines
2.2 KiB
Dart
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);
|
|
}
|
|
}
|