我有这个小部件树
return Container(
color: Colors.blue,
child: Container(
child: Text("Child"),
),
);
Run Code Online (Sandbox Code Playgroud)
有没有办法从树中删除父小部件或有条件地包含它?
例如,如果 includeBlueContainer 等状态变量为 false,我不想渲染蓝色容器(但显示其他所有内容)。
atr*_*eon 10
我无法实现可选地包含可重用小部件,但我一直在使用这种模式,它确实实现了我想要实现的目标。我没有对此进行太多思考,但我仍然觉得某个地方有更好的解决方案。
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,
);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我用这个制作了一个包: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,
),
);
Run Code Online (Sandbox Code Playgroud)
在内部它只是:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |