如何在 Column 小部件中实现 switch 语句?颤动

时间:2021-06-09 03:40:36

标签: flutter dart switch-statement

我想在我的 Column 中放置一个 switch 语句,以决定在我的 FLUTTER APP 中构建哪种子小部件组合。

在我的特定情况下,我创建了一个具有 4 种不同可能状态(AnimationEnum.None、AnimationEnum.etc)的枚举,每个状态都会触发不同的子构建组合。

我可以通过在每个可能的小部件上方编写一个 if 语句来使这个工作正常进行,但这显然是一种低效的做事方式,并且想要简化我的代码。

我觉得我很接近但无法到达那里。这是带有占位符小部件的代码的简化版本:

谢谢!

              child: Container(
                  
                    child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        crossAxisAlignment: CrossAxisAlignment.stretch,
                        children: [

                        switch(widget._cardAnimType)

                  case AnimationEnum.None: {
                  Widget1('args'),
                  Widget2('args'),
                  Widget3('args'),
                  //etc
                  break;
                  }
                    case AnimationEnum._card1Correct: {
                  Widget1('args'),
                  Widget2('args'),
                  Widget3('args'),
                  //etc
                  break;
                  }
                    ///more switch statements here...
                    ]
                  ),
              ),
            ),

1 个答案:

答案 0 :(得分:1)

这是不可能的,因为 dart 支持集合 if's(在集合本身内部)但不支持 switch。

最好的机会是提取逻辑并使用如下所示的扩展运算符。

  @override
  Widget build(BuildContext context) {
    return Column(children: [...extractedMethod(widget._cardAnimType)],);
  }


List<Widget> (AnimationEnum animation){
                        switch(animation)

                  case AnimationEnum.None: {
                  Widget1('args'),
                  Widget2('args'),
                  Widget3('args'),
                  //etc
                  break;
                  }
                    case AnimationEnum._card1Correct: {
                  Widget1('args'),
                  Widget2('args'),
                  Widget3('args'),
                  //etc
                  break;
                  }
}


有关收集操作的更多信息,请查看此article