Hibok
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.
 
 
 
 
 
 

168 line
4.7 KiB

  1. import 'package:chat/data/constants.dart';
  2. import 'package:chat/generated/i18n.dart';
  3. import 'package:chat/utils/CustomUI.dart';
  4. import 'package:chat/utils/MessageBox.dart';
  5. import 'package:chat/utils/MessageMgr.dart';
  6. import 'package:flutter/cupertino.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:oktoast/oktoast.dart';
  9. import 'package:pull_to_refresh/pull_to_refresh.dart';
  10. import '../utils/HttpUtil.dart';
  11. import 'package:dio/dio.dart';
  12. import "../data/UserData.dart";
  13. import '../utils/TokenMgr.dart';
  14. class FollowUserPage extends StatefulWidget {
  15. FollowUserPage({Key key}) : super(key: key);
  16. @override
  17. _FollowUserPageState createState() => new _FollowUserPageState();
  18. }
  19. class _FollowUserPageState extends State<FollowUserPage> {
  20. List list = new List(); //列表要展示的数据
  21. RefreshController _refreshController =
  22. RefreshController(initialRefresh: true);
  23. int _page = 1; //加载的页数
  24. int rows = 20;
  25. @override
  26. void initState() {
  27. super.initState();
  28. MessageMgr().on('love_program', msgListLove);
  29. MessageMgr().on('refresh_list', msgRefreshList);
  30. MessageMgr().on('refresh_list_when_no_data', msgRefreshListWhenNoData);
  31. MessageMgr().on('join_program', msgJoinList);
  32. }
  33. msgJoinList(data) {
  34. for (int i = 0; i < list.length; i++) {
  35. if (list[i]['Id'] == data) {
  36. list[i]['EnrollNum']++;
  37. list[i]['IsEnroll']++;
  38. setState(() {});
  39. break;
  40. }
  41. }
  42. }
  43. msgRefreshListWhenNoData(data) {
  44. if (list.length == 0) _onRefresh();
  45. }
  46. msgRefreshList(data) {
  47. _onRefresh();
  48. }
  49. msgListLove(data) {
  50. print('msgListLove $data');
  51. for (int i = 0; i < list.length; i++) {
  52. if (list[i]['Id'] == data) {
  53. list[i]['FabulousNum']++;
  54. list[i]['IsFabulous']++;
  55. setState(() {});
  56. break;
  57. }
  58. }
  59. }
  60. Future getData(callback) async {
  61. Map data = {
  62. "userId": UserData().basicInfo.userId,
  63. };
  64. data['sign'] = TokenMgr().getSign(data);
  65. data['page'] = _page;
  66. data['rows'] = rows;
  67. Response res = await HttpUtil().post('userfollow/dynamic/follow',
  68. data: data, failback: () => Navigator.of(context).pop());
  69. var resData = res.data;
  70. _refreshController.refreshCompleted();
  71. print(resData);
  72. if (resData['code'] == 0) {
  73. callback(resData['data']);
  74. } else {
  75. showToast(resData['msg']);
  76. }
  77. }
  78. @override
  79. Widget build(BuildContext context) {
  80. Widget appBar = new AppBar(
  81. backgroundColor: AppColors.NewAppbarBgColor,
  82. leading: CustomUI.buildCustomLeading(context),
  83. title: new Text(
  84. I18n.of(context).i_like,
  85. textScaleFactor: 1.0,
  86. style: Constants.MainTitleStyle,
  87. ),
  88. centerTitle: true,
  89. elevation: 1,
  90. );
  91. Widget content = Scaffold(
  92. appBar: appBar,
  93. body: SafeArea(
  94. child: SafeArea(
  95. child: SmartRefresher(
  96. enablePullDown: true,
  97. enablePullUp: true,
  98. header: MaterialClassicHeader(),
  99. footer: CustomUI.buildLoadingFooter(),
  100. controller: _refreshController,
  101. onRefresh: _onRefresh,
  102. onLoading: _onLoading,
  103. child:
  104. (_refreshController.headerStatus == RefreshStatus.completed &&
  105. list.length == 0)
  106. ? CustomUI.buildNoData(context)
  107. : ListView.builder(
  108. itemBuilder: _renderRow,
  109. itemCount: list.length,
  110. ),
  111. ),
  112. )));
  113. return content;
  114. }
  115. Future _onLoading() async {
  116. _page++;
  117. getData((data) {
  118. if (data == null || data.length == 0) {
  119. _page--;
  120. _refreshController.loadNoData();
  121. } else {
  122. list.addAll(data);
  123. _refreshController.loadComplete();
  124. }
  125. setState(() {});
  126. });
  127. }
  128. Widget _renderRow(BuildContext context, int index) {
  129. if (index < list.length) {
  130. var userInfo = list[index];
  131. return MessageBox(programInfo: userInfo);
  132. }
  133. return Container();
  134. }
  135. Future<Null> _onRefresh() async {
  136. _page = 1;
  137. getData((data) {
  138. list.clear();
  139. list.addAll(data == null ? [] : data);
  140. setState(() {});
  141. });
  142. }
  143. @override
  144. void dispose() {
  145. _refreshController.dispose();
  146. MessageMgr().off('love_program', msgListLove);
  147. MessageMgr().off('refresh_list', msgRefreshList);
  148. MessageMgr().off('join_program', msgJoinList);
  149. MessageMgr().off('refresh_list_when_no_data', msgRefreshListWhenNoData);
  150. super.dispose();
  151. }
  152. }