Flutter 颤振菜单按钮位置由键盘更改

Flutter 颤振菜单按钮位置由键盘更改,flutter,drop-down-menu,flutter-dependencies,flutter-animation,Flutter,Drop Down Menu,Flutter Dependencies,Flutter Animation,我使用软件包菜单按钮:^1.4.2+1 当我点击文本字段时,键盘弹出,按钮的位置必须改变。 但是,当按钮的位置改变时,菜单按钮(按钮列表)被卡住 我想我必须改变包装的一些部分 或者我可以使用其他软件包吗?有什么建议吗 void togglePopup(){ 设置状态(()=>toggledMenu=!toggledMenu); if(widget.onMenuButtonToggle!=null){ 小部件.onMenuButtonToggle!(切换菜单); } 如果(!widget.sho

我使用软件包菜单按钮:^1.4.2+1

当我点击文本字段时,键盘弹出,按钮的位置必须改变。 但是,当按钮的位置改变时,菜单按钮(按钮列表)被卡住

我想我必须改变包装的一些部分 或者我可以使用其他软件包吗?有什么建议吗

void togglePopup(){
设置状态(()=>toggledMenu=!toggledMenu);
if(widget.onMenuButtonToggle!=null){
小部件.onMenuButtonToggle!(切换菜单);
}
如果(!widget.showSelectedItemOnList){
setState(()=>selectedItem=widget.selectedItem!);
MenuButtonUtils.showSelectedItemOnList(
oldItem、selectedItem、widget.items);
}
最终列表项=widget.items
.map((T值)=>\u菜单项(
价值:价值,
子项:widget.itemBuilder(值),
itemBackgroundColor:widget.itemBackgroundColor,
))
.toList();
final RenderBox button=context.findenderobject()作为RenderBox;
最终渲染器覆盖=
Overlay.of(context)!.context.finderObject()作为RenderBox;
buttonWidth=button.size.width;
相对竖立位置=相对竖立.fromRect(
矩形起点(
button.localToGlobal(偏移量(0,labelDecoration.verticalMenuPadding),
祖先:覆盖),
button.localToGlobal(button.size.bottomRight(Offset.zero)),
祖先:覆盖),
),
Offset.zero和overlay.size,
);
设置状态(){
位置=位置;
});
如果(items.isNotEmpty){
_切换弹出窗口(
上下文:上下文,
职位:职位,,
项目:项目,,
toggledChild:widget.toggledChild,
divider:widget.divider,
topDivider:widget.topDivider,
装饰:装饰,,
scrollPhysics:widget.scrollPhysics,
popuscuight:widget.popuscuight,
edgeMargin:widget.edgeMargin,
crossTheEdge:widget.crossTheEdge,
itemBackgroundColor:widget.itemBackgroundColor,
).然后((T?新值){
设置状态(()=>toggledMenu=!toggledMenu);
if(widget.onMenuButtonToggle!=null){
小部件.onMenuButtonToggle!(切换菜单);
}
如果(!widget.showSelectedItemOnList&&newValue!=null){
设置状态(()=>oldItem=selectedItem);
设置状态(()=>selectedItem=newValue);
}
if(mounted&&newValue!=null&&widget.onItemSelected!=null){
widget.onItemSelected!(newValue);
}
});
}
}
void togglePopup() {
    setState(() => toggledMenu = !toggledMenu);
    if (widget.onMenuButtonToggle != null) {
      widget.onMenuButtonToggle!(toggledMenu);
    }
    if (!widget.showSelectedItemOnList) {
      setState(() => selectedItem = widget.selectedItem!);
      MenuButtonUtils.showSelectedItemOnList(
          oldItem, selectedItem, widget.items);
    }

    final List<Widget> items = widget.items
        .map((T value) => _MenuItem<T>(
              value: value,
              child: widget.itemBuilder(value),
              itemBackgroundColor: widget.itemBackgroundColor,
            ))
        .toList();
    final RenderBox button = context.findRenderObject() as RenderBox;
    final RenderBox overlay =
        Overlay.of(context)!.context.findRenderObject() as RenderBox;
    buttonWidth = button.size.width;
    RelativeRect position = RelativeRect.fromRect(
      Rect.fromPoints(
        button.localToGlobal(Offset(0, labelDecoration.verticalMenuPadding),
            ancestor: overlay),
        button.localToGlobal(button.size.bottomRight(Offset.zero),
            ancestor: overlay),
      ),
      Offset.zero & overlay.size,
    );
    setState(() {
      position = position;
    });

    if (items.isNotEmpty) {
      _togglePopup(
        context: context,
        position: position,
        items: items,
        toggledChild: widget.toggledChild,
        divider: widget.divider,
        topDivider: widget.topDivider,
        decoration: decoration,
        scrollPhysics: widget.scrollPhysics,
        popupHeight: widget.popupHeight,
        edgeMargin: widget.edgeMargin,
        crossTheEdge: widget.crossTheEdge,
        itemBackgroundColor: widget.itemBackgroundColor,
      ).then<void>((T? newValue) {
        setState(() => toggledMenu = !toggledMenu);
        if (widget.onMenuButtonToggle != null) {
          widget.onMenuButtonToggle!(toggledMenu);
        }
        if (!widget.showSelectedItemOnList && newValue != null) {
          setState(() => oldItem = selectedItem);
          setState(() => selectedItem = newValue);
        }
        if (mounted && newValue != null && widget.onItemSelected != null) {
          widget.onItemSelected!(newValue);
        }
      });
    }
  }