friends_list.dart 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/internal/bbs/page/chat_room.dart';
  3. import 'package:liftmanager/net/api_service.dart';
  4. import 'package:liftmanager/utils/toast.dart';
  5. import 'package:liftmanager/widgets/app_bar.dart';
  6. import 'package:liftmanager/routers/fluro_navigator.dart';
  7. import 'package:liftmanager/widgets/search_app_bar.dart';
  8. import './message_page/conversation_item.dart';
  9. import 'package:liftmanager/internal/friends/friends_router.dart';
  10. import 'package:liftmanager/utils/utils.dart';
  11. import 'package:liftmanager/utils/log_util.dart';
  12. import 'dart:convert';
  13. import 'package:shared_preferences/shared_preferences.dart';
  14. import 'package:liftmanager/utils/fast_notification.dart';
  15. import 'package:liftmanager/utils/theme_utils.dart';
  16. import 'package:flustars/flustars.dart' as FlutterStars;
  17. class FriendsList extends StatefulWidget {
  18. @override
  19. FriendsListState createState() => FriendsListState();
  20. }
  21. class FriendsListState extends State<FriendsList>
  22. with TickerProviderStateMixin, AutomaticKeepAliveClientMixin {
  23. int _page = 1;
  24. bool _hasData = false;
  25. String changeRoomId;
  26. @override
  27. void initState() {
  28. super.initState();
  29. getFriendsList();
  30. FastNotification.addListener("friendAction", (friendsInit) {
  31. if (mounted) {
  32. getStringEvent();
  33. }
  34. });
  35. }
  36. List<dynamic> friendsList = [];
  37. List<dynamic> listOne = [];
  38. List<String> historyMessageString = [];
  39. Future getFriendsList({String searchWord = ''}) async {
  40. await NewApiService().getFriendListPage(_page, 999999, searchWord,
  41. onSuccess: (res) {
  42. listOne = [];
  43. if (res.records.length > 0) {
  44. res.records.forEach((item) {
  45. // if(item.sessionid == changeRoomId) {
  46. // item.isRed = 0;
  47. // }
  48. listOne.add(item);
  49. });
  50. }
  51. _hasData = true;
  52. setState(() {});
  53. }, onError: (code, msg) {
  54. toasts(msg);
  55. });
  56. }
  57. void getStringEvent() async {
  58. SharedPreferences prefs = await SharedPreferences.getInstance();
  59. if (prefs.getString("changeRoomId") != null) {
  60. changeRoomId = prefs.getString("changeRoomId");
  61. }
  62. getFriendsList();
  63. }
  64. getHistoryList(roomIdss, item) async {
  65. SharedPreferences prefs = await SharedPreferences.getInstance();
  66. historyMessageString = prefs.getStringList(roomIdss);
  67. if (historyMessageString != null && historyMessageString.length > 0) {
  68. List<dynamic> historyMessageqqq =
  69. historyMessageString.map((i) => jsonDecode(i)).toList();
  70. if (historyMessageqqq[historyMessageqqq.length - 1]["type"] == 1) {
  71. item.msg = historyMessageqqq[historyMessageqqq.length - 1]["msg"];
  72. } else if (historyMessageqqq[historyMessageqqq.length - 1]["type"] == 2) {
  73. item.msg = "[图片]";
  74. }
  75. item.time = historyMessageqqq[historyMessageqqq.length - 1]["time"];
  76. item.isRed = 1;
  77. listOne.add(item);
  78. } else {
  79. listOne.add(item);
  80. }
  81. }
  82. @override
  83. void dispose() {
  84. super.dispose();
  85. }
  86. @override
  87. Widget build(BuildContext context) {
  88. double width = MediaQuery.of(context).size.width;
  89. LogUtil.d(JsonEncoder().convert(friendsList));
  90. LogUtil.d(JsonEncoder().convert(listOne));
  91. LogUtil.d(changeRoomId);
  92. friendsList = [];
  93. if (changeRoomId != null) {
  94. dynamic firstContent;
  95. if (listOne.length < 1) {
  96. friendsList = [];
  97. } else {
  98. listOne.forEach((item) {
  99. if (item.sessionid == changeRoomId) {
  100. firstContent = item;
  101. } else {
  102. friendsList.add(item);
  103. }
  104. });
  105. if (firstContent != null) {
  106. friendsList.insert(0, firstContent);
  107. }
  108. }
  109. } else {
  110. friendsList = listOne;
  111. }
  112. LogUtil.d(JsonEncoder().convert(friendsList));
  113. return Scaffold(
  114. appBar: MyAppBar(
  115. centerTitle: "圈子",
  116. isBack: false,
  117. actions: <Widget>[
  118. if (Utils.getAuthByRouter(context, 'people_nearby', false) &&
  119. FlutterStars.SpUtil.getInt("expertFlag") != 1)
  120. FlatButton(
  121. child: Text(
  122. "附近的人",
  123. style: TextStyle(color: Color(0xff333333), fontSize: 14),
  124. ),
  125. onPressed: () async {
  126. await NavigatorUtils.pushResult(context, FriendsRouter.nearList,
  127. (res) {
  128. getFriendsList();
  129. });
  130. },
  131. )
  132. ],
  133. ),
  134. body: Column(
  135. children: [
  136. SearchAppBar(
  137. hintText: '搜索',
  138. autoFocus: false,
  139. onPressed: (searchText) {
  140. _hasData = false;
  141. friendsList = [];
  142. getFriendsList(searchWord: searchText);
  143. },
  144. ),
  145. Expanded(
  146. child: RefreshIndicator(
  147. onRefresh: () async {
  148. setState(() {
  149. _hasData = false;
  150. friendsList = [];
  151. getFriendsList();
  152. });
  153. },
  154. child: Container(
  155. color: ThemeUtils.getTabsBg(context),
  156. child: ListView(
  157. children: _hasData
  158. ? <Widget>[
  159. friendsList.length > 0
  160. ? listWidgetThis()
  161. : Container(
  162. height: width,
  163. width: width,
  164. child: Center(child: Text("暂无数据")),
  165. )
  166. ]
  167. : <Widget>[
  168. Container(
  169. height: width,
  170. width: width,
  171. child: Center(child: Text("加载中...")),
  172. )
  173. ],
  174. ),
  175. ),
  176. ),
  177. ),
  178. ],
  179. ),
  180. );
  181. }
  182. Widget listWidgetThis() {
  183. LogUtil.d(JsonEncoder().convert(friendsList));
  184. List<Widget> listWidget(context) => friendsList.map((e) {
  185. return e != null
  186. ? ConversationItem(
  187. conversationItemData: e,
  188. onTap: () async {
  189. setState(() {
  190. e.isRed = 0;
  191. });
  192. if (e.dataTable == 3) {
  193. await Navigator.push(
  194. context,
  195. MaterialPageRoute(
  196. builder: (_) => ChatDetailPage(
  197. id: e.sessionid,
  198. type: 'nearToOne',
  199. toUserId: e.userId,
  200. title: e.remarks ?? e.userName),
  201. ),
  202. );
  203. } else {
  204. await Navigator.push(
  205. context,
  206. MaterialPageRoute(
  207. builder: (_) => ChatDetailPage(
  208. id: e.sessionid,
  209. type: 'oneToOne',
  210. toUserId: '',
  211. title: e.expression ?? e.remarks ?? e.userName),
  212. ),
  213. );
  214. }
  215. getFriendsList();
  216. },
  217. onPinning: () {
  218. // print('pin flat ==== ${e.topFlag}');
  219. NewApiService().pinChatSession(e.sessionid, 1,
  220. onSuccess: (res) {}, onError: (code, msg) {
  221. toasts(msg);
  222. });
  223. setState(() {
  224. friendsList.remove(e);
  225. friendsList.insert(0, e);
  226. });
  227. },
  228. onDeleting: () {
  229. NewApiService().removeChatSession(e.id, e.sessionid,
  230. onSuccess: (res) {}, onError: (code, msg) {
  231. toasts(msg);
  232. });
  233. setState(() {
  234. friendsList.remove(e);
  235. });
  236. },
  237. )
  238. : Container(
  239. child: null,
  240. );
  241. }).toList();
  242. return Column(
  243. crossAxisAlignment: CrossAxisAlignment.start,
  244. children: listWidget(context));
  245. }
  246. bool get wantKeepAlive => true;
  247. }