如何用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
相关产品推荐
相关产品推荐

