首页 > 解决方案 > 提供者还是有状态的小部件?

问题描述

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

我现在想创建一个有状态的 DiceWidget(将返回一个显示骰子数量的 RaisedButton),我可以在不同的页面上实例化它,并且我可以从中获取数字......我是否必须创建一个提供程序我的班级骰子要这样做吗?还是有其他我不知道的更好的方法,例如只有有状态的小部件?

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

标签: flutterdart

解决方案


多亏了你,我想出了一些几乎可以做我想做的事情!

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

我现在尝试制作的“动画”有问题,我不喜欢我的解决方案(而且它无论如何都不起作用......)是否有一种“更好”的方式来实现这种“滚动效果” ?

谢谢你的回答,阿克塞尔。


推荐阅读