繁体   English   中英

如何在 Flutter 中单击 AppBar 内的图标打开抽屉?

[英]How to open Drawer on clicking Icon inside an AppBar in Flutter?

我的文件如下:

主页.dart

return Scaffold{
      appBar: CustomAppBar(),
      drawer: CustomDrawer(),
}

CustomAppBar.dart

class HomePageAppBar extends StatelessWidget with PreferredSizeWidget {
return AppBar{
      leading: InkWell(
              onTap: () {
                // Need to open drawer when clicked
              },
              child: FaIcon(
                FontAwesomeIcons.bars,
                color: Theme.of(context).iconTheme.color,
                size: Theme.of(context).iconTheme.size,
              ),
            ),
}
@override
  Size get preferredSize => Size.fromHeight(kToolbarHeight);
}

CustomDrawer.dart

return Drawer{
}

现在,由于我的 AppBar 和 Drawer 位于不同的文件中,我无法使用 Scaffold.of(context).openDrawer() 打开抽屉。 我尝试为我的抽屉设置一个 GlobalKey,但现在可以从我的 CustomAppBar 文件访问它。

我尝试将 CustomAppBar.dart 文件转换为脚手架,以便它包含我的应用程序栏和我的抽屉并使用 Scaffold.of(context).openDrawer()。 这导致抽屉打开并仅显示在应用栏区域(可能是因为使用了 PreferredSizeWidget)。

鉴于它们被放置在单独的文件中,如何在单击 AppBar 的图标时打开抽屉? 我想将我的 AppBar 和 Drawer 保存在单独的文件中。

见文档https://api.flutter.dev/flutter/material/showModalBottomSheet.html

onPressed: () {
          showModalBottomSheet<void>(
            context: context,
            builder: (BuildContext context) {
              return Container(
                height: 200,
                color: Colors.amber,
                child: Center(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    mainAxisSize: MainAxisSize.min,
                    children: <Widget>[
                      const Text('Modal BottomSheet'),
                      ElevatedButton(
                        child: const Text('Close BottomSheet'),
                        onPressed: () => Navigator.pop(context),
                      )
                    ],
                  ),
                ),
              );
            },

在 class(全局)之外声明 globalkey 或创建一个 static 成员

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

使用全局键打开抽屉。

 _globalkey.currentState?.openDrawer();

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM