我正在尝试创建一个具有“加载更多”功能的菜单。从界面角度来看,PopupMenuButton 运行良好,但我一直无法动态刷新其内容。
我正在使用 redux 并且我可以成功调度操作以获取更多,并且商店已更新,但是在关闭菜单并重新打开它之前我看不到更改,尽管将 PopupMenuButton 包装在一个商店连接器。我还检查了 fetchInProgress,它应该在提取过程中将底部的“更多”项目更改为微调器,但也没有注意到该状态更改。
我对 Flutter 比较陌生,所以我想知道我是否遗漏了什么。
@override
Widget build(BuildContext context) {
return StoreConnector<AppState, _ViewModel>(
converter: (store) => _ViewModel.fromStore(store, oneOnOneId),
builder: (ctx, vm) => PopupMenuButton(
onSelected: (callback) => callback(),
icon: Icon(Icons.expand_more),
itemBuilder: (_) =>
[...vm.pastOneOnOnes.map((m) {
return PopupMenuItem(
child: Center(child: Text(DateFormat('MM/dd/yyyy').format(m.meetingDate))),
value: () => {
Navigator.of(context).pushReplacementNamed(routeName,
arguments: {
'meetingId': m.id
})
}
);
}).toList(),
PopupMenuItem(
enabled: false,
child: Container(
height: 40,
width: double.infinity,
child: vm.fetchInProgress ?
Center(child: CircularProgressIndicator()) :
InkWell(
onTap: () => vm.fetchPastOneOnOnes(oneOnOneId, start: vm.pastOneOnOnes.length + 1),
child: Center(
child: Text('More', style: TextStyle(color: Colors.black))
)
),
),
value: null
)
]
),
);
}
}
答案 0 :(得分:0)
您需要在进行更改时更新状态。当您调用 => vm.fetchPastOneOnOnes
时,用 setState
包装它:
onTap: () {
setState(){
vm.fetchPastOneOnOnes(...);}},