如何将键属性添加到尚不存在的窗口小部件?

问题描述

我想将GlobalKey分配给认情况下没有“ key”属性的小部件。我尝试扩展小部件类,添加属性,但无法弄清楚。 (我稍后还会读到,我可能不应该扩展小部件类。)

问题:我需要获取 BottomNavigationBarItem 小部件(不接受(key :))的最终渲染位置;为此,我可以分配一个GlobalKey并获取小部件的位置/偏移(对于那些无钥匙的小工具之外的其他小部件,我已经这样做了)

一些简单的NavigationBar代码

return Scaffold(
  bottomNavigationBar: new BottomNavigationBar(
    key: navbarKey,//  ---> NavigationBar has a "key" property
    items: [
      BottomNavigationBarItem(
          //  ---> BottomNavBarItem -> I dont have a key property :(
          icon: ImageIcon(images/someimg.png")),title: Text("SomeText")),BottomNavigationBarItem(.....)
        ]
        ),),

那么,我该怎么做?

解决方法

尽管我没有成功将密钥添加到BottomNavigationBarItem小部件,但发现可以将密钥添加到其图标!

BottomNavigationBarItem(
          icon: ImageIcon(
            AssetImage("images/Icon_BottomBar_learning.png"),key: navbarItemIconKey,),

这可以帮助我在想要的大致相同的位置上绘制要绘制的内容。 我现在可以使用以下路径:

return Path()
      ..addRect(Rect.fromLTWH(0,size.width,size.height))
      ..addOval(Rect.fromCircle(
              center: navbarItemIconKey.currentContext
                  .findRenderObject()
                  .paintBounds
                  .shift(Offset(
                      navbarItemIconKey.currentContext
                          .findRenderObject()
                          .getTransformTo(null)
                          .getTranslation()
                          .x,navbarItemIconKey.currentContext
                          .findRenderObject()
                          .getTransformTo(null)
                          .getTranslation()
                          .y))
                  .center,radius: 40)

嗯。