【问题标题】:Flutter popupmenubutton isn't closed until select any popup item在选择任何弹出项目之前,Flutter popupmenubutton 不会关闭
【发布时间】:2020-03-26 22:44:45
【问题描述】:

一切正常,但 popupmenubutton 在选择任何弹出项之前不会关闭。我不明白为什么在弹出菜单外部单击后弹出菜单没有关闭并且没有调用 onCanceled。 请帮帮我。

我在下面提供了源代码。谢谢。

//Call from Here
    StatefulWidget> Scafold(
    bottomNavigation,
    TabBar
    body: widgets>
//under tabBar
    child: callAction(
       tooltip: "Call Button",
       child: Container(
            height: double.infinity,
            padding: EdgeInsets.all(20),
            child: Icon(Icons.call)
        ),
      ),
    )

//PopupMenuButton widget

enum CallActionType { DataCall, Sim1Call, Sim2Call}

class callAction extends StatelessWidget {
  Widget child;
  String tooltip;
  callAction({@required this.child, @required this.tooltip});

PopupMenuButton<CallActionType>(
      elevation: 8,
      shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(15.0)),
      onSelected: (CallActionType value) {
        setState(() {
          print(value);
        });
      },

//onCanceled didn't call

      onCanceled: () {
        print('You have not chossed anything');
      },
      tooltip: widget.tooltip,
      offset: Offset(0, 100),
      child: widget.child,
      itemBuilder: (BuildContext context) => <PopupMenuEntry<CallActionType>>[
        new PopupMenuItem<CallActionType>(
          value: CallActionType,
          child: Text('Action 1'),
        ),
        new PopupMenuItem<CallActionType>(
          value: CallActionType,
          child: Text('Action 2'),
        ),
        new PopupMenuItem<CallActionType>(
          value: CallActionType,
          child: Text('Action 3'),
        ),
      ],
    );

【问题讨论】:

    标签: flutter flutter-layout


    【解决方案1】:

    PopupMenu 会顺利关闭,例如以下代码:

       Widget popupMenuButton(){
    
    return PopupMenuButton<String>(
      elevation: 50,
      padding: EdgeInsets.fromLTRB(5, 0, 0, 0),
      icon: Icon(Icons.keyboard_arrow_down, size: 30, color: Colors.black),
      itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
    
        PopupMenuItem<String>(
            value: "One_Val",
            child: Text("One_Val"),
        ),
         PopupMenuItem<String>(
            value: "Two_Val",
            child: Text("Two_Val"),
        ),
         PopupMenuItem<String>(
            value: "Three_Val",
            child: Text("Three_Val"),
        )
    
      ],
        onSelected: (String value) {
          setState(() {
            companyName = value;
      });
    },
    
    );}
    

    如有任何疑问,请告诉我,谢谢。

    【讨论】:

    • 效果很好!谢谢阿米特!您能否解释一下我的代码中的问题,因为我发现(您的和我的)都非常相似?
    猜你喜欢
    • 2020-08-12
    • 2021-09-22
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多