friends_list.dart 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  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. title: e.remarks ?? e.userName),
  205. ),
  206. );
  207. } else {
  208. await Navigator.push(
  209. context,
  210. MaterialPageRoute(
  211. builder: (_) => ChatDetailPage(
  212. id: e.sessionid,
  213. type: 'oneToOne',
  214. toUserId: '',
  215. title: e.expression ?? e.remarks ?? e.userName),
  216. ),
  217. );
  218. }
  219. getFriendsList();
  220. },
  221. onPinning: () {
  222. // print('pin flat ==== ${e.topFlag}');
  223. NewApiService().pinChatSession(e.sessionid, 1,
  224. onSuccess: (res) {}, onError: (code, msg) {
  225. toasts(msg);
  226. });
  227. setState(() {
  228. friendsList.remove(e);
  229. friendsList.insert(0, e);
  230. });
  231. },
  232. onDeleting: () {
  233. NewApiService().removeChatSession(e.id, e.sessionid,
  234. onSuccess: (res) {}, onError: (code, msg) {
  235. toasts(msg);
  236. });
  237. setState(() {
  238. friendsList.remove(e);
  239. });
  240. },
  241. )
  242. : Container(
  243. child: null,
  244. );
  245. }).toList();
  246. return Column(
  247. crossAxisAlignment: CrossAxisAlignment.start,
  248. children: listWidget(context));
  249. }
  250. bool get wantKeepAlive => true;
  251. }