flutter - Tabbarview 子项在选项卡顶部滚动
问题描述
这是涉及持久的银色应用栏的代码
class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin{
final List<String> tabs = [
StringConstants.tabFood,
StringConstants.tabDrinks
];
TabController _tabController;
@override
void initState() {
_tabController = TabController(length: tabs.length, vsync: this);
super.initState();
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: colorWhite,
body: DefaultTabController(
length: 2,
child: NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
SliverAppBar(
elevation: 1,
title: Text("text"),
backgroundColor: colorWhite,
iconTheme: IconThemeData(color: colorDarkGray),
actionsIconTheme: IconThemeData(color: colorDarkGray),
leading: RoundIconButton(
icon: Icons.arrow_back_sharp,
onPressed: () {
Navigator.pop(context);
}),
actions: [
RoundIconButton(icon: Icons.search, onPressed: () {}),
],
expandedHeight: 160.0,
collapsedHeight: 60,
floating: true,
pinned: true,
flexibleSpace: FlexibleSpaceBar(
background: Container(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
"text",
style: textStyleTitle,
),
Text(
"subtext",
style: textStyleSubTitle,
)
],
),
),
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage("https://cdn.pixabay.com/photo/2017/08/02/14/26/winter-landscape-2571788_1280.jpg"),
fit: BoxFit.cover,
),
),
),
),
),
SliverPersistentHeader(
pinned: true,
delegate: _SliverAppBarDelegate(
TabBar(
controller: _tabController,
indicatorColor: colorPrimary,
labelStyle: TextStyle(
fontFamily: "JosefinSans",
fontSize: 16,
fontWeight: FontWeight.bold),
labelColor: colorPrimary,
unselectedLabelColor: colorLightGray,
isScrollable: true,
tabs: [
for (final tab in tabs)
Tab(
text: tab,
),
],
),
),
),
];
},
body: TabBarView(
controller: _tabController,
children: [
for (final tab in tabs)
Expanded(child: Container(
color: Colors.blue,
)),
],
),
),
),
);
}
}
class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
_SliverAppBarDelegate(this._tabBar);
final TabBar _tabBar;
@override
double get minExtent => _tabBar.preferredSize.height;
@override
double get maxExtent => _tabBar.preferredSize.height;
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
return Padding(
padding: const EdgeInsets.only(left: 20, right: 20),
child: new Container(
child: _tabBar,
),
);
}
容器的内容(在 tabbarview 中)在选项卡顶部滚动。我正在寻找的是它在标签后面滚动。我希望标签在应用栏下方保持不变,这可以正常工作。但唯一的问题是 tabbarview 的内容在选项卡的顶部滚动。一旦滚动开始,选项卡的背景就会变得透明
解决方案
推荐阅读
- nativescript - 命名路由器组件无法显示在我的 Nativescript 角度项目中
- c# - 验证文件后错误无效 json 原语
- wordpress - 我们如何覆盖产品订购脚本
- ios - 如何使用 Siri 语音命令验证用户在多项选择题中的回答
- c# - 如何在 Sync Fusion Chart Control ChartSeries 中更改符号前的文本位置
- php - 无法使用 php for Salesforce API 将访问令牌放入 SOAP 客户端
- rest - 用于备份和恢复的 RESTful API
- android - 如何从 Fragment 中的共享偏好中获取价值?
- c# - 当 WebClient 给出超时异常时,使用 TPL (Task.WhenAll) 从 URL 批量读取图像会陷入死锁
- python - 输出是什么?为什么是[无,无,无]