首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SingleChildScrollView内部PageView

SingleChildScrollView内部PageView
EN

Stack Overflow用户
提问于 2021-10-02 19:17:29
回答 1查看 234关注 0票数 1

我的底部导航有四个不同的选项卡,其中一个选项卡(最后一个)是一个SingleChildScrollView。我想我可以点击图标在底部导航,也可以滚动的应用程序。这很好,只有最后一个选项卡带来了很多麻烦:我的问题是,当我向下滚动到SingleChildScrollView (最后一个选项卡)时,我不能再滚动到它上面的选项卡了。这就是我的PageView (它是身体)的样子:

代码语言:javascript
复制
      body: PageView(
        scrollDirection: Axis.vertical,
        onPageChanged: (page) {
          setState(
            () {
              _selectedIndex = page;
            },
          );
        },
        controller: _controller,
        children: [
          Home(),
          Games(),
          Shop(),
          AboutUs(),
        ],
      ),
    );
  }

这就是我的Tab (AboutUs())的样子:

代码语言:javascript
复制
  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      scrollDirection: Axis.vertical,
      physics: BouncingScrollPhysics(),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
           // In there are many many children (Containers, etc. :))
        ],
      ),
    );
  }

对不起,我解释得不好,希望有人能帮上忙!谢谢!:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-02 20:19:55

一种可能的方法是用如下所示的SingleChildScrollView封装NotificationListener:

代码语言:javascript
复制
class AboutUs extends StatelessWidget {

  final PageController pageController;
  const AboutUs({Key? key, required this.pageController}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return NotificationListener<ScrollUpdateNotification>(
      onNotification: (notification) {
        if (pageController.page == 3) {
          if (notification.metrics.pixels < -50) {
            pageController.previousPage(duration: const Duration(milliseconds: 200), curve: Curves.ease);
          }
        }
        return false;
      },
      child: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        physics: const BouncingScrollPhysics(),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            // In there are many many children (Containers, etc. :))
          ],
        ),
      )
    );
  }
}

请注意,您需要将您的PageController传递给AboutUs Widget,以便您可以返回到上一页。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69419517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档