如何在 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
我想在我的专栏中放置一个 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