首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复与手势竞争的InteractiveViewer和滚动视图

如何修复与手势竞争的InteractiveViewer和滚动视图
EN

Stack Overflow用户
提问于 2022-08-19 00:47:40
回答 1查看 257关注 0票数 4

我有一个垂直的scrollView,然后是一个水平的pageView,包含包装在InteractiveViewer中的图像。

但是当我尝试放大InteractiveViewer的时候,这是相当混乱的。所有这些滚动视图都在竞争手势,我习惯了一种更简单的方法来解决这个问题。

编辑:所以问题似乎在于onScale手势(GestureDetector())或2指针手势

我有一件事

代码语言:javascript
运行
复制
CustomScrollView(
  slivers: [
   const SliverToBoxAdapter(
         child: Container(
           width: double.infinity,
           height: 400,
           child: PageView(
             ...
             InteractiveViewer()
             ...
        )
      )
    ),
 ]
)
EN

回答 1

Stack Overflow用户

发布于 2022-08-26 05:03:57

当用户开始使用交互式时,可以禁用相关小部件的物理功能,可以根据比例、手指等添加一些条件。

代码语言:javascript
运行
复制
  ScrollPhysics _pagePhysics = const PageScrollPhysics();
  ScrollPhysics _customScrollViewPhysics = const ScrollPhysics();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: CustomScrollView(
          // assign physic for scroll ------------------------
          physics: _customScrollViewPhysics,
          slivers: [
            SliverToBoxAdapter(
              child: SizedBox(
                height: 400,
                child: PageView(
                  // assign physic for page view --------------------
                  physics: _pagePhysics,
                  children: [
                    Container(
                      color: Colors.blue,
                    ),
                    InteractiveViewer(
                      onInteractionStart: (details) {
                        /// you can add some condition like this
                        //if use 2 finger
                        //if(details.pointerCount == 2){}

                        // then disable physic
                        setState(() {
                          _pagePhysics = const NeverScrollableScrollPhysics();
                          _customScrollViewPhysics =
                              const NeverScrollableScrollPhysics();
                        });
                        
                      },
                      onInteractionUpdate: (details) {
                        //condition based on scale
                        if (details.scale == 1.2) {}
                      },
                      onInteractionEnd: (details) {
                        // after interaction revert it
                        setState(() {
                          _pagePhysics = const PageScrollPhysics();
                          _customScrollViewPhysics = const ScrollPhysics();
                        });
                        
                      },
                      child: Container(
                        color: Colors.yellow,
                        child: const Text("Lorem Ipsum"),
                      ),
                    )
                  ],
                ),
              ),
            )
          ],
        ),
      ),
    );
  }

如果interactiveviewer没有为页面查看或customScroll留出任何空间,那么添加一些按钮总是很好的,这样用户就不会卡在InteractiveViewer上了。你应该让你的ui像这样:

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

https://stackoverflow.com/questions/73410800

复制
相关文章

相似问题

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