styled_scrollview.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import 'package:flutter/material.dart';
  2. import 'styled_list.dart';
  3. import 'styled_scroll_bar.dart';
  4. class StyledSingleChildScrollView extends StatefulWidget {
  5. final double? contentSize;
  6. final Axis axis;
  7. final Color? trackColor;
  8. final Color? handleColor;
  9. final ScrollController? controller;
  10. final Widget? child;
  11. const StyledSingleChildScrollView({
  12. Key? key,
  13. @required this.child,
  14. this.contentSize,
  15. this.axis = Axis.vertical,
  16. this.trackColor,
  17. this.handleColor,
  18. this.controller,
  19. }) : super(key: key);
  20. @override
  21. _StyledSingleChildScrollViewState createState() =>
  22. _StyledSingleChildScrollViewState();
  23. }
  24. class _StyledSingleChildScrollViewState
  25. extends State<StyledSingleChildScrollView> {
  26. late ScrollController scrollController;
  27. @override
  28. void initState() {
  29. scrollController = widget.controller ?? ScrollController();
  30. super.initState();
  31. }
  32. @override
  33. void dispose() {
  34. // scrollController.dispose();
  35. super.dispose();
  36. }
  37. @override
  38. void didUpdateWidget(StyledSingleChildScrollView oldWidget) {
  39. if (oldWidget.child != widget.child) {
  40. setState(() {});
  41. }
  42. super.didUpdateWidget(oldWidget);
  43. }
  44. @override
  45. Widget build(BuildContext context) {
  46. return ScrollbarListStack(
  47. contentSize: widget.contentSize,
  48. axis: widget.axis,
  49. controller: scrollController,
  50. barSize: 12,
  51. trackColor: widget.trackColor,
  52. handleColor: widget.handleColor,
  53. child: SingleChildScrollView(
  54. scrollDirection: widget.axis,
  55. physics: StyledScrollPhysics(),
  56. controller: scrollController,
  57. child: widget.child,
  58. ),
  59. );
  60. }
  61. }
  62. class StyledCustomScrollView extends StatefulWidget {
  63. final double? contentSize;
  64. final Axis axis;
  65. final Color? trackColor;
  66. final Color? handleColor;
  67. final ScrollController? controller;
  68. final List<Widget> slivers;
  69. const StyledCustomScrollView({
  70. Key? key,
  71. this.contentSize,
  72. this.axis = Axis.vertical,
  73. this.trackColor,
  74. this.handleColor,
  75. this.controller,
  76. this.slivers = const <Widget>[],
  77. }) : super(key: key);
  78. @override
  79. _StyledCustomScrollViewState createState() => _StyledCustomScrollViewState();
  80. }
  81. class _StyledCustomScrollViewState extends State<StyledCustomScrollView> {
  82. late ScrollController scrollController;
  83. @override
  84. void initState() {
  85. scrollController = widget.controller ?? ScrollController();
  86. super.initState();
  87. }
  88. @override
  89. void dispose() {
  90. scrollController.dispose();
  91. super.dispose();
  92. }
  93. @override
  94. void didUpdateWidget(StyledCustomScrollView oldWidget) {
  95. if (oldWidget.slivers != widget.slivers) {
  96. setState(() {});
  97. }
  98. super.didUpdateWidget(oldWidget);
  99. }
  100. @override
  101. Widget build(BuildContext context) {
  102. return ScrollbarListStack(
  103. contentSize: widget.contentSize,
  104. axis: widget.axis,
  105. controller: scrollController,
  106. barSize: 12,
  107. trackColor: widget.trackColor,
  108. handleColor: widget.handleColor,
  109. child: CustomScrollView(
  110. scrollDirection: widget.axis,
  111. physics: StyledScrollPhysics(),
  112. controller: scrollController,
  113. slivers: widget.slivers,
  114. ),
  115. );
  116. }
  117. }