小编Jos*_*oll的帖子

在 SingleChildScrollView 中使用 onPan GestureDetector

问题

所以我在 SingleChildScrollView 中有一个 GestureDetector 小部件(滚动视图是为了适应较小的屏幕)。GestureDetector 正在侦听平移更新。

当 SingleChildScrollView “使用中”时,GestureDetector 无法接收平移更新,因为来自用户的“拖动”输入被转发到 SingleChildScrollView。

我想要的是

当在 GestureDetector 顶部拖动时,使子 GestureDetector 的优先级高于 SingleChildScrollView,但仍具有在 GestureDetector 之外滚动 SingleChildScrollView 的功能。

例子

如果您将此代码复制/粘贴到dart pad中,您就会明白我的意思。当渐变容器很大时,SingleChildScrollView 不处于活动状态 - 您可以拖动蓝色框并在控制台中查看更新。但是,一旦按下切换按钮,容器就会变小,并且 SingleChildScrollView 就会变为活动状态。您现在无法再在控制台中获取平移更新,只能滚动容器。

旁注:似乎如果您快速拖动蓝色框,您就可以获得拖动更新,但缓慢拖动它只会滚动容器。我不确定这是一个错误还是一个功能,但我无法在我的生产应用程序中重现相同的结果。

import 'package:flutter/material.dart';

final Color darkBlue = Color.fromARGB(255, 18, 32, 47);

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends …
Run Code Online (Sandbox Code Playgroud)

widget dart flutter

6
推荐指数
1
解决办法
3483
查看次数

标签 统计

dart ×1

flutter ×1

widget ×1