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

如何用Flutter的Random函数实现概率触发SnackBar的抽卡系统?

解决抽卡系统SnackBar触发问题

你的核心问题是没有根据概率结果控制SnackBar的显示逻辑,当前代码不管抽中与否都会执行showSnackBar,所以每次点击都会弹出。

修改后的代码如下:

void _incrementCounter() {
  setState(() {
    Random random = new Random();
    // 10%概率抽中(true),90%未抽中(false)
    double falseProbability = 0.9;
    bool booleanResult = random.nextDouble() > falseProbability;
    
    _counter++;
    
    // 仅在抽中时才创建并显示SnackBar
    if (booleanResult) {
      int _intValue = random.nextInt(10); // 仅抽中时生成随机值
      final snackBar = SnackBar(
        content: Text('$_intValue'),
        action: SnackBarAction(
          label: 'Undo',
          onPressed: () {
            // 这里可以添加撤销逻辑
          },
        ),
      );
      ScaffoldMessenger.of(context).showSnackBar(snackBar);
    }
  });
}

关键修改点:

  • 将SnackBar的创建和showSnackBar调用包裹在if (booleanResult)条件判断中,只有当随机结果满足10%概率时才会触发
  • 把_intValue的生成移到条件内部,避免不必要的计算(如果这个值只有抽中时才需要的话)

这样修改后,就会按照你设定的10%概率来显示SnackBar,而不是每次点击都弹出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:22:17