buildContent method
Implementation
@override
Widget buildContent(BuildContext context) {
// LayoutBuilder可以拿到父组件的约束,然后在IntrinsicHeight外层添加约束,
// 最小高度为LayoutBuilder父组件约束的高度,最大高度不做限制。
// return LayoutBuilder(
// builder: (BuildContext context, BoxConstraints constraints) {
// return SingleChildScrollView(
// clipBehavior: childClipBehavior ?? Clip.hardEdge,
// physics: isScrollable ? AlwaysScrollableScrollPhysics() : NeverScrollableScrollPhysics(),
// child: ConstrainedBox(
// constraints: constraints.copyWith(
// minHeight: constraints.maxHeight,
// maxHeight: double.infinity,
// ),
// child: IntrinsicHeight(
// // Column的高度为contentWidget加bottomWidget,Spacer的高度计算为0。
// child: Column(
// children: <Widget>[
// if (topWidget != null) topWidget!,
// if (contentWidget != null)
// Expanded(
// child: contentWidget!,
// )
// else
// Spacer(),
// if (bottomWidget != null) bottomWidget!,
// ],
// ),
// ),
// ),
// );
// },
// );
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
return ConstrainedBox(
constraints: constraints.copyWith(
minHeight: constraints.maxHeight,
maxHeight: double.infinity,
),
child: IntrinsicHeight(
// Column的高度为contentWidget加bottomWidget,Spacer的高度计算为0。
child: AnimatedPadding(
padding: EdgeInsets.only(
// 下面这一行是重点
bottom: MediaQuery.of(context).viewInsets.bottom,
),
duration: Duration.zero,
child: Column(
children: <Widget>[
if (topWidget != null) topWidget!,
if (contentWidget != null)
Expanded(
child: SingleChildScrollView(
clipBehavior: childClipBehavior ?? Clip.hardEdge,
physics: isScrollable ? const AlwaysScrollableScrollPhysics() : const NeverScrollableScrollPhysics(),
child: contentWidget!,
),
)
else
const Spacer(),
if (bottomWidget != null) bottomWidget!,
],
),
),
),
);
},
);
}