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

How can I implement a switch statement inside a Column widget? FLUTTER

我想在我的专栏中放置一个 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...
                    ]
                  ),
              ),
            ),

这是不可能的,因为 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