基础组件库
 
 
 
 
 

104 lines
3.0 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:zhiying_base_widget/widgets/home_goods/home_goods.dart';
  3. import 'package:zhiying_comm/zhiying_comm.dart';
  4. class GoodsListCreater extends WidgetCreater {
  5. @override
  6. List<Widget> createWidgets(Map<String, dynamic> model) {
  7. TabController controller =
  8. TabController(initialIndex: 0, length: 6, vsync: ScrollableState());
  9. return [
  10. _createHeader(controller),
  11. _createBody(controller),
  12. ];
  13. }
  14. @override
  15. List<Widget> createSkeleton(Map<String, dynamic> model) {
  16. return [];
  17. }
  18. Widget _createHeader(TabController controller) {
  19. return SliverPersistentHeader(
  20. pinned: true,
  21. floating: false,
  22. delegate: GoodsHeaderDelegate(controller),
  23. );
  24. }
  25. Widget _createBody(TabController controller) {
  26. // return SliverToBoxAdapter(
  27. // child: Container(
  28. // width: double.infinity,
  29. // height: 200,
  30. // // child: Expanded(child: Container()),
  31. // child: TabBarView(
  32. // controller: controller,
  33. // children: <Widget>[
  34. // Icon(Icons.directions_bike, size: 128.0, color: Colors.black12),
  35. // ListView.builder(
  36. // itemCount: 20,
  37. // itemBuilder: (context, index) {
  38. // return Container(
  39. // width: double.infinity,
  40. // height: 70,
  41. // color: Colors.primaries[index % Colors.primaries.length],
  42. // );
  43. // }),
  44. // Icon(Icons.directions_bike, size: 128.0, color: Colors.black12),
  45. // Icon(Icons.local_florist, size: 128.0, color: Colors.black12),
  46. // Icon(Icons.change_history, size: 128.0, color: Colors.black12),
  47. // Icon(Icons.directions_bike, size: 128.0, color: Colors.black12),
  48. // ],
  49. // ),
  50. // ),
  51. // );
  52. return SliverToBoxAdapter(
  53. child: HomeGoods(),
  54. );
  55. }
  56. @override
  57. bool isSliverChild() {
  58. return true;
  59. }
  60. }
  61. class GoodsHeaderDelegate extends SliverPersistentHeaderDelegate {
  62. final TabController controller;
  63. GoodsHeaderDelegate(this.controller);
  64. @override
  65. Widget build(
  66. BuildContext context, double shrinkOffset, bool overlapsContent) {
  67. // print(shrinkOffset.toString());
  68. return Container(
  69. color: Colors.red,
  70. alignment: Alignment.center,
  71. child: TabBar(
  72. controller: controller,
  73. isScrollable: true,
  74. tabs: <Widget>[
  75. Tab(icon: Icon(Icons.local_florist)),
  76. Tab(icon: Icon(Icons.change_history)),
  77. Tab(icon: Icon(Icons.directions_bike)),
  78. Tab(icon: Icon(Icons.local_florist)),
  79. Tab(icon: Icon(Icons.change_history)),
  80. Tab(icon: Icon(Icons.directions_bike)),
  81. ],
  82. ),
  83. );
  84. }
  85. @override
  86. double get maxExtent => 60.0;
  87. @override
  88. double get minExtent => 60.0;
  89. @override
  90. bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) =>
  91. false; // 如果内容需要更新,设置为true
  92. }