首页 > 解决方案 > 如何将关键属性添加到还没有它的小部件?

问题描述

我想将 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(.....)
        ]
        ),),

那么,我该怎么做呢?

标签: flutterwidget

解决方案


虽然我没有成功为 BottomNavigationBarItem 小部件添加一个键,但我发现我可以为它的图标添加一个键!

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

这有助于我在大致相同的位置上画出我想要画的东西。我现在可以使用这条路径:

return Path()
      ..addRect(Rect.fromLTWH(0, 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)

嗯。


推荐阅读