flutter - 提供者还是有状态的小部件?
问题描述
我正在做我的第一个真正的颤振项目,我需要创建一个简单的骰子。为了保持代码清晰,我创建了一个 dice.dart 文件,在其中我编写了一个 Dice 类,其中包含一个数字、一个 void 方法 rollDice 和一个返回数字的 getter。
我现在想创建一个有状态的 DiceWidget(将返回一个显示骰子数量的 RaisedButton),我可以在不同的页面上实例化它,并且我可以从中获取数字......我是否必须创建一个提供程序我的班级骰子要这样做吗?还是有其他我不知道的更好的方法,例如只有有状态的小部件?
谢谢您的回答 !阿克塞尔。
解决方案
多亏了你,我想出了一些几乎可以做我想做的事情!
class DiceWidget extends StatefulWidget {
final Function onRolled;
DiceWidget(this.onRolled);
@override
_DiceWidgetState createState() => _DiceWidgetState();
}
class _DiceWidgetState extends State<DiceWidget> {
static Dice dice = Dice();
MaterialColor diceColor = dice.getColor;
@override
Widget build(BuildContext context) {
return SizedBox(
height: 150,
width: 150,
child: RaisedButton(
onPressed: () {
for (int i = 0; i < 10; i++) {
dice.rollDice();
setState(() {
diceColor = dice.getColor;
});
sleep(Duration(milliseconds: i * 100));
}
widget.onRolled(diceColor);
},
color: diceColor,
),
);
}
}
我可以实例化一个 DiceWidget 并赋予它一个在滚动后执行的函数,以处理结果(随机选择的颜色)。
我现在尝试制作的“动画”有问题,我不喜欢我的解决方案(而且它无论如何都不起作用......)是否有一种“更好”的方式来实现这种“滚动效果” ?
谢谢你的回答,阿克塞尔。
推荐阅读
- java - Micronaut如何在同一个控制器中重定向Http
- visual-studio-code - 使用 VScode 和终端进行 OCaml 交互开发的适当做法
- flutter - gradle / wrapper:utime不可能:运行“颤振医生”后不允许操作
- python - 收集用户输入,然后以格式化字符串将其打印到屏幕上
- c# - .net core 5 中的函数参数可以是异步的吗?
- c# - 访问 ServiceLifetime.Scoped DbContext 时出现错误“在前一个操作完成之前在此上下文上启动了第二个操作”
- r - 将年度数据转换为 xts 格式
- java - DbFit:无法完成测试:java.net.SocketException:对等方重置连接:套接字写入错误
- json - 从 json 流中读取地图
- reactjs - 如何在箭头函数中使用反应钩子?