我不知道如何获得SliverAppBar的高度或位置。
我试图在SliverAppBar的正下方显示一个小部件,以对SliverAppBar的行为做出反应(无论它是否在屏幕上),并相应地表现或相应地定位自己。
我尝试了此处提到的代码来提高小部件的高度,但是看起来Sliver Widgets的工作方式有所不同,显然,Sliver Widgets无法与RenderBox一起使用,这让我感到困惑。 下面是我所看到的代码,但是我只使用了RenderBox / RenderSliver部分。我不知道如何从RenderSliver获取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的高度和位置的正确方法,还是只需要进行一些小改动,将不胜感激。