flutter 列嵌套内的SingleChildScrollView

8xiog9wr  于 2023-05-08  发布在  Flutter
关注(0)|答案(2)|浏览(244)

我在实现SingleChildScrollView时遇到了问题。在我的理解中,我可以使用SingleChildScrollView来使其中的小部件可滚动。我创建了以下基本示例,其中我希望ElevatedButton位于底部。剩余的空间将由其他小部件占用。根据我的理解,如果其他小部件中的内容超过了可用空间,那么由于SingleChildScrollView,内容应该可以滚动。

return Scaffold(
  backgroundColor: Colors.white,
  body: SafeArea(
    child: Column(
      children: [
        Text("Some Text Here"),
        Column(
          children: [
            Expanded(
              child: SingleChildScrollView(
                scrollDirection: Axis.vertical,
                child: Column(
                  children: [
                    Container(color: Colors.red, height: 500),
                    Text("HELLO"),
                    Container(color: Colors.red, height: 500),
                  ],
                ),
              ),
            ),
            ElevatedButton(
              onPressed: () {},
              child: const Text("BUTTON"),
            ),
          ],
        )
      ],
    ),
  ),
);

我在SingleChilScrollView上面使用了Expanded,这样在放置ElevatedButton之后的剩余空间应该是可滚动区域,这样它就有了高度限制。
如果有人能详细解释这个问题的解决方法,我将不胜感激,因为这将帮助我澄清我的概念。谢谢大家。
Error:在performLayout()期间引发了以下Assert:RenderFlex子对象具有非零的flex,但传入的高度约束是无边界的。

agxfikkp

agxfikkp1#

你只需要两个列。第一列用于SinglechildScrollView中的布局,第二列用于SinglechildScrollView的布局,其中文本位于顶部,按钮位于底部。

return Scaffold(
          backgroundColor: Colors.white,
          body: SafeArea(
            child: Column(
              children: [
                Text("Some Text Here"),
                Expanded(
                  child: SingleChildScrollView(
                    scrollDirection: Axis.vertical,
                    child: Column(
                      children: [
                        Container(color: Colors.red, height: 500),
                        Text("HELLO"),
                        Container(color: Colors.red, height: 500),
                      ],
                    ),
                  ),
                ),
                ElevatedButton(
                  onPressed: () {},
                  child: const Text("BUTTON"),
                ),
              ],
            ),
          ),
        );
u5i3ibmn

u5i3ibmn2#

第二个Column正在获取 * 传入的高度约束是无界的。*,您可以使用Expanded小部件 Package 它以获取可用空间。

return Scaffold(
  backgroundColor: Colors.white,
  body: SafeArea(
    child: Column(
      children: [
        Text("Some Text Here"),
        Expanded(
          child: Column( //this one 👆🏻
            children: [
              Expanded(
                child: SingleChildScrollView(
                  scrollDirection: Axis.vertical,
                  child: Column(
                    children: [
                      Container(color: Colors.red, height: 500),
                      Text("HELLO"),
                      Container(color: Colors.red, height: 500),
                    ],
                  ),
                ),
              ),
              ElevatedButton(
                onPressed: () {},
                child: const Text("BUTTON"),
              ),
            ],
          ),
        )
      ],
    ),
  ),
);

相关问题