flutter 如果父列/行中排除了单个微件,则会发生抖动

u2nhd7ah  于 2023-02-05  发布在  Flutter
关注(0)|答案(1)|浏览(159)

我有一个自定义的小部件,其中90%的时间只有一个小部件,但根据某些条件,它可以是2或3,应该适合垂直。

@override
Widget build(BuildContext context)
{
  List<Widget> children = [];

  // Main widget
  children.add(widget.child);

  // Condition
  if (condition1)
    children.add(otherWidget);

  // Condition
  if (condition2)
    children.add(anotherWidget);

  return Column(children: children);
}

由于90%的情况下它只是一个小部件,我应该删除该列吗?

return children.length > 1 ? Column(children: children) : children.first;

我还没有在任何地方看到过这种逻辑,更常见的是保留column并使用其中的条件:

@override
Widget build(BuildContext context)
{
  return Column(children: [
   widget.child,
  if (condition1)
    otherWidget,
  if (condition2)
    anotherWidget,
  ]);
}

我更喜欢后者,但是我应该为很可能会有一个不必要的列构建而烦恼吗?
(btw该小部件是具有许多子部件的ListView的示例子部件,并且在该小部件内部将存在需要保持其状态的有状态小部件。)

fykwrbwg

fykwrbwg1#

我建议您使用 Package 在可见性小部件中的Column和小部件(这样,如果不必要,您就不需要额外的小部件)

Column(
  children: [
    child,
    Visibility(
      visible: condition,
      child: anotherWidget,
    )
    Visibility(
      visible: condition,
      child: anotherWidget,
    )
  ]
)

相关问题