friends_list.dart 8.6 KB

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