Last active
February 15, 2019 23:28
-
-
Save mesuutt/5d892bf0b5f3f0bbf36e19bda2d1a49d to your computer and use it in GitHub Desktop.
Example code for issue described at: https://github.com/flutter/flutter/issues/27887 and https://stackoverflow.com/q/54647229/1027507
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
void main() async { | |
runApp(new TestApp()); | |
} | |
class TestApp extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
return new MaterialApp( | |
theme: new ThemeData(primarySwatch: Colors.yellow), | |
home: new TestAppHomePage(), | |
); | |
} | |
} | |
class TestAppHomePage extends StatefulWidget { | |
@override | |
State createState() => new TestAppHomePageState(); | |
//FPDetailScreen({Key key, @required this.period}) : super(key: key); | |
} | |
class TestAppHomePageState extends State<TestAppHomePage> | |
with SingleTickerProviderStateMixin { | |
@override | |
Widget build(BuildContext context) { | |
return new Scaffold( | |
//bottomNavigationBar: bottomNavBar, | |
body: DefaultTabController( | |
length: 2, | |
child: NestedScrollView( | |
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { | |
return <Widget>[ | |
SliverAppBar( | |
expandedHeight: 120.0, | |
floating: false, | |
forceElevated: innerBoxIsScrolled, | |
backgroundColor: Colors.green, | |
pinned: true, | |
flexibleSpace: FlexibleSpaceBar( | |
collapseMode: CollapseMode.pin, | |
centerTitle: true, | |
title: Text( | |
"Foo Bar Baz", | |
style: TextStyle(color: Colors.white), | |
textAlign: TextAlign.left, | |
overflow: TextOverflow.ellipsis, | |
softWrap: true, | |
maxLines: 1, | |
), | |
background: Container( | |
alignment: Alignment.topCenter, | |
child: Column( | |
mainAxisAlignment: MainAxisAlignment.spaceEvenly, | |
children: <Widget>[ | |
Row( | |
children: <Widget>[ | |
Text( | |
'10.00 TL', | |
style: TextStyle( | |
color: Colors.white, | |
fontSize: 20.0, | |
fontWeight: FontWeight.bold), | |
), | |
], | |
mainAxisAlignment: MainAxisAlignment.center, | |
), | |
Container( | |
width: 0, | |
height: 0, | |
) | |
], | |
), | |
), | |
//background: , | |
), | |
), | |
SliverPersistentHeader( | |
pinned: true, | |
delegate: _SliverAppBarDelegate( | |
TabBar( | |
tabs: [ | |
Tab( | |
child: Text( | |
"Tab1", | |
style: TextStyle( | |
color: Colors.black, | |
fontWeight: FontWeight.bold), | |
), | |
), | |
Tab( | |
child: Text( | |
"Tab2", | |
style: TextStyle( | |
color: Colors.black, | |
fontWeight: FontWeight.bold), | |
), | |
), | |
], | |
), | |
), | |
), | |
]; | |
}, | |
body:TabBarView( | |
//controller: _tabController, | |
children: [ | |
CardList(), | |
CardList(), | |
]), | |
), | |
), | |
); | |
} | |
} | |
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, | |
child: _tabBar, | |
); | |
} | |
@override | |
bool shouldRebuild(_SliverAppBarDelegate oldDelegate) { | |
return false; | |
} | |
} | |
class CardList extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
return Container( | |
child: ListView.builder( | |
scrollDirection: Axis.vertical, | |
shrinkWrap: true, | |
itemCount: 20, | |
//itemExtent: 1.0, | |
itemBuilder: (context, index){ | |
return new ListTile( | |
title: new Text("Item $index"), | |
); | |
}), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment