I have Main Page With SliverPersistentHeader
and TabBarView
Like Below code :
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: DefaultTabController(
length: 3,
child: NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
SliverAppBar(
expandedHeight: 250.0,
floating: false,
pinned: true,
),
SliverPersistentHeader(
delegate: _SliverAppBarDelegate(
TabBar(
labelStyle: TextStyle(
fontFamily: 'Raleway',
fontSize: 17,
fontWeight: FontWeight.w400,
color: Theme.of(context).backgroundColor),
indicatorColor: Theme.of(context).hintColor,
labelColor: Theme.of(context).buttonColor,
unselectedLabelColor: Theme.of(context).dividerColor,
tabs: [
Tab(text: "Menu"),
Tab(text: "About"),
Tab(text: "Contact"),
],
),
),
pinned: true,
),
];
},
body: TabBarView(
children: <Widget>[MenuTab(), AboutTab(), ContactTab()],
),
),
),
);
}
}
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 new Container(
child: _tabBar,
);
}
@override
bool shouldRebuild(_SliverAppBarDelegate oldDelegate) {
return false;
}
}
after that I have Single Classes Foe Each tab, For Example Like Below code :
class _AboutTabState extends State<AboutTab> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: ListView(
children: <Widget>[
ListView.builder(
shrinkWrap: true,
itemCount: _list.length,
itemBuilder: (BuildContext context, int index) {
final _aboutList = _list[index];
return ExpansionTile(
title: ListTile(
title: Padding(
padding: const EdgeInsets.fromLTRB(5, 0, 0, 0),
child: Text(_aboutList.aboutTitle,
style: TextStyle(
fontFamily: 'Raleway',
fontSize: 16,
fontWeight: FontWeight.w500,
color: Theme.of(context).buttonColor)),
),
),
children: <Widget>[
ListTile(
title: Padding(
padding: const EdgeInsets.fromLTRB(10, 0, 0, 0),
child: Text(_aboutList.content,
style: TextStyle(
fontFamily: 'Raleway',
fontSize: 16,
fontWeight: FontWeight.w400,
color: Theme.of(context).toggleableActiveColor)),
),
)
],
);
},
),
],
));
THE PROBLEM:
I get Bad Result When I Collapse the SliverPersistentHeader, Following The Screenshots. tnx
You can create tabs using the TabBar widget. In this example, create a TabBar with three Tab widgets and place it within an AppBar . return MaterialApp( home: DefaultTabController( length: 3, child: Scaffold( appBar: AppBar( bottom: const TabBar( tabs: [ Tab(icon: Icon(Icons. directions_car)), Tab(icon: Icon(Icons.
SliverAppBar is a Material Design widget in flutter which gives scrollable or collapsible app-bar. The word Sliver is given to scrollable areas here. SliverAppBar basically gives us means to create an app-bar that can change appearance, blend in the background, or even disappear as we scroll.
DefaultTabController is an inherited widget that is used to share a TabController with a TabBar or a TabBarView. It's used when sharing an explicitly created TabController isn't convenient because the tab bar widgets are created by a stateless parent widget or by different parent widgets.
The _SliverAppBarDelegate() function is returning a Container, you can add color there like this:
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 new Container(
color: Colors.white, // ADD THE COLOR YOU WANT AS BACKGROUND.
child: _tabBar,
);
}
@override
bool shouldRebuild(_SliverAppBarDelegate oldDelegate) {
return false;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With