如何用颤动中的2个按钮控制抽屉和endDrawer

问题描述 投票:0回答:2

我要编写2个按钮:第一个打开Drawer,第二个打开endDrawer

我使用的第一个按钮

onTap: () => _drawerKey.currentState.openEndDrawer(),

我使用的第二个

onTap: () => _drawerKey.currentState.openDrawer(),

但是代码不起作用

button flutter dart navigation-drawer drawer
2个回答
1
投票

制作脚手架的全局密钥并将其放入脚手架中……

class _AppState extends State<MyHome> {

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

    @override
    Widget build(BuildContext context) {
      return Scaffold(
          key: _scaffoldKey,
          appBar: PreferredSize(
            preferredSize: Size(null, 180),
            child: _getAppBar(
                _selectedDrawerIndex), //CustomAppBar(_scaffoldKey, controller),
          ),
          drawer: createDrwaer(),
          body: WillPopScope(
            child: _getDrawerFragment(_selectedDrawerIndex),
            onWillPop: () {
              if (_selectedDrawerIndex == 1) {
                _onSelectItem(0);
              } else {
                Navigator.of(context).pop();
              }
            },
          ) //_getDrawerFragment(_selectedDrawerIndex),
          );
    }
  }

在点击按钮后使用此按钮...

onTap: () =>_scaffoldKey.currentState.openDrawer(),

请确保您的班级有状态


0
投票

尝试此代码,

class Act_Drawer extends StatefulWidget {
  @override
  _Act_DrawerState createState() => _Act_DrawerState();
}

class _Act_DrawerState extends State<Act_Drawer> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Drawer Demo"),
        automaticallyImplyLeading: false,
        leading: StatefulBuilder(
          builder: (BuildContext context, setState) {
            return IconButton(
              icon: Icon(Icons.format_align_left),
              onPressed: () {
                Scaffold.of(context).openDrawer();
              },
            );
          },
        ),
        actions: <Widget>[
          StatefulBuilder(builder: (BuildContext context, setState) {
            return IconButton(
              icon: Icon(Icons.format_align_right),
              onPressed: () {
                Scaffold.of(context).openEndDrawer();
              },
            );
          },
          )
        ],
      ),
      drawer: Drawer(),
      endDrawer: Drawer(),
      body: Container(),
    );
  }
} 
© www.soinside.com 2019 - 2024. All rights reserved.