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

标签 flutter

我正在尝试让我的 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/

相关文章:

android - Flutter:为 iOS 和 Android 添加应用程序更新对话框

list - 在 flutter dart 中合并 2 个对象列表的最简单方法是什么?

flutter - 具有超过3个项目的Flutter BottomNavigationBar会根据所选项目自动应用填充

flutter - flutter 错误:无法将参数类型 'Future<void>'分配给参数类型 '() → void'

Flutter:弹出菜单内的弹出菜单

android - flutter View : AppBarLayout$ScrollingViewBehavior

flutter - 在构造函数中调用异步函数

android - 如何在 flutter 中设置盒子阴影

android - 在 flutter 中使用图像列表多重上传图像

flutter - Flutter下拉列表: 'String'类型不是 'int'的 'index'类型的子类型