ugc_page.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import 'package:eye_video/bizmodule/main/selections/blocs/ugc/ugc_bloc.dart';
  2. import 'package:eye_video/bizmodule/main/selections/blocs/ugc/ugc_state.dart';
  3. import 'package:eye_video/bizmodule/main/selections/widgets/follow_Item.dart';
  4. import 'package:eye_video/framework/extension/context_extension.dart';
  5. import 'package:eye_video/framework/uikit/carousel/carousel_option.dart';
  6. import 'package:eye_video/framework/uikit/carousel/carousel_slider.dart';
  7. import 'package:eye_video/framework/uikit/refresher/indicator/material/material_footer.dart';
  8. import 'package:eye_video/framework/uikit/refresher/indicator/material/material_header.dart';
  9. import 'package:eye_video/framework/uikit/refresher/pretty_refresher.dart';
  10. import 'package:flutter/material.dart';
  11. import 'package:flutter_bloc/flutter_bloc.dart';
  12. import 'blocs/ugc/ugc_event.dart';
  13. import 'widgets/small_video_item.dart';
  14. class UgcPage extends StatelessWidget {
  15. final RefreshController _controller = RefreshController();
  16. @override
  17. Widget build(BuildContext context) {
  18. return BlocBuilder<UgcBloc, UgcState>(builder: (context, state) {
  19. if (state is UgcStateRequestLoading) {
  20. return Center(
  21. child: CircularProgressIndicator(),
  22. );
  23. } else if (state is UgcStateRequestEmpty) {
  24. return Center(
  25. child: Text('数据请求为空'),
  26. );
  27. } else if (state is UgcStateRequestFailure) {
  28. return Center(
  29. child: Text('数据请求失败'),
  30. );
  31. } else if (state is UgcStateRequestSuccess) {
  32. return PrettyRefresher(
  33. header: MaterialHeader(),
  34. footer: MaterialFooter(),
  35. enableControlFinishLoad: false,
  36. enableControlFinishRefresh: false,
  37. controller: _controller,
  38. child: ListView.builder(
  39. itemCount: state.ugcList.length,
  40. itemBuilder: (BuildContext context, int pos) {
  41. return buildItemWidget(context, state, pos);
  42. },
  43. ),
  44. onLoad: () async {
  45. if (!state.hasNextPage) {
  46. _controller.finishLoad(noMore: true);
  47. context.showSnackBar(msg: '已经到底了~');
  48. } else {
  49. BlocProvider.of<UgcBloc>(context)
  50. .add(UgcEventRequest(isFirst: false, isRefresh: false));
  51. }
  52. },
  53. onRefresh: () async {
  54. BlocProvider.of<UgcBloc>(context)
  55. .add(UgcEventRequest(isFirst: false, isRefresh: true));
  56. _controller.resetLoadState();
  57. },
  58. );
  59. }
  60. return Container();
  61. });
  62. }
  63. Widget buildItemWidget(
  64. BuildContext context, UgcStateRequestSuccess state, int pos) {
  65. var itemData = state.ugcList[pos];
  66. if(pos % 3 == 0 || pos >= 50) {
  67. return FollowItemVideo(
  68. coverUrl: itemData.cover,
  69. duration: itemData.duration,
  70. avatarUrl: itemData.author.icon,
  71. title: itemData.title,
  72. tag: itemData.tags.take(3).map((e) => "#${e.text}").join(" "),
  73. );
  74. } else {
  75. return SmallItemVideo(
  76. coverUrl: itemData.cover,
  77. duration: itemData.duration,
  78. title: itemData.title,
  79. tag: itemData.tags.take(3).map((e) => "#${e.text}").join(" "),
  80. );
  81. }
  82. }
  83. }