我正在尝试让我的 TabBar
的高度更大一些。它仅在达到一定值时起作用。这是我的 SliverPercientHeader
:
SliverPersistentHeader(
pinned: true,
delegate: _SliverAppBarTabDelegate(
child: PreferredSize(
preferredSize: Size.fromHeight(45.0),
child: Container(
color: Colors.white,
child: TabBar(
isScrollable: true,
labelColor: Colors.black,
unselectedLabelColor: Colors.black38,
indicatorColor: Theme.of(context).primaryColor,
tabs: createTabList(),
controller: tabBarController,
),
),
),
),
),
这是我的代表:
class _SliverAppBarTabDelegate extends SliverPersistentHeaderDelegate {
final PreferredSize child;
_SliverAppBarTabDelegate({this.child});
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
return child;
}
@override
double get maxExtent => child.preferredSize.height;
@override
double get minExtent => child.preferredSize.height;
@override
bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) {
return false;
}
}
为什么它不允许我将尺寸设置为更大的值?
编辑: 这是我的有状态小部件的整体结构:
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(),
SliverPersistentHeader(),
SliverList(),
],
),
);
}
最佳答案
使用 SizedBox.expand
包裹 _SliverAppBarTabDelegate
的子级:
class _SliverAppBarTabDelegate extends SliverPersistentHeaderDelegate {
final PreferredSize child;
_SliverAppBarTabDelegate({this.child});
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
return SizedBox.expand(child: child);
}
@override
double get maxExtent => child.preferredSize.height;
@override
double get minExtent => child.preferredSize.height;
@override
bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) {
return false;
}
}
关于Flutter:无法使用TabBar设置SliverPercientHeader的首选高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63646191/