Flutter:IconButton onPressed 在控制台中响应但在显示中没有响应

Posted

技术标签:

【中文标题】Flutter:IconButton onPressed 在控制台中响应但在显示中没有响应【英文标题】:Flutter: IconButton onPressed responding in console but not in the display 【发布时间】:2020-06-28 23:37:39 【问题描述】:

我是 Flutter 的新手,正在尝试构建一个响应式 Web 应用程序。到目前为止,我工作的代码是当屏幕宽度缩小到一定大小时,导航栏及其项目被压缩成一个菜单图标按钮(Flutter 的 IconButton)。这行得通。不起作用的是,当我单击 IconButton 时,新的导航栏不会弹出,即使控制台显示我正在单击它。 DrawerItem() 只是一个包装在容器中的文本小部件。在几段代码之后,您可以看到控制台吐出响应。当我调整屏幕大小或单击图标按钮时,屏幕或控制台中没有任何错误。我还尝试使 MNavigationBar 成为有状态的小部件并将 setState 添加到 onPressed 属性,当前问题没有任何变化,并且发生了同样的事情。

class MNavigationBar extends StatelessWidget 
  const MNavigationBar(Key key) : super(key: key);

  @override
  Widget build(BuildContext context) 
    return Container(
      height: 80,
      child: Row(
        mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: <Widget>[
          IconButton(
            icon: Icon(
              Icons.menu,
            ),
            onPressed: () 
              NavigationDrawer();
              print('Menu Icon pressed');
            ,
          ),
          NavBarLogo(),
        ],
      ),
    );
  

class NavigationDrawer extends StatelessWidget 
  const NavigationDrawer(Key key) : super(key: key);

  @override
  Widget build(BuildContext context) 
    return Container(
      width: 260,
      decoration: BoxDecoration(
        color: Colors.white,
        boxShadow: [
          BoxShadow(
            color: Colors.black,
            blurRadius: 16,
          ),
        ],
      ),
      child: Column(
        children: <Widget>[
          NavigationDrawerHeader(),
          DrawerItem('Home'),
          DrawerItem('Events'),
          NavBarMenuDropdown(),
          DrawerItem('Store'),
          DrawerItem('Partners'),
          DrawerItem('About Us'),
        ],
      ),
    );
  

Performing hot restart...                                          148ms
Restarted application in 149ms.
Menu Icon pressed
Menu Icon pressed

【问题讨论】:

on press 函数下的 NavigationDrawer() 行只是创建 NavgationDrawer 无状态小部件的实例。您没有在任何地方绘制小部件。您应该将 Navigation Drawer 设置为基础 Scaffold 小部件中的抽屉属性,然后在 onPressed 函数中使用 Scaffold.of(context).openDrawer() @AfridiKayal 在下面查看我的代码更改。你的建议奏效了。谢谢! 【参考方案1】:

谢谢你,Afridi Kayal!我完全按照你说的做了,效果很好!请看下面代码中的答案...

在我的主 Scaffold 小部件中,我添加了此代码并使用 ResponsiveBuilder 添加了逻辑

return ResponsiveBuilder(
      builder: (context, sizingInformation) => Scaffold(
        drawerEnableOpenDragGesture: false,
        drawer: sizingInformation.deviceScreenType == DeviceScreenType.Mobile
            ? NavigationDrawer()
            : null,

在我的 MNavigationBar 中,我对此进行了修改。

onPressed: () 
              Scaffold.of(context).openDrawer();       
              print('Menu Icon pressed');
            ,

【讨论】:

以上是关于Flutter:IconButton onPressed 在控制台中响应但在显示中没有响应的主要内容,如果未能解决你的问题,请参考以下文章

Flutter中常用的按钮组件-IconButton(可点击的Icon)

Flutter中常用的按钮组件-IconButton(可点击的Icon)

Flutter:IconButton onPressed 在控制台中响应但在显示中没有响应

Flutter - 如何用动画扩展小部件?

Flutter基础Widget之按钮(RaisedButton、FlatButton、OutlineButton,IconButton)

如何在 Flutter 中刷新 AlertDialog?