提供者还是有状态的小部件?

时间:2020-04-16 11:23:16

标签: flutter dart

我正在做我的第一个实际的flutter项目,我需要创建一个简单的骰子。 为了使代码清晰,我创建了一个dice.dart文件,在其中编码了一个Dice类,其中包含一个数字,一个void方法rollDice和一个返回数字的getter。

我现在想创建一个有状态的DiceWidget(将返回一个RaiseButton,显示骰子的编号),我可以在不同的页面上实例化该编号,然后从中获取编号...我是否必须在我的班骰子上创建提供者,这样做吗?还是还有我不知道的另一种更好的方式,例如仅使用有状态的小部件?

谢谢您的回答! 阿克塞尔。

2 个答案:

答案 0 :(得分:0)

您的步伐正确,因为每个页面通过为每个页面创建一个有状态的小部件而提供了很多骰子

答案 1 :(得分:0)

谢谢你,我想出了几乎可以实现我想要的东西!

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实例化,并赋予它一个在滚动后执行的功能,以处理结果(颜色随机选择)。

我现在要尝试制作“动画”时遇到问题,我不喜欢我的解决方案(无论如何它都无法正常工作...) 是否有一种“更精细”的方式来实现这种“滚动效果”?

感谢您的回答, 阿克塞尔。