当我在 GestureDetector 中使用 ListView 或其他滚动时,它不起作用:
new GestureDetector(
child: new Container(
alignment: FractionalOffset.center,
child: new Text("Short Content"),
decoration: new BoxDecoration(
color: Colors.red
),
),
onVerticalDragStart: (DragStartDetails detail){
print("onVerticalDragStart");
},
onVerticalDragUpdate: (DragUpdateDetails detail){
print("onVerticalDragUpdate");
},
)
Run Code Online (Sandbox Code Playgroud)
上面它适用于拖动检测,但如果我在 GestureDetector 中有其他滚动,它将不起作用
new GestureDetector(
child: new Container(
alignment: FractionalOffset.center,
child: new ListView(
children: <Widget>[
new Text("Long content "),
],
),
decoration: new BoxDecoration(
color: Colors.red
),
),
onVerticalDragStart: (DragStartDetails detail){
print("onVerticalDragStart");
},
onVerticalDragUpdate: (DragUpdateDetails detail){
print("onVerticalDragUpdate");
},
)
Run Code Online (Sandbox Code Playgroud)
您必须创建一个ScrollController
并将其分配给父窗口小部件和子窗口小部件。如果SingleChildScrollView
中具有无界约束scrollDirection
,则必须添加shrinkWrap: true
。
例子:
在构建方法之外:
ScrollController scrollController = ScrollController();
Run Code Online (Sandbox Code Playgroud)
在构建方法内部,您可以像这样使用它:
Scaffold(
body: SingleChildScrollView(
controller: scrollController,
child: GestureDetector(
child: Container(
alignment: FractionalOffset.center,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(color: Colors.red),
child: ListView(
controller: scrollController,
shrinkWrap: true,
children: const <Widget>[
Center(child: Text("Long content")),
],
),
),
onVerticalDragStart: (DragStartDetails detail) {
print("onVerticalDragStart");
},
onVerticalDragUpdate: (DragUpdateDetails detail) {
print("onVerticalDragUpdate");
},
),
),
)
Run Code Online (Sandbox Code Playgroud)
图片:
归档时间: |
|
查看次数: |
716 次 |
最近记录: |