【问题标题】:PageView.builder inside SingleChildScrollView flutterSingleChildScrollView 中的 PageView.builder 颤动
【发布时间】:2020-08-25 04:36:35
【问题描述】:

我正在尝试在 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)),
                ),
              ),
            );
          },
        )
.....

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

【问题讨论】:

  • 您可以尝试为容器添加固定高度吗?
  • 嗨..我试过了,但我仍然收到错误

标签: flutter widget scrollview flutter-pageview


【解决方案1】:

如果您希望 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 小部件试图采用所有可用高度,因此它试图采用无限高度,我认为这就是导致问题的原因.

【讨论】:

  • 嗨,谢谢您的帮助...我删除了我的 Singlechildscrollview 并使用 Singlechildscrollview 包裹了我的填充,但我仍然收到错误...我应该添加更多内容吗?
  • 莫阿兹是对的。 ListView 的默认行为是增加其大小以填充父级大小。但是,滚动视图是无限的。要更改此行为,您需要在 ListView 上将 shrinkwrap 设置为 true。这将使 ListView 占用其子项所需的大小。
  • 我已经在您的代码中尝试了我的解决方案,它按预期工作,我在更改后使用代码编辑了我的答案。
  • 我自己尝试时出错了...您的代码对我有帮助,非常感谢您的帮助和解释@Moaz El-sawaf 和 Gabriel Gava
  • 我的荣幸,祝你好运❤
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 2021-04-21
  • 2021-12-18
  • 2023-03-17
  • 1970-01-01
  • 2021-08-11
  • 2020-12-31
  • 2021-03-15
相关资源
最近更新 更多