当我点击PopupMenuButton, PopupMenuItems不显示



我正在制作一个扑动应用程序,我有一个PopupMenuButton

当我点击PopupMenuButton时,PopupMenuItems不显示。下面是代码:

class _ConfigurationListScreenState extends State < ConfigurationListScreen > {
// const ConfigurationListScreen({Key? key}) : super(key: key);
dynamic dataJson;
@override
Widget build(BuildContext context) {
var configurationListChannel =
ConfigurationListChannel(downlink: updateListData);
configurationListChannel.requestConfigurationList();
final GlobalKey _menuKey = GlobalKey();
final button = PopupMenuButton(
key: _menuKey,
itemBuilder: (_) => < PopupMenuItem < String >> [
PopupMenuItem < String > (child: Text('Doge'), value: 'Doge'),
PopupMenuItem < String > (child: Text('Lion'), value: 'Lion'),
],
onSelected: (_) {});
return Scaffold(
appBar: AppBar(
title: Text("Configuration List"),
),
body: Container(
padding: EdgeInsets.all(20),
child: ListView.builder(
itemCount: dataJson.length,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
padding: EdgeInsets.all(16),
child: Column(
children: [
updateText('device_id', index),
updateText('downlink_value', index),
updateText('downlink_desc', index),
updateText('downlink_status', index),
updateText('sent_date', index),
updateText('created_date', index),
],
),
),
Container(height: 150, color: Colors.red, child: button, alignment: Alignment.topRight, )
],
));
},
),
),
);
}

我不知道你为什么需要一个GlobalKey。但是您试图在列表中多次使用具有相同全局键的PopupMenuButton。这导致了一个问题,您不能在小部件树中有重复的全局键。因此,如果没有添加全局键,菜单项也可以正常工作。这是你的工作代码片段,但,但我切断了部分不相关的问题。

Widget build(BuildContext context) {
final button = PopupMenuButton(
itemBuilder: (_) => < PopupMenuItem < String >> [
PopupMenuItem < String > (child: Text('Doge'), value: 'Doge'),
PopupMenuItem < String > (child: Text('Lion'), value: 'Lion'),
],
onSelected: (_) {});
return Scaffold(
appBar: AppBar(
title: const Text("Configuration List"),
),
body: Container(
padding: const EdgeInsets.all(20),
child: ListView.builder(
itemCount: 3,
itemBuilder: (BuildContext context, int index) {
return Card(
child: 
Container(
height: 150, 
color: Colors.red, 
child: button, 
alignment: Alignment.topRight,
)
);
},
),
),
);
} 

你介意解释一下全局键是干什么用的吗?如果你需要它们,你应该为你的每个按钮都有一个独特的。不只是在列表中使用一个按钮。但当你可能需要它们时,这不是一个常见的场景。

最新更新