collect_page.dart 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_screenutil/flutter_screenutil.dart';
  4. import 'package:liftmanager/internal/bbs/model/mix_model.dart';
  5. import 'package:liftmanager/internal/bbs/presenter/mix_list_presenter.dart';
  6. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  7. import 'package:liftmanager/mvp/base_page_state.dart';
  8. import 'package:liftmanager/utils/fast_notification.dart';
  9. import 'package:liftmanager/widgets/app_bar.dart';
  10. import 'package:liftmanager/widgets/bbs_content.dart';
  11. import 'package:liftmanager/widgets/my_refresh_list.dart';
  12. import 'package:liftmanager/widgets/state_layout.dart';
  13. // import 'package:amap_all_fluttify/amap_all_fluttify.dart';
  14. import 'package:provider/provider.dart';
  15. import 'package:umeng_common_sdk/umeng_common_sdk.dart';
  16. class CollectPage extends StatefulWidget {
  17. String index = "1";
  18. @override
  19. CollectPageState createState() => CollectPageState();
  20. }
  21. class CollectPageState extends BasePageState<CollectPage, MixListPresenter> {
  22. // NewsDetailItem item = NewsDetailItem();
  23. BaseListProvider<Records> provider = BaseListProvider<Records>();
  24. int checkIndex = 0;
  25. int _page = 1;
  26. List<String> titleList = [
  27. // "全部",
  28. "问答",
  29. "视频",
  30. "职位",
  31. "商品",
  32. ];
  33. @override
  34. void initState() {
  35. UmengCommonSdk.onPageStart("我的收藏");
  36. provider.setStateTypeNotNotify(StateType.loading);
  37. super.initState();
  38. _onRefresh();
  39. FastNotification.addListener("collectAction", (collectInit) {
  40. if (mounted) {
  41. setState(() {});
  42. _onRefresh();
  43. }
  44. });
  45. }
  46. @override
  47. void dispose() {
  48. UmengCommonSdk.onPageEnd("我的收藏");
  49. // TODO: implement dispose
  50. super.dispose();
  51. }
  52. @override
  53. void didChangeDependencies() {
  54. super.didChangeDependencies();
  55. print(12366);
  56. }
  57. @override
  58. void deactivate() {
  59. super.deactivate();
  60. print(123667);
  61. }
  62. @override
  63. Widget build(BuildContext context) {
  64. double width = MediaQuery.of(context).size.width;
  65. return Scaffold(
  66. appBar: MyAppBar(
  67. centerTitle: "我的收藏",
  68. ),
  69. body: Container(
  70. child: Stack(
  71. children: <Widget>[
  72. Positioned(
  73. child: Container(
  74. padding: EdgeInsets.only(bottom: 5),
  75. // color:Color(0xffFAF7FA),
  76. decoration: BoxDecoration(
  77. border: Border(
  78. bottom: BorderSide(width: 0.5, color: Color(0xffeeeeee)),
  79. ),
  80. // color: Color(0xffffffff),
  81. ),
  82. child: Row(
  83. mainAxisAlignment: MainAxisAlignment.spaceAround,
  84. children: titleList.asMap().keys.map((i) {
  85. return TabThis(
  86. item: titleList[i],
  87. tabIndex: i,
  88. checkIndex: checkIndex,
  89. fun: () {
  90. provider.list.clear();
  91. setState(() {
  92. checkIndex = i;
  93. });
  94. provider.setStateTypeNotNotify(StateType.loading);
  95. _onRefresh();
  96. print(checkIndex);
  97. });
  98. }).toList())),
  99. ),
  100. Container(
  101. child: ChangeNotifierProvider<BaseListProvider<Records>>(
  102. create: (_) => provider,
  103. child: Column(
  104. children: <Widget>[
  105. SizedBox(height: ScreenUtil().setWidth(50)),
  106. Expanded(
  107. flex: 1,
  108. child: Consumer<BaseListProvider<Records>>(
  109. builder: (_, provider, __) {
  110. return MyListView(
  111. key: Key('mix_list'),
  112. showSeparator: checkIndex == 0,
  113. itemCount: provider.list.length,
  114. stateType: provider.stateType,
  115. onRefresh: _onRefresh,
  116. loadMore: _loadMore,
  117. hasMore: provider.hasMore,
  118. padding: EdgeInsets.symmetric(horizontal: 10),
  119. itemBuilder: (_, index) {
  120. return Column(
  121. crossAxisAlignment:
  122. CrossAxisAlignment.start,
  123. children: <Widget>[
  124. checkIndex == 0
  125. ? QuestionCell(
  126. item: provider.list[index])
  127. : Container(child: null),
  128. checkIndex == 1
  129. ? VideoCell(provider.list[index])
  130. : Container(child: null),
  131. checkIndex == 2
  132. ? PositionCell(provider.list[index])
  133. : Container(child: null),
  134. checkIndex == 3
  135. ? ProductCell(provider.list[index])
  136. : Container(child: null),
  137. ],
  138. );
  139. },
  140. );
  141. }))
  142. ],
  143. )))
  144. ],
  145. )));
  146. }
  147. Future _onRefresh() async {
  148. _page = 1;
  149. if (checkIndex == 0) {
  150. await presenter.getQuestionList(_page);
  151. } else if (checkIndex == 1) {
  152. await presenter.getVideoList(_page);
  153. } else if (checkIndex == 2) {
  154. await presenter.getPositionList(_page);
  155. } else if (checkIndex == 3) {
  156. await presenter.getShopList(_page);
  157. }
  158. }
  159. Future _loadMore() async {
  160. _page++;
  161. if (checkIndex == 0) {
  162. await presenter.getQuestionList(_page);
  163. } else if (checkIndex == 1) {
  164. await presenter.getVideoList(_page);
  165. } else if (checkIndex == 2) {
  166. await presenter.getPositionList(_page);
  167. } else if (checkIndex == 3) {
  168. await presenter.getShopList(_page);
  169. }
  170. }
  171. @override
  172. MixListPresenter createPresenter() {
  173. return MixListPresenter();
  174. }
  175. }
  176. class TabThis extends StatelessWidget {
  177. TabThis({Key key, this.item, this.tabIndex, this.fun, this.checkIndex})
  178. : super(key: key);
  179. String item;
  180. int tabIndex;
  181. int checkIndex;
  182. Function fun;
  183. @override
  184. Widget build(BuildContext context) {
  185. return Container(
  186. padding: EdgeInsets.only(top: ScreenUtil().setWidth(10)),
  187. child: Container(
  188. child: Row(
  189. mainAxisAlignment: MainAxisAlignment.center,
  190. children: <Widget>[
  191. GestureDetector(
  192. onTap: () {
  193. fun();
  194. },
  195. child: Container(
  196. padding: EdgeInsets.only(bottom: 6),
  197. decoration: BoxDecoration(
  198. border: Border(
  199. bottom: BorderSide(
  200. width: 2,
  201. color: checkIndex == tabIndex
  202. ? Color(0xff02A0FD)
  203. : Colors.transparent),
  204. ),
  205. // color: Color(0xff9FD1FE),
  206. ),
  207. child: Text(
  208. item,
  209. style: TextStyle(
  210. color: checkIndex == tabIndex
  211. ? Color(0xff02A0FD)
  212. : Color(0xff666666),
  213. fontSize: ScreenUtil().setSp(14)),
  214. textAlign: TextAlign.center,
  215. ),
  216. ))
  217. ])),
  218. );
  219. }
  220. }