我通过showModalBottomSheet<Null>()一个带有GestureDetector的小部件并在其中显示了BottomSheet 。我希望看到BottomSheet不仅可以通过在其外部触摸来关闭,而且可以在内部GestureDetector的onTap事件发生后关闭。但是,似乎GestureDetector没有转发触摸事件。
showModalBottomSheet<Null>()
所以我想知道,是否有办法以编程方式触发ModalBottomSheet的关闭,还是有办法告诉GestureDetector转发触摸事件?
更新(2018-04-12):
遵循代码片段以更好地理解。问题是,点击“项目1”或“项目2”时,ModalBottomSheet没有关闭。
showModalBottomSheet<Null>(context: context, builder: (BuildContext context) { return new SingleChildScrollView(child: new Column(crossAxisAlignment: CrossAxisAlignment.stretch, children: [ new GestureDetector(onTap: () { doSomething(); }, child: new Text("Item 1") ), new GestureDetector(onTap: () { doSomething(); }, child: new Text("Item 2") ), ]), ); });
我找不到如何传递由GestureDetector捕获的事件的方法。但是,可以通过以下方式以编程方式关闭ModalBottomSheet
Navigator.pop(context);
因此,我只是在GestureDetector的onTap回调函数中调用了pop函数。
showModalBottomSheet<Null>(context: context, builder: (BuildContext context) { return new SingleChildScrollView(child: new Column(crossAxisAlignment: CrossAxisAlignment.stretch, children: [ new GestureDetector(onTap: () { Navigator.pop(context); doSomething(); }, child: new Text("Item 1") ), new GestureDetector(onTap: () { Navigator.pop(context); doSomething(); }, child: new Text("Item 2") ), ]), ); });