在颤振中如何使带有平移手势的内部小部件不会与PageView冲突

Posted

技术标签:

【中文标题】在颤振中如何使带有平移手势的内部小部件不会与PageView冲突【英文标题】:In flutter How to make the inner widget with pan gesture will not conflict with PageView 【发布时间】:2021-09-27 05:33:51 【问题描述】:

我在PageView中有一个带有平移手势的小部件,并且PageView可以水平滑动,当我水平平移小部件时,PageView会移动。

我期望的是平移手势可以移动页面视图中的小部件,而不是移动页面视图

这是图片。

这里是演示代码”

import 'package:flutter/material.dart';


class HomePage extends StatefulWidget 
  const HomePage(Key? key) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();


class _HomePageState extends State<HomePage> 
  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: PageView.builder(
        itemBuilder: (ctx, index) 
          return ChildPage(
            index: index,
          );
        ,
        itemCount: 2,
      ),
    );
  


class ChildPage extends StatefulWidget 
  final int index;

  const ChildPage(Key? key, required this.index) : super(key: key);

  @override
  _ChildPageState createState() => _ChildPageState();


class _ChildPageState extends State<ChildPage> 
  Offset offset = Offset.zero;

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Stack(
        alignment: Alignment.center,
        children: [
          Positioned(
              top: offset.dy,
              left: offset.dx,
              child: GestureDetector(
                onPanUpdate: (details) 
                  print("hh");
                  offset = offset.translate(details.delta.dx, details.delta.dy);
                  setState(() );
                ,
                child: Container(
                  color: Colors.yellow,
                  width: 100,
                  height: 100,
                ),
              ))
        ],
      ),
    );
  


【问题讨论】:

你要换页吗 您可以使用physics: NeverScrollableScrollPhysics(), PageViewBuilder 来避免滚动。 但是当我的手指在 PageView 但不在那个小部件中时,我需要这个 PageView 滚动 @YeasinSheikh 假设您希望在水平滚动时页面和小部件都发生变化的手势检测器? 我有一个解决方案,我使用 RawGestureDectector,并使用水平和垂直手势 【参考方案1】:

使用 RawGestureDectector,并使用水平和垂直手势来避免这种解决方案

【讨论】:

以上是关于在颤振中如何使带有平移手势的内部小部件不会与PageView冲突的主要内容,如果未能解决你的问题,请参考以下文章

在颤振/飞镖中与图像下的小部件交互

如何暗示颤振小部件是可滚动的?

除了 setstate 颤振之外,如何在小部件构建中获取值

在颤振中从父小部件调用 setState 不会更新状态

如何使用提供程序包收听更改并在颤振中重建小部件?

DataCell 溢出带有多个文本小部件的列 [dataTable]