order_list.dart 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import 'package:flutter/material.dart';
  2. import 'package:twong/widgets/app_bar.dart';
  3. class OrderList extends StatefulWidget {
  4. final int index;
  5. OrderList({Key key, this.index}): super(key: key);
  6. @override
  7. State<StatefulWidget> createState() {
  8. return _OrderListState(this.index == null ? 0 : this.index);
  9. }
  10. }
  11. class _OrderListState extends State<OrderList> with SingleTickerProviderStateMixin {
  12. final int index;
  13. TabController tabController;
  14. List<Widget> tabs = List<Widget>();
  15. _OrderListState(this.index);
  16. @override
  17. void initState() {
  18. super.initState();
  19. tabs = <Widget>[
  20. Tab(text: '全部'),
  21. Tab(text: '待付款'),
  22. Tab(text: '待发货'),
  23. Tab(text: '待收货'),
  24. Tab(text: '待评价'),
  25. ];
  26. this.tabController = TabController(length: tabs.length, vsync: this, initialIndex: this.index);
  27. }
  28. @override
  29. Widget build(BuildContext context) {
  30. return Scaffold(
  31. appBar: DAppBar("全部订单"),
  32. body: SafeArea(
  33. child: CustomScrollView(
  34. physics: ClampingScrollPhysics(),
  35. slivers: <Widget>[
  36. SliverPersistentHeader(
  37. pinned: true,
  38. delegate: _StickyTabBarDelegate(
  39. child: TabBar(
  40. labelColor: Colors.black,
  41. controller: this.tabController,
  42. tabs: tabs,
  43. ),
  44. ),
  45. ),
  46. SliverFillRemaining(
  47. child: TabBarView(
  48. controller: this.tabController,
  49. children: <Widget>[
  50. Center(child: Text('全部订单列表')),
  51. Center(child: Text('待付款列表')),
  52. Center(child: Text('待发货列表')),
  53. Center(child: Text('待收货列表')),
  54. Center(child: Text('待评价列表')),
  55. ],
  56. ),
  57. ),
  58. ],
  59. ),
  60. ),
  61. );
  62. }
  63. }
  64. class _StickyTabBarDelegate extends SliverPersistentHeaderDelegate {
  65. final TabBar child;
  66. _StickyTabBarDelegate({@required this.child});
  67. @override
  68. Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) => child;
  69. @override
  70. double get maxExtent => this.child.preferredSize.height;
  71. @override
  72. double get minExtent => this.child.preferredSize.height;
  73. @override
  74. bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) => true;
  75. }