如何获取SliverAppBar的高度和位置?

时间:2019-09-04 18:45:14

标签: flutter dart

我不知道如何获得SliverAppBar的高度或位置。

我试图在SliverAppBar的正下方显示一个小部件,以对SliverAppBar的行为做出反应(无论它是否在屏幕上),并相应地表现或相应地定位自己。

我尝试了此处提到的代码来提高小部件的高度,但是看起来Sliver Widgets的工作方式有所不同,显然,Sliver Widgets无法与RenderBox一起使用,这让我感到困惑。 下面是我所看到的代码,但是我只使用了RenderBox / RenderSliv​​er部分。我不知道如何从RenderSliv​​er获取size.height。

GlobalKey stickyKey = GlobalKey();

Widget stickyBuilder(BuildContext context){
    return AnimatedBuilder(
      animation: scrollViewColtroller,
      builder: (_,Widget child){
        final keyContext = stickyKey.currentContext;
        if (keyContext != null){
          final box = keyContext.findRenderObject() as RenderBox;
          final pos = box.localToGlobal(Offset.zero);

          return Positioned(
            top: pos.dy + box.size.height,
            left: 50.0,
            right: 50.0,
            height: box.size.height,
            child: Container(
              height: double.infinity,
              width: double.infinity,
              alignment: Alignment.center,
              color: Colors.green,
            )
          );
        }
        return Container(
          color: Colors.blue,
          width: 100,
          height: 100,
        );
      }
    );
  }

Widget build(BuildContext context) {
   return: Scaffold(
        child :NestedScrollView(
              controller: scrollViewColtroller,
              headerSliverBuilder: (BuildContext context, bool boxIsScrolled) {
                return <Widget>[
                  SliverAppBar(
                    key: stickyKey,
                    floating: true,
                    snap: true,
                    pinned: false,
                    elevation: 10,
                  )
                ];
              },
              body: Container(
                padding: EdgeInsets.all(0.0),
                child: Center(
                  child: Column(
                    children: <Widget>[
                      stickyBuilder(context),
                      Container()
                    ],
                  ),
                ),
              ),
            ),
      );
}

我什至不知道此代码是否是获取SliverAppBar的高度和位置的正确方法,还是只需要进行一些小改动,将不胜感激。

0 个答案:

没有答案