friends_list.dart 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/res/gaps.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/internal/search/search_router.dart';
  7. import 'package:liftmanager/widgets/app_search_bar.dart';
  8. import 'package:liftmanager/res/resources.dart';
  9. import 'package:liftmanager/routers/fluro_navigator.dart';
  10. import 'package:liftmanager/widgets/load_image.dart';
  11. import '../model/conversation.dart';
  12. import 'package:provider/provider.dart';
  13. import './message_page/conversation_item.dart';
  14. import 'package:liftmanager/internal/friends/friends_router.dart';
  15. import 'package:liftmanager/utils/utils.dart';
  16. import 'package:liftmanager/mvp/base_page_state.dart';
  17. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  18. // import 'package:liftmanager/internal/friends/model/friend_model.dart';
  19. import 'package:liftmanager/widgets/state_layout.dart';
  20. import 'package:provider/provider.dart';
  21. import 'package:liftmanager/utils/time_format.dart';
  22. import 'package:liftmanager/utils/log_util.dart';
  23. import 'package:liftmanager/widgets/my_refresh_list.dart';
  24. import 'dart:convert';
  25. import 'package:shared_preferences/shared_preferences.dart';
  26. import 'package:liftmanager/utils/fast_notification.dart';
  27. import 'package:liftmanager/utils/theme_utils.dart';
  28. import 'package:flustars/flustars.dart' as FlutterStars;
  29. class FriendsList extends StatefulWidget {
  30. // QuestionList(this.index);
  31. // final String index;
  32. @override
  33. FriendsListState createState() => FriendsListState();
  34. }
  35. class FriendsListState extends State<FriendsList>
  36. with TickerProviderStateMixin, AutomaticKeepAliveClientMixin{
  37. // NewsDetailItem item = NewsDetailItem();
  38. int _page = 1;
  39. bool _hasData = false;
  40. String changeRoomId;
  41. @override
  42. void initState() {
  43. super.initState();
  44. getFriendsList();
  45. print(66666);
  46. FastNotification.addListener("friendAction",(friendsInit){
  47. if(mounted){
  48. setState(() {
  49. });
  50. getStringEvent();
  51. }
  52. });
  53. }
  54. List<dynamic> friendsList = [];
  55. List<dynamic>listOne = [];
  56. List<String> historyMessageString = [];
  57. Future getFriendsList() async {
  58. await NewApiService().getFriendListPage(_page,999999, onSuccess: (res) {
  59. // LogUtil.d(JsonEncoder().convert(res.records));
  60. // LogUtil.d("5555664");
  61. listOne=[];
  62. if(res.records.length > 0){
  63. res.records.forEach((item){
  64. item.isRed = 0;
  65. getHistoryList(item.sessionid,item);
  66. });
  67. }
  68. _hasData = true;
  69. setState(() {});
  70. }, onError: (code, msg) {
  71. toasts(msg);
  72. });
  73. }
  74. void getStringEvent()async{
  75. SharedPreferences prefs = await SharedPreferences.getInstance();
  76. if(prefs.getString("changeRoomId") != null){
  77. changeRoomId = prefs.getString("changeRoomId");
  78. }
  79. getFriendsList();
  80. print(7775);
  81. }
  82. getHistoryList(roomIdss,item)async{
  83. SharedPreferences prefs = await SharedPreferences.getInstance();
  84. historyMessageString = prefs.getStringList(roomIdss);
  85. if(historyMessageString!=null&&historyMessageString.length>0){
  86. List<dynamic> historyMessageqqq = historyMessageString.map((i)=>jsonDecode(i)).toList();
  87. if(historyMessageqqq[historyMessageqqq.length-1]["type"] == 1){
  88. item.msg=historyMessageqqq[historyMessageqqq.length-1]["msg"];
  89. }else if(historyMessageqqq[historyMessageqqq.length-1]["type"] == 2) {
  90. item.msg = "[图片]";
  91. }
  92. item.time=historyMessageqqq[historyMessageqqq.length-1]["time"];
  93. item.isRed = 1;
  94. listOne.add(item);
  95. }else {
  96. listOne.add(item);
  97. }
  98. }
  99. @override
  100. void dispose() {
  101. super.dispose();
  102. }
  103. @override
  104. Widget build(BuildContext context) {
  105. double width = MediaQuery.of(context).size.width;
  106. double height = MediaQuery.of(context).size.height;
  107. LogUtil.d(JsonEncoder().convert(friendsList));
  108. LogUtil.d("5555665-------------");
  109. friendsList = [];
  110. if(changeRoomId !=null){
  111. dynamic firstContent;
  112. listOne.forEach((item){
  113. if(item.sessionid == changeRoomId){
  114. firstContent = item;
  115. }else {
  116. friendsList.add(item);
  117. }
  118. });
  119. friendsList.insert(0, firstContent);
  120. }else {
  121. friendsList = listOne;
  122. }
  123. LogUtil.d(JsonEncoder().convert(friendsList));
  124. LogUtil.d("5555665--------------------");
  125. return Scaffold(
  126. appBar: MyAppBar(
  127. centerTitle: "聊天",
  128. isBack: false,
  129. actions:<Widget>[
  130. Utils.getAuthByRouter('people_nearby', false) && FlutterStars.SpUtil.getInt("expertFlag") != 1 ?
  131. FlatButton(
  132. child: Text("附近的人"),
  133. textColor: Colours.dark_text,
  134. highlightColor: Colors.transparent,
  135. onPressed: (){
  136. NavigatorUtils.push(context, FriendsRouter.nearList);
  137. },
  138. ) : Container()
  139. ],
  140. ),
  141. body:
  142. RefreshIndicator(
  143. onRefresh:()async{
  144. setState(() {
  145. _hasData = false;
  146. friendsList = [];
  147. getFriendsList();
  148. });
  149. },
  150. child: Container(
  151. color: ThemeUtils.getTabsBg(context),
  152. child: ListView(
  153. children: _hasData?<Widget>[
  154. friendsList.length>0?listWidgetThis():Container(
  155. height:width,
  156. width:width,
  157. child: Center(
  158. child:Text("暂无数据")
  159. ),
  160. )
  161. ]:<Widget>[
  162. Container(
  163. height:width,
  164. width:width,
  165. child: Center(
  166. child:Text("加载中...")
  167. ),
  168. )
  169. ],
  170. )
  171. )
  172. )
  173. );
  174. }
  175. Widget listWidgetThis (){
  176. LogUtil.d(JsonEncoder().convert(friendsList));
  177. LogUtil.d("55556777777--------------------");
  178. List<Widget> listWidget(context) => friendsList.asMap().keys.map((i) {
  179. return friendsList[i]!=null?ConversationItem(friendsList[i],(sessionid){
  180. for(var i = 0;i<friendsList.length;i++){
  181. if(friendsList[i].sessionid == sessionid){
  182. setState(() {
  183. friendsList[i].isRed = 0;
  184. });
  185. }
  186. }
  187. }):Container(child: null,);
  188. }).toList();
  189. return Column(
  190. crossAxisAlignment: CrossAxisAlignment.start,
  191. children: listWidget(context)
  192. );
  193. }
  194. bool get wantKeepAlive => true;
  195. }