PageView.builder SingleChildScrollView 内部颤动

PageView.builder inside SingleChildScrollView flutter

我正在尝试在 SingleChildScrollView 中使用 PageView.builder,但我总是收到一条错误消息

RenderBox was not laid out: RenderRepaintBoundary#490ce relayoutBoundary=up15 NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 1694 pos 12: 'hasSize'

这里是部分代码

@override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: SingleChildScrollView(
            child: PageView.builder(
          itemCount: 3,
          scrollDirection: Axis.horizontal,
          reverse: false,
          itemBuilder: (BuildContext context, int index) {
            return Padding(
              padding: EdgeInsets.symmetric(horizontal: 4.0),
              child: Container(
                decoration: BoxDecoration(
                  color: Colors.grey,
                  borderRadius: BorderRadius.all(Radius.circular(4.0)),
                ),
              ),
            );
          },
        )
.....

我应该从代码中添加什么吗?

如果您希望 PageView 小部件的子部件可滚动,请尝试使用 SingleChildScrollView 小部件包装 itemBuilder 方法的根小部件并将其从当前小部件中删除位置。

所以代码应该是这样的:

@override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: PageView.builder(
          itemCount: 3,
          scrollDirection: Axis.horizontal,
          reverse: false,
          itemBuilder: (BuildContext context, int index) {
            return SingleChildScrollView( // Moving this widget down to this position is the only change in the code...
              child: Padding(
                padding: EdgeInsets.symmetric(horizontal: 4.0),
                child: Container(
                  decoration: BoxDecoration(
                    color: Colors.grey,
                    borderRadius: BorderRadius.all(Radius.circular(4.0)),
                  ),
                ),
              ),
            );
          },
        ),
.....

问题是 SingleChildScrollView 小部件采用无限高度,因为滚动功能和 PageView 小部件试图占用所有可用高度,所以它试图采用无限高度,我认为这就是导致问题的原因。