import 'dart:convert' as convert; import 'package:event_bus/event_bus.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_notifier.dart'; import 'package:zhiying_base_widget/widgets/home/home_goods/bloc/home_goods_bloc.dart'; import 'package:zhiying_base_widget/widgets/home/home_goods/home_goods_creater.dart'; import 'package:zhiying_base_widget/widgets/home/home_goods/home_goods_item.dart'; import 'package:zhiying_base_widget/widgets/home/home_goods/home_goods_item_single.dart'; import 'package:zhiying_base_widget/widgets/home/home_goods/models/home_goods_model.dart'; import 'package:zhiying_base_widget/widgets/home/home_goods/models/home_goods_style_model.dart'; import 'package:zhiying_base_widget/widgets/home/home_goods/skeleton/home_goods_sk.dart'; import 'package:zhiying_comm/util/base_bloc.dart'; class HomeGoods extends StatefulWidget { final Map data; final EventBus eventBus; HomeGoods(this.data, {Key key, this.eventBus}) : super(key: key); @override _HomeGoodsState createState() => _HomeGoodsState(); } class _HomeGoodsState extends State { @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return BlocProvider( bloc: HomeGoodsBloc(), child: _HomeGoodsContainer(widget.data, widget.eventBus), ); } } class _HomeGoodsContainer extends StatefulWidget { final Map data; final EventBus eventBus; _HomeGoodsContainer(this.data, this.eventBus, {Key key}) : super(key: key); @override _HomeGoodsContainerState createState() => _HomeGoodsContainerState(); } class _HomeGoodsContainerState extends State<_HomeGoodsContainer> { HomeGoodsBloc _bloc; String _provider = ''; HomeGoodsStyleModel _style; @override void initState() { _bloc = BlocProvider.of(context); String d = widget.data['data']; dynamic json = convert.jsonDecode(d); _style = HomeGoodsStyleModel.fromJson(Map.from(json)); widget.eventBus.on().listen((data) { _provider = data.provider; _bloc.loadMore(_provider); }); super.initState(); } @override void didChangeDependencies() { super.didChangeDependencies(); print('didChangeDependencies'); bool isNeedLoadMore = Provider.of(context).scrollEnd; if (isNeedLoadMore && _provider != '') { print('HomeGoods loadmore...'); _bloc.loadMore(_provider); } } @override Widget build(BuildContext context) { return Container( width: double.infinity, child: StreamBuilder>( stream: _bloc.outData, builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.data == null) { return HomeGoodsSkeleton(); } List goods = snapshot.data; int column = int.tryParse(_style.listColumn); column = column <= 0 ? 1: column; int count = (goods.length / column).ceil(); return ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: count, itemBuilder: (context, index) { if (column == 1) { return HomeGoodsItemSingle( goods[index], _style, data: widget.data, ); } else { // return Container(color: Colors.red, height: 126,margin: EdgeInsets.all(10),); return Padding( padding: const EdgeInsets.only(left: 5, right: 5), child: Row(children: List.generate(column, (c) { int i = index * column + c; return Expanded (child: i < goods.length ? HomeGoodsItem( goods[i], _style, data: widget.data, ): Container(),); }).toList(),), ); } }); }, ), ); } }