flutter - 如何使 SliverAppBar 的边缘透明?
问题描述
如果您可以看到带有图表的容器的边缘不是透明的FlexibleSpace
,AppBar
并且看起来很奇怪。现在我有一个Scaffold
然后我把主题的背景,我也试图让它透明但它根本不起作用
Widget pageOne() {
return Container(
child: Padding(
padding: EdgeInsets.only(top: 30),
child: Column(children: [Expanded(child: LineChartWidget())]),
),
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(50),
)),
);
}
Widget pageTwo() {
return Container(
child: Padding(
padding: EdgeInsets.only(top: 30),
child: Column(children: [Expanded(child: BarChartWidget())]),
),
);
}
@override
Widget build(BuildContext context) {
final controller = PageController();
final height = MediaQuery.of(context).size.height;
final width = MediaQuery.of(context).size.width;
final appbarHeight = 200.0;
final statusBarHeight = MediaQuery.of(context).padding.top;
return Scaffold(
backgroundColor: Theme.of(context).primaryColor,
drawer: drawer(),
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
pinned: true,
elevation: 10,
title: TitleWidget(25),
actions: <Widget>[
IconButton(
icon: Icon(Icons.account_balance_wallet),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => CoinView()));
}),
],
expandedHeight: 300,
floating: true,
flexibleSpace: FlexibleSpaceBar(
background: Container(
alignment: Alignment.bottomCenter,
padding: EdgeInsets.only(top: statusBarHeight + 50),
child: Column(children: [BalanceWidget(), CoinWidget()])),
),
),
SliverList(
delegate: SliverChildListDelegate(
[
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20))),
height: height - 50,
width: MediaQuery.of(context).size.width,
alignment: Alignment.center,
child: Column(
children: [
Expanded(
child: PageView(
children: <Widget>[
pageOne(),
pageTwo(),
pageTwo(),
pageTwo()
],
)),
Padding(
padding: EdgeInsets.symmetric(vertical: 15),
child: SmoothPageIndicator(
controller: controller,
count: 4,
effect: ExpandingDotsEffect(
dotHeight: 5,
dotWidth: 15,
expansionFactor: 3,
activeDotColor: Theme.of(context).primaryColor),
),
),
],
),
),
],
),
),
],
),
);
}
}
解决方案
这里的问题是 SliverAppBar 不在您的 SliverList 之下,而是在它之上。
这意味着这两个条子中没有重叠,这就是为什么看起来底部正在剪裁 SliverAppBar 而实际上是 SliverAppBar 收缩。
如果您希望 SliverList 的效果跨越灵活空间,您可以使用 Stack。您将 SliverAppBar 的内容放在后台,然后将 CustomScrollView 放在它上面。
不要忘记在 CustomScrollView 的 SliverAppBar 中添加一个高度为 300 的空容器,以作为现在在后台的内容的“窗口”。
我希望你能用这个来解决你的问题!
推荐阅读
- android - 存储应用程序数据并将其加载到应用程序中的最佳方式是什么?
- python - 如何在 selenium 脚本中等待预定义元素可点击?
- angularjs - 所有未定义的结果
- reactjs - git mv 重命名所有文件和文件夹以大写首字母
- c# - 如何在 C# 中创建按需 DynamoDB 表?
- android - Ionic - Android 10+ 上的文本输入未回显
- docker - docker-compose python:无法打开文件'./main.py':[Errno 2]没有这样的文件或目录
- jquery - 即使我使用 Jquery 刷新或重新加载页面,如何在网页上保留来自输入标签的数据
- javascript - Discord.js Bot 赠品命令:embedSent.reactions.get 不是函数
- cluster-analysis - 如何使用 NS2 使用 TCL 脚本中的剩余能量值?