Flutter 动态弹出菜单内容

时间:2021-03-18 02:10:01

标签: flutter

我正在尝试创建一个具有“加载更多”功能的菜单。从界面角度来看,PopupMenuButton 运行良好,但我一直无法动态刷新其内容。

我正在使用 redux 并且我可以成功调度操作以获取更多,并且商店已更新,但是在关闭菜单并重新打开它之前我看不到更改,尽管将 PopupMenuButton 包装在一个商店连接器。我还检查了 fetchInProgress,它应该在提取过程中将底部的“更多”项目更改为微调器,但也没有注意到该状态更改。

我对 Flutter 比较陌生,所以我想知道我是否遗漏了什么。

Gif of the behavior

  @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
        )
        ]
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

您需要在进行更改时更新状态。当您调用 => vm.fetchPastOneOnOnes 时,用 setState 包装它:

    onTap: () {
setState(){
 vm.fetchPastOneOnOnes(...);}},
相关问题