我有这个小部件树
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,
);
}
}
编辑:我把这个东西封装成了一个包:https://pub.dev/packages/conditional_parent_widget
你可以像这样使用它:
import 'package:flutter/widgets.dart';
import 'package:conditional_parent_widget/conditional_parent_widget.dart';
// ...
return ConditionalParentWidget(
condition: includeBlueContainer,
child: Text("Child"),
parentBuilder: (Widget child) => Container(
color: Colors.blue,
child: child,
),
);
在内部,它只是:
import 'package:flutter/widgets.dart';
class ConditionalParentWidget extends StatelessWidget {
const ConditionalParentWidget({
Key? key,
required this.condition,
required this.child,
required this.parentBuilder,
}) : super(key: key);
final Widget child;
final bool condition;
final Widget Function(Widget child) parentBuilder;
@override
Widget build(BuildContext context) {
return condition ? this.parentBuilder(this.child) : this.child;
}
}