基础组件库
 
 
 
 
 

101 rader
2.8 KiB

  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:zhiying_base_widget/pages/main_page/main_page_notifier.dart';
  4. import 'package:zhiying_comm/zhiying_comm.dart';
  5. import 'package:provider/provider.dart';
  6. class MainPage extends StatefulWidget {
  7. MainPage({Key key}) : super(key: key);
  8. @override
  9. _MainPageState createState() => _MainPageState();
  10. }
  11. class _MainPageState extends State<MainPage> {
  12. @override
  13. Widget build(BuildContext context) {
  14. return Scaffold(
  15. backgroundColor: Color(0xfff9f9f9),
  16. body: ChangeNotifierProvider(
  17. create: (context) => MainPageNotifier(),
  18. child: MainPageContainer(),
  19. ),
  20. );
  21. }
  22. }
  23. class MainPageContainer extends StatefulWidget {
  24. MainPageContainer({Key key}) : super(key: key);
  25. @override
  26. _MainPageContainerState createState() => _MainPageContainerState();
  27. }
  28. class _MainPageContainerState extends State<MainPageContainer> {
  29. WidgetType _type = WidgetType.normal;
  30. bool _isEnded = false;
  31. ScrollController _controller = ScrollController();
  32. @override
  33. void initState() {
  34. _reload();
  35. _controller.addListener(() {
  36. // print('${_controller.offset} ${_controller.position.maxScrollExtent}');
  37. if (_controller.offset >= _controller.position.maxScrollExtent &&
  38. !_isEnded) {
  39. // 滑动到底部
  40. _isEnded = true;
  41. Provider.of<MainPageNotifier>(context, listen: false).loadMore();
  42. } else if (_controller.offset < _controller.position.maxScrollExtent &&
  43. _isEnded) {
  44. _isEnded = false;
  45. Provider.of<MainPageNotifier>(context, listen: false).reset();
  46. }
  47. });
  48. super.initState();
  49. }
  50. void _reload() {
  51. setState(() {
  52. _type = WidgetType.skeleton;
  53. });
  54. Future.delayed(Duration(seconds: 3), () {
  55. setState(() {
  56. _type = WidgetType.normal;
  57. });
  58. });
  59. }
  60. List<Widget> _createContent(BuildContext context) {
  61. List<Widget> list = List();
  62. list.add(SliverToBoxAdapter(
  63. child: RaisedButton(
  64. onPressed: () {
  65. Provider.of<MainPageNotifier>(context, listen: false).loadMore();
  66. _reload();
  67. },
  68. child: Text('重置'),
  69. ),
  70. ));
  71. list.addAll(
  72. WidgetFactory.create('home_banner', type: _type, isSliver: true));
  73. list.addAll(
  74. WidgetFactory.create('home_goods', type: _type, isSliver: true));
  75. // list.addAll(
  76. // WidgetFactory.create('home_goods', type: _type, isSliver: true));
  77. // list.addAll(
  78. // WidgetFactory.create('home_goods', type: _type, isSliver: true));
  79. return list;
  80. }
  81. @override
  82. Widget build(BuildContext context) {
  83. return SafeArea(
  84. child: CustomScrollView(
  85. controller: _controller,
  86. slivers: _createContent(context),
  87. ),
  88. );
  89. }
  90. }