community_page.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import 'package:eye_video/bizmodule/bizwidget/cover_image_item.dart';
  2. import 'package:eye_video/bizmodule/main/community/blocs/community_bloc.dart';
  3. import 'package:eye_video/bizmodule/main/community/blocs/community_event.dart';
  4. import 'package:eye_video/bizmodule/main/community/blocs/community_state.dart';
  5. import 'package:eye_video/bizmodule/main/community/extension/ext_community.dart';
  6. import 'package:eye_video/bizmodule/main/community/widget/ugc_item.dart';
  7. import 'package:eye_video/framework/extension/context_extension.dart';
  8. import 'package:eye_video/framework/uikit/carousel/carousel_option.dart';
  9. import 'package:eye_video/framework/uikit/carousel/carousel_slider.dart';
  10. import 'package:eye_video/framework/uikit/refresher/indicator/material/material_footer.dart';
  11. import 'package:eye_video/framework/uikit/refresher/indicator/material/material_header.dart';
  12. import 'package:eye_video/framework/uikit/refresher/pretty_refresher.dart';
  13. import 'package:flutter/material.dart';
  14. import 'package:flutter_bloc/flutter_bloc.dart';
  15. import 'package:eye_video/framework/extension/image_compress.dart';
  16. class CommunityPage extends StatelessWidget {
  17. final RefreshController _controller = RefreshController();
  18. @override
  19. Widget build(BuildContext context) {
  20. return BlocBuilder<CommunityBloc, CommunityState>(
  21. builder: (context, state) {
  22. if (state is StateRequestLoading) {
  23. return Center(
  24. child: CircularProgressIndicator(),
  25. );
  26. } else if (state is StateRequestEmpty) {
  27. return Center(
  28. child: Text('数据请求为空'),
  29. );
  30. } else if (state is StateRequestFailure) {
  31. return Center(
  32. child: Text('数据请求失败'),
  33. );
  34. } else if (state is StateRequestSuccess) {
  35. return PrettyRefresher(
  36. header: MaterialHeader(),
  37. footer: MaterialFooter(),
  38. enableControlFinishLoad: false,
  39. enableControlFinishRefresh: false,
  40. controller: _controller,
  41. child: ListView.builder(
  42. padding: EdgeInsets.only(top: 10),
  43. itemCount: state.communityList
  44. .where((element) =>
  45. element.isHorizontalScrollCard || element.isPicFollowCard)
  46. .length,
  47. itemBuilder: (BuildContext context, int pos) {
  48. return buildItemWidget(context, state, pos);
  49. },
  50. ),
  51. onLoad: () async {
  52. if (!state.hasNextPage) {
  53. _controller.finishLoad(noMore: true);
  54. context.showSnackBar(msg: '已经到底了~');
  55. } else {
  56. BlocProvider.of<CommunityBloc>(context)
  57. .add(EventRequest(isFirst: false, isRefresh: false));
  58. }
  59. },
  60. onRefresh: () async {
  61. BlocProvider.of<CommunityBloc>(context)
  62. .add(EventRequest(isFirst: false, isRefresh: true));
  63. _controller.resetLoadState();
  64. },
  65. );
  66. }
  67. return Container();
  68. },
  69. );
  70. }
  71. Widget buildItemWidget(
  72. BuildContext context, StateRequestSuccess state, int pos) {
  73. var itemList = state.communityList
  74. .where((element) =>
  75. element.isHorizontalScrollCard || element.isPicFollowCard)
  76. .toList();
  77. var itemData = itemList[pos];
  78. if (itemData.isHorizontalScrollCard) {
  79. return CarouselSlider(
  80. options: CarouselOption(
  81. autoPlay: true,
  82. aspectRatio: 2.0,
  83. viewportFraction: 0.95,
  84. autoPlayInterval: Duration(seconds: 5),
  85. isEnableLargeCenterPage: true,
  86. ),
  87. items: itemData.data.communityList
  88. .map((discovery) => CoverImageItem(
  89. coverUrl: discovery.data.image.compress_value(),
  90. ))
  91. .toList(),
  92. );
  93. }
  94. if (itemData.isPicFollowCard) {
  95. return UgcFollowItem(
  96. header: itemData.data.header,
  97. content: itemData.data.content.data,
  98. );
  99. }
  100. return Container();
  101. }
  102. }