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,
);
}
}