【问题标题】:Providers or stateful widgets?提供者还是有状态的小部件?
【发布时间】:2020-04-16 11:23:16
【问题描述】:

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

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

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

【问题讨论】:

  • 如果你想在你的应用页面之间保持Dice 的状态,所以是的,你需要一个Provider<Dice>

标签: flutter dart


【解决方案1】:

通过为每个页面创建一个有状态的小部件,您将走上正确的轨道,因为每个页面都给出了一些骰子

【讨论】:

    【解决方案2】:

    多亏了你,我想出了一些几乎可以满足我想要的东西!

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2016-04-16
      • 1970-01-01
      相关资源
      最近更新 更多