一尘不染

在颤振中以编程方式关闭模态底板

flutter

我通过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")
      ),
    ]),
  );
});

阅读 252

收藏
2020-08-13

共1个答案

一尘不染

我找不到如何传递由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")
      ),
    ]),
  );
});
2020-08-13