Flutter:无法使用TabBar设置SliverPersistentHeader的首选高度

时间:2020-08-29 10:57:05

标签: flutter

我正在尝试使TabBar的高度更大。它只能发挥一定的作用。这是我的SliverPersistentHeader

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(),
      ],
    ),
  );
}

1 个答案:

答案 0 :(得分:1)

_SliverAppBarTabDelegateSizedBox.expand的孩子换行:

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;
  }
}