在颤振中以编程方式关闭模态底板
问题内容:
我通过showModalBottomSheet<Null>()
一个带有GestureDetector的小部件并在其中显示了BottomSheet
。我希望看到BottomSheet不仅可以通过在其外部触摸来关闭,而且可以在内部GestureDetector的onTap事件发生后关闭。但是,似乎GestureDetector没有转发触摸事件。
所以我想知道,是否有办法以编程方式触发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")
),
]),
);
});