问题描述
这是我的第一个问题。我目前正在使用带有Tabbar的sliverAppBar。当我向下拖动条子时,我能做些什么来使标签栏保持在顶部而不会向下移动? this is how its looks based on my code,这是我的代码:
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(primaryColor: Colors.green[700]),home: DefaultTabController(
length: 3,child: Scaffold(
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
expandedHeight: 450,pinned: true,bottom: TabBar(
tabs: [
Tab(icon: Icon(Icons.directions_car)),Tab(icon: Icon(Icons.directions_transit)),Tab(icon: Icon(Icons.directions_bike)),],),backgroundColor: Colors.green[700],flexibleSpace: FlexibleSpaceBar(
background: Image.asset(
'images/green.png',fit: BoxFit.cover,SliverFillRemaining(
child: Container(
child: Column(
children: List<int>.generate(12,(index) => index)
.map((index) => Container(
height: 40,margin: EdgeInsets.symmetric(vertical: 10),color: Colors.grey[300],alignment: Alignment.center,child: Text('$index item'),))
.toList(),decoration: Boxdecoration(
color: Colors.white,borderRadius: BorderRadius.only(
topLeft: Radius.circular(15),topRight: Radius.circular(15),)),))
],);
}
}
编辑:我仍然希望条子的功能能够向下拖动,但我希望将选项卡放在顶部而不移动
解决方法
您必须用堆栈将CustomScrollView
包裹起来并将TabBar
放在其上方
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(primaryColor: Colors.green[700]),home: DefaultTabController(
length: 3,child: Scaffold(
body: Stack(
children: <Widget>[
CustomScrollView(
slivers: <Widget>[
SliverAppBar(
expandedHeight: 450,pinned: true,backgroundColor: Colors.green[700],),SliverFillRemaining(
hasScrollBody: false,child: Container(
child: Column(
children: List<int>.generate(12,(index) => index)
.map((index) => Container(
height: 40,margin: EdgeInsets.symmetric(vertical: 10),color: Colors.grey[300],alignment: Alignment.center,child: Text('$index item'),))
.toList(),decoration: BoxDecoration(
color: Colors.white,borderRadius: BorderRadius.only(
topLeft: Radius.circular(15),topRight: Radius.circular(15),)),))
],/// YOUR TAB WITH ICONS
Positioned(
top: MediaQuery.of(context).padding.top,child: Container(
width: MediaQuery.of(context).size.width,height: 60.0,color: Colors.green[700],child: TabBar(
tabs: [
Tab(icon: Icon(Icons.directions_car)),Tab(icon: Icon(Icons.directions_transit)),Tab(icon: Icon(Icons.directions_bike)),],);
}
这不会解决底部的溢出问题。如果您也想解决此问题,只需将hasScrollBody: false,
添加到SliverFillRemaining
中,如下所示:
SliverFillRemaining(
hasScrollBody: false,child: Container(...),