如何在物品点击后关闭脚手架的抽屉?

Dog*_*ion 16 dart flutter

在我点击脚手架抽屉中的物品后,我希望它自动隐藏.我如何在Flutter中做到这一点?

Col*_*son 25

Navigator.pop()将弹出Drawer堆栈中的路径并使其关闭.

  • 但这意味着我需要将此调用添加到每个onTap处理程序,对吗? (2认同)
  • 抱歉,在我的情况下,`Navigator.pop()` 不会关闭抽屉......(`Navigator.pop(context)` 或 `Navigator.pop(context, true)` 都不会关闭抽屉...... . 我需要做什么才能通过选择其中一个项目来关闭抽屉?我的抽屉在 MaterialApp 内的 Scaffold 内......这可能有关系吗?? (2认同)

小智 17

首先创建一个 ScaffoldState 键

GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

Scaffold(
  key: _scaffoldKey,)
Run Code Online (Sandbox Code Playgroud)

现在您可以使用 toggleDrawer() 方法打开和关闭抽屉。

左边抽屉

toggleDrawer() async {
  if (_scaffoldKey.currentState.isDrawerOpen) {
    _scaffoldKey.currentState.openEndDrawer();
  } else {
    _scaffoldKey.currentState.openDrawer();
  }
}
Run Code Online (Sandbox Code Playgroud)

正确的抽屉

toggleDrawer() async {
  if (scaffoldKey.currentState.isDrawerOpen) {
    scaffoldKey.currentState.openDrawer();
  } else {
    scaffoldKey.currentState.openEndDrawer();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我觉得这是以编程方式管理抽屉的最佳答案 (4认同)

Cop*_*oad 12

如果您只是想关闭Drawer,则可以使用以下任一方法:

Navigator.pop(context);
Navigator.of(context).pop();
Run Code Online (Sandbox Code Playgroud)

如果你想导航到一个新页面,你可以使用

Navigator.popAndPushNamed(context, "/new_page");
Run Code Online (Sandbox Code Playgroud)

或者

Navigator.pop(context);
Navigator.push(context, MaterialPageRoute(builder: (_) => Page2()));
Run Code Online (Sandbox Code Playgroud)


Ass*_* S. 7

关闭抽屉并导航到新路线的简写:

Navigator.popAndPushNamed(context, '/newroute');


小智 6

这就是答案

班级第一

GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
Run Code Online (Sandbox Code Playgroud)

第二个小部件

 Scaffold(key: _scaffoldKey,)
Run Code Online (Sandbox Code Playgroud)

代码中的第三个

if (_scaffoldKey.currentState.isDrawerOpen) {
  _scaffoldKey.currentState.openEndDrawer();
}
Run Code Online (Sandbox Code Playgroud)


Yan*_*och 5

对于最新的 Flutter 版本(我写这篇文章时是 v0.3.2),实现略有变化,Navigator.pop()现在需要给定的上下文。

Navigator.pop(context)是关闭路由的典型用法。
Navigator.pop(context, true )用于关闭具有返回结果的路由。

请参阅Flutter 的 Cookbook 上的Drawer Class示例