flutter - 固定的 SliverPersistentHeader 与 Android 状态栏重叠
问题描述
我正在与 Slivers 合作。我有一个 SliverAppBar,然后是一个 SliverPersistentHeader,最后是一个 SliverList。
我想要实现的行为是 SliverAppBar 滚动出屏幕,但 SliverPersistentHeader 保持固定在屏幕顶部。
我能够做到这一点,但 SliverPersistentHeader 与 android 状态栏重叠。关于如何解决这个问题的任何想法?
最后这是代码
class ExampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CustomScrollView(
slivers: <Widget>[
SliverAppBar(
title: Text('SliverAppBar'),
pinned: false,
floating: true,
snap: true,
elevation: 0.0,
),
SliverPersistentHeader(
pinned: true,
delegate: _SliverAppBarDelegate(
child: PreferredSize(
preferredSize: Size.fromHeight(40.0),
child: Container(
color: Theme.of(context).primaryColor,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text('SliverPersistentHeader', style: TextStyle(color: Colors.white, fontSize: 20.0))
],
),
),
),
)
),
),
SliverFixedExtentList(
itemExtent: 150.0,
delegate: SliverChildListDelegate(
[
Container(color: Colors.red),
Container(color: Colors.purple),
Container(color: Colors.green),
Container(color: Colors.orange),
Container(color: Colors.yellow),
Container(color: Colors.pink),
],
),
),
],
);
}
}
class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
final PreferredSize child;
_SliverAppBarDelegate({ this.child });
@override
Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {
// TODO: implement build
return child;
}
@override
// TODO: implement maxExtent
double get maxExtent => child.preferredSize.height;
@override
// TODO: implement minExtent
double get minExtent => child.preferredSize.height;
@override
bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) {
// TODO: implement shouldRebuild
return false;
}
}
解决方案
只需将您的包装CustomScrollView
成SafeArea
:
return SafeArea(
child: CustomScrollView(
...
推荐阅读
- python - 如何使用pyqt4隐藏/删除qtable小部件中特定行的边框
- css - 如何将引导徽章放在引导工具提示上?
- sql-server - 在 SQL Server 中使用分隔符连接列值
- java - 如何在 Java 中单击链接调用方法?
- google-geocoding-api - 使用 componentRestrictions 时的特定地理编码错误
- javascript - 除非我使用 setInterval,否则无法将图像绘制到画布上?
- ios - 我应该将 UserDefaults 声明为变量吗?
- sql - JOIN 的顺序
- android - 媒体播放器在 Lollipop 设备中不工作
- .net - 如何从 Mac 将 Web 应用程序部署到 Azure 云服务?