使用Widget类有条件地返回小部件是否安全?

时间:2019-01-15 03:57:54

标签: dart flutter

通常,我只想根据条件绘制一个Widget。

例如,我可能正在创建一个显示FadeIn.image的组件,但该图像:可能未在CMS中设置。在这种情况下,我想忽略绘制FadeIn.image,而只返回一个空容器。

我已经完成了背景

child: (someValue == null) ? new Container() : new LabelComponent(label: myStringLabel) 

但是这中断了热装,我需要替换为, 子级:_createLabelComponent(myStringLabel),

Widget _createLabelComponent(String label)
{
  if(label == null) {
      return new Container();
    } else {
      return new LabelComponent(label: label) 
    }
}

以下设备可以安全工作并且不会中断热装吗?目前它似乎可以运行,但是在我用此小部件替换所有条件之前,我需要更多反馈。

class ConditionalWidget extends StatefulWidget {

  final bool condition;
  final Widget conditionalWidget;

  ConditionalWidget(this.condition, this.conditionalWidget, {Key key});

  @override
  State createState() => new ConditionalWidgetState();

}

class ConditionalWidgetState extends State<ConditionalWidget> {

  ConditionalWidgetState();

  @override
  void initState()
  {
    super.initState();
  }

  @override
  Widget build(BuildContext context)
  {
    if(widget.condition) {
      return widget.conditionalWidget;
    } else {
      return new Container();
    }
  }
}

1 个答案:

答案 0 :(得分:0)

这里没什么神奇的,childContainer类的属性: 可以使用任何表达式返回child属性的小部件,当然也可以使用条件表达式 condition ? expr1 : expr2

如果热加载失败,请检查其他原因。

例如,破坏热重装的代码:

child: (someValue == null) ? new Container() : new LabelComponent(label: myStringLabel)

使用someValuemyStringLabel,而在_createLabelComponent中只有一个label变量。