使SingleChildScrollView的第一项(或填充)不可滚动,并委派touch事件

时间:2020-09-27 13:01:49

标签: flutter flutter-layout flutter-listview

我有一个Stack和两个Column

第一列仅包含一个具有定义高度的InteractiveViewer的子(1)。(例如250)。它根据第二列中SingleChildScrollView的滚动偏移量来更改其内容的缩放和平移。滚动时不应将其推出屏幕,因此它应位于堆栈的滚动视图下方。

第二列的SingleChildScrollView顶部填充(2) OR 第一视图(3)相匹配>(1)高度。

现在,我要使顶部填充(2) 视图(3)不滚动SingleChildScrollView但请将这些触摸事件传递给InteractiveViewer。不管解决方案使用填充还是空白视图都无所谓,我只想在此处说明,而不是使用填充或视图可以实现的目标。我都尝试过,但都失败了。

我尝试了GestureDetectorIgnorePointerAbsorbPointer,但似乎SingleChildScrollView总是获得触摸事件。我还没有找到使顶部填充也无法滚动的方法。

基本上,我想实现与附件gif类似的功能,除了我不需要“ Collapsing Header” 文本动画和应用栏。只需注意隐藏在滚动视图下方的山脉即可。一旦滚动偏移等于填充/视图高度(在此示例中为250),滚动视图应占据整个屏幕。

有可能吗?我的InteractiveViewer背后的逻辑比下面提供的示例复杂得多,我只是对其进行了简化以使问题更易于理解。

 Stack(children: [
          Column(
            children: [
              Container( // (1) Widget that should get the touch events
                height: 250,
                child: InteractiveViewer(...)
              ),  
            ],
          ),
          Column(
            children: [
              Expanded(
                child: SingleChildScrollView(
                  padding: EdgeInsets.only(top: 250), // (2) Either not scrollable padding
                  child: Column(
                    children: [
                      Container(height: 250), // (3) or not scrollable first item
                      Container(...)
                    ],
                  ),
                ),
              ),
            ],
          ),
        ]);

enter image description here

0 个答案:

没有答案