首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >另一个PageView中的PageView的Flutter块滚动

另一个PageView中的PageView的Flutter块滚动
EN

Stack Overflow用户
提问于 2021-08-13 23:21:02
回答 1查看 34关注 0票数 1

我有下面的小部件,它垂直显示一些食谱的图片列表,当滑动到每个食谱的右侧页面时,它会转到它的描述页面。这里的问题是,当我转到DescriptionScreen时,我可以向下滚动并转到其他食谱的RecipeScreen。我想阻止这一点,只有当用户在RecipeScreen上时才允许垂直滚动,否则如果用户在DescriptionScreen上,则只能向左滑动并继续滚动。怎么可能做到这一点呢?

代码语言:javascript
复制
  Widget build(BuildContext context) {
    return Scaffold(
      extendBody: true,
      extendBodyBehindAppBar: true,
      body: Column(
        children: [
          Expanded(
            child: PageView.builder(
              controller: verticalPageController,
              scrollDirection: Axis.vertical,
              itemCount: recipes.length,
              allowImplicitScrolling: true,
              itemBuilder: (BuildContext context, int index) {
                return PageView(
                  controller: pageControllers[index],
                  children: [
                    RecipeScreen(
                      recipe: recipes[index],
                      onRecipeDelete: onRecipeDelete,
                      ),
                    ),
                    DescriptionScreen(
                      recipeId: recipes[index].id,
                      onRecipeSave: onRecipeSave,
                    ),
                  ],
                );
              },
            ),
          ),
          SafeArea(
            top: false,
            child: Container(height: 0),
          ),
        ],
      ),
      bottomNavigationBar: BottomBar(
        page: currentPage,
      ),
    );
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-14 00:01:14

我会向您的水平PageViews添加一个onPageChanged,当用户转到DescriptionScreen时,您会将垂直PageView的物理属性设置为NeverScrollableScrollPhysics

高级代码:

代码语言:javascript
复制
class MyStatefulWidgetState extends State<MyStatefulWidget> {
  ScrollPhysics physics;
  
  void setScrollPhysics(ScrollPhysics physics) {
    setState(() {
      this.physics = physics
    });
  }

  Widget build(BuildContext context) {
    return Scaffold(
      body: //...
        PageView.builder(
          controller: verticalPageController,
          // ...
          physics: physics, // this line will enable / disable scroll
          itemBuilder: (ctx, index) {
            return PageView(
              controller: pageControllers[index],
              onPageChanged: (page) {
                // enable / disable vertical scrolling depending on page
                setScrollPhysics(page == 1 ? NeverScrollableScrollPhysics() : null);
              }
            )
          }
        )
    );
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68779206

复制
相关文章

相似问题

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