“如何从自定义 AppBar 打开脚手架抽屉?”

Abi*_*yal 3 dart flutter

我已经定制了Drawer并且AppBar. 我希望Drawer在点击中的操作小部件时打开AppBar。我想知道如何为自定义实现此功能AppBar

@override
 Widget build(BuildContext context) {
  return Scaffold(
   endDrawer:buildProfileDrawer(),
   appBar: setAppBar(),
   body: HomeBody()
  );
}

//custom widget
Widget setAppBar(){
  return AppBar(
    actions: <Widget>[
      IconButton(
        icon: Icon(Icons.account_circle,),
        onPressed: () {
          //Open the drawer
        },
      )
    ],
  );
}

//Custom drawer
buildProfileDrawer() {
  return Drawer(
    //....drawer childs
  );    
}


Run Code Online (Sandbox Code Playgroud)

Cop*_*oad 5

您应该使用GlobalKeyin Scaffold,并openEndDrawer对其调用方法。

GlobalKey<ScaffoldState> _key = GlobalKey(); // add this

@override
Widget build(BuildContext context) {
  return Scaffold(
    key: _key, // set it here
    endDrawer: buildProfileDrawer(),
    appBar: setAppBar(),
    body: Center(),
  );
}

//custom widget
Widget setAppBar() {
  return AppBar(
    actions: <Widget>[
      IconButton(
        icon: Icon(Icons.account_circle),
        onPressed: () {
          _key.currentState.openEndDrawer(); // this opens drawer
        },
      )
    ],
  );
}

//Custom drawer
buildProfileDrawer() {
  return Drawer();
}
Run Code Online (Sandbox Code Playgroud)

更新

GlobalKey<ScaffoldState> _key = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _key,
      endDrawer: buildProfileDrawer(),
      appBar: setAppBar(_key),
      body: Center(),
    );
  }
Run Code Online (Sandbox Code Playgroud)

在某个文件的某个地方。

Widget setAppBar(GlobalKey<ScaffoldState> globalKey) {
  return AppBar(
    actions: <Widget>[
      IconButton(
        icon: Icon(Icons.account_circle),
        onPressed: () {
          globalKey.currentState.openEndDrawer();
        },
      )
    ],
  );
}
Run Code Online (Sandbox Code Playgroud)

在其他文件的某个地方

buildProfileDrawer() {
  return Drawer();
}
Run Code Online (Sandbox Code Playgroud)