You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter MVC设计模式中实现牌组数量联动卡牌计数功能

解决方案

核心逻辑修正思路:你之前的问题本质是没有拆分清楚「单副牌面值基数」、「牌组数量」、「已消耗张数」三个维度的关系,调整方案如下:

1. Model层修改

我们把单副牌每张面值的初始数量固定为常量,新增变量存储对应面值已消耗的张数,总剩余张数通过公式实时计算,同时处理牌组数量调整后的边界问题。

// 单副牌对应面值的初始数量,固定常量
static const int _baseFaceCardCount = 4;
// 已消耗的2号牌数量
static int _consumedFaceCard2 = 0;
static int _deckCount = 1;

// 实时计算当前2号牌的剩余总数量
static int get faceCard2 {
  final total = _baseFaceCardCount * _deckCount - _consumedFaceCard2;
  return total > 0 ? total : 0;
}

// 点击面值按钮递减逻辑
static int decrementFaceCard2() {
  if (faceCard2 > 0) {
    _consumedFaceCard2++;
  }
  return faceCard2;
}

// 牌组数量调整逻辑,新增边界处理:如果调小牌组后已消耗数量超过总基数,自动修正已消耗值
static int get deckCount => _deckCount;
static int incrementDeckCount() => _deckCount++;
static int decrementDeckCount() {
  if (_deckCount > 1) {
    _deckCount--;
    // 边界处理:避免调小牌组后剩余数量为负
    final maxTotal = _baseFaceCardCount * _deckCount;
    if (_consumedFaceCard2 > maxTotal) {
      _consumedFaceCard2 = maxTotal;
    }
  }
  return _deckCount;
}

2. Controller层修改

不需要改动原有逻辑,原有调用方法完全兼容,因为Model层对外暴露的getter和方法名没有变化。

3. View层修改

不需要改动原有逻辑,直接读取ManualCountController.faceCard2即可同时响应面值按钮点击、牌组数量调整两种场景的数值变化。

逻辑验证

  • 牌组数量设为2:初始总数量=4*2=8,点击面值按钮1次,已消耗=1,剩余=7,符合减1的需求
  • 牌组数量调整为3:总数量自动变为4*3=12,已消耗还是1,剩余=11,符合联动更新需求
  • 牌组数量从2调整为1时,如果之前已经消耗了5张,会自动把已消耗修正为4,剩余=0,不会出现负数

内容的提问来源于stack exchange,提问作者Ants

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:24:04