buildContent method

  1. @override
Widget buildContent(
  1. BuildContext context
)
override

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