Flutter 颤振可选择在小部件树中包含/排除父小部件

Flutter 颤振可选择在小部件树中包含/排除父小部件,flutter,Flutter,我有这个小部件树 return Container( color: Colors.blue, child: Container( child: Text("Child"), ), ); 有没有办法从树中删除父窗口小部件或有条件地包含它 例如,如果includeBlueContainer等状态变量为false,我不希望呈现蓝色容器(但显示所有其他内容) 这就是你想要的吗?我无法实现一个可选的包含可重用小部件,但我一直在使用这个模式,它确实实现了我想要实现的目标。我没有对此进行

我有这个小部件树

return Container(
  color: Colors.blue,
  child: Container(
    child: Text("Child"),
  ),
);
有没有办法从树中删除父窗口小部件或有条件地包含它

例如,如果includeBlueContainer等状态变量为false,我不希望呈现蓝色容器(但显示所有其他内容)


这就是你想要的吗?

我无法实现一个可选的包含可重用小部件,但我一直在使用这个模式,它确实实现了我想要实现的目标。我没有对此进行过很多思考,但我仍然觉得有更好的解决方案

class MyContainer extends StatelessWidget {
  final Widget child;
  final bool isIncluded;
  MyContainer({this.child, this.isIncluded = true});

  Widget build(BuildContext context) {
    if (!isIncluded) return child;

    return Container(
      color: Colors.blue,
      child: child,
    );
  }
}

编辑:我用这个制作了一个包:

您可以像这样使用:

import'package:flatter/widgets.dart';
导入“package:conditional_parent_widget/conditional_parent_widget.dart”;
// ...
返回条件parentwidget(
条件:包括蓝色容器,
子:文本(“子”),
parentBuilder:(小部件子项)=>容器(
颜色:颜色,蓝色,
孩子:孩子,
),
);
在内部,它只是:

import'package:flatter/widgets.dart';
类ConditionalParentWidget扩展了无状态小部件{
const ConditionalParentWidget({
钥匙?,钥匙,
需要这个条件,
需要这个孩子,
需要此.parentBuilder,
}):super(key:key);
最后一个孩子;
最终布尔条件;
最终小部件功能(小部件子部件)parentBuilder;
@凌驾
小部件构建(构建上下文){
返回条件?this.parentBuilder(this.child):this.child;
}
}

不,我希望有条件地将蓝色容器完全包括在内。这可能是不可能的,但如果我能做到这一点,将节省大量的重复工作。@atreeon我认为三元运算符可以解决您的问题。顺便说一句,为什么在我花时间回答你的问题时投票否决我?@atreeon对错误的指控表示抱歉。因为颤振机制是构建一棵新树,而不是更新当前树。因此,应该采取另一种方法来制作多个widget,并选择一个适合条件的更容易。
class MyContainer extends StatelessWidget {
  final Widget child;
  final bool isIncluded;
  MyContainer({this.child, this.isIncluded = true});

  Widget build(BuildContext context) {
    if (!isIncluded) return child;

    return Container(
      color: Colors.blue,
      child: child,
    );
  }
}