基础组件库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

111 lines
3.3 KiB

  1. import 'dart:convert' as convert;
  2. import 'package:event_bus/event_bus.dart';
  3. import 'package:flutter/cupertino.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:provider/provider.dart';
  6. import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_notifier.dart';
  7. import 'package:zhiying_base_widget/widgets/home/home_goods/bloc/home_goods_bloc.dart';
  8. import 'package:zhiying_base_widget/widgets/home/home_goods/home_goods_creater.dart';
  9. import 'package:zhiying_base_widget/widgets/home/home_goods/home_goods_item.dart';
  10. import 'package:zhiying_base_widget/widgets/home/home_goods/models/home_goods_model.dart';
  11. import 'package:zhiying_base_widget/widgets/home/home_goods/models/home_goods_style_model.dart';
  12. import 'package:zhiying_base_widget/widgets/home/home_goods/skeleton/home_goods_sk.dart';
  13. import 'package:zhiying_comm/util/base_bloc.dart';
  14. class HomeGoods extends StatefulWidget {
  15. final Map<String, dynamic> data;
  16. final EventBus eventBus;
  17. HomeGoods(this.data, {Key key, this.eventBus}) : super(key: key);
  18. @override
  19. _HomeGoodsState createState() => _HomeGoodsState();
  20. }
  21. class _HomeGoodsState extends State<HomeGoods> {
  22. @override
  23. void initState() {
  24. super.initState();
  25. }
  26. @override
  27. Widget build(BuildContext context) {
  28. return BlocProvider<HomeGoodsBloc>(
  29. bloc: HomeGoodsBloc(),
  30. child: _HomeGoodsContainer(widget.data, widget.eventBus),
  31. );
  32. }
  33. }
  34. class _HomeGoodsContainer extends StatefulWidget {
  35. final Map<String, dynamic> data;
  36. final EventBus eventBus;
  37. _HomeGoodsContainer(this.data, this.eventBus, {Key key}) : super(key: key);
  38. @override
  39. _HomeGoodsContainerState createState() => _HomeGoodsContainerState();
  40. }
  41. class _HomeGoodsContainerState extends State<_HomeGoodsContainer> {
  42. HomeGoodsBloc _bloc;
  43. String _provider = '';
  44. HomeGoodsStyleModel _style;
  45. @override
  46. void initState() {
  47. _bloc = BlocProvider.of<HomeGoodsBloc>(context);
  48. String d = widget.data['data'];
  49. dynamic json = convert.jsonDecode(d);
  50. _style = HomeGoodsStyleModel.fromJson(Map<String, dynamic>.from(json));
  51. widget.eventBus.on<HomeGoodsHeaderEvent>().listen((data) {
  52. _provider = data.provider;
  53. _bloc.loadMore(_provider);
  54. });
  55. super.initState();
  56. }
  57. @override
  58. void didChangeDependencies() {
  59. super.didChangeDependencies();
  60. print('didChangeDependencies');
  61. bool isNeedLoadMore = Provider.of<MainPageNotifier>(context).scrollEnd;
  62. if (isNeedLoadMore && _provider != '') {
  63. print('HomeGoods loadmore...');
  64. _bloc.loadMore(_provider);
  65. }
  66. }
  67. @override
  68. Widget build(BuildContext context) {
  69. return Container(
  70. width: double.infinity,
  71. child: StreamBuilder<List<HomeGoodsModel>>(
  72. stream: _bloc.outData,
  73. builder: (BuildContext context, AsyncSnapshot snapshot) {
  74. if (snapshot.data == null) {
  75. return HomeGoodsSkeleton();
  76. }
  77. List<HomeGoodsModel> goods = snapshot.data;
  78. return ListView.builder(
  79. shrinkWrap: true,
  80. physics: NeverScrollableScrollPhysics(),
  81. itemCount: goods.length,
  82. itemBuilder: (context, index) {
  83. return HomeGoodsItem(
  84. goods[index],
  85. _style,
  86. data: widget.data,
  87. );
  88. });
  89. },
  90. ),
  91. );
  92. }
  93. }