near_detail.dart 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/internal/bbs/page/chat_room.dart';
  3. import 'package:liftmanager/internal/bbs/page/jubao_page.dart';
  4. import 'package:liftmanager/net/api_service.dart';
  5. import 'package:liftmanager/res/iconfont.dart';
  6. import 'package:liftmanager/utils/toast.dart';
  7. import 'package:liftmanager/widgets/app_bar.dart';
  8. import 'package:liftmanager/routers/fluro_navigator.dart';
  9. import 'package:liftmanager/widgets/load_image.dart';
  10. import 'package:liftmanager/internal/friends/model/near_model.dart';
  11. import 'package:liftmanager/internal/bbs/bbs_router.dart';
  12. import 'package:umeng_common_sdk/umeng_common_sdk.dart';
  13. import '../friends_router.dart';
  14. import 'package:liftmanager/internal/friends/model/friend_model.dart';
  15. class NearDetail extends StatefulWidget {
  16. final NearModel model;
  17. final Records friendModel;
  18. const NearDetail({Key key, this.model, this.friendModel}) : super(key: key);
  19. @override
  20. State<StatefulWidget> createState() {
  21. return NearDetailState();
  22. }
  23. }
  24. class NearDetailState extends State<NearDetail> {
  25. ScrollController _scrollController = new ScrollController();
  26. String targetUserId;
  27. int distance;
  28. String avatarUrl;
  29. String name;
  30. @override
  31. void initState() {
  32. UmengCommonSdk.onPageStart("圈子-个人资料");
  33. super.initState();
  34. targetUserId = widget.model != null
  35. ? widget.model.userId.toString()
  36. : widget.friendModel.targetUserId;
  37. distance = widget.model != null ? widget.model.distance : null;
  38. avatarUrl = widget.model != null
  39. ? widget.model.avatarUrl
  40. : widget.friendModel.avatarUrl;
  41. name = widget.model != null
  42. ? widget.model.remarks ?? widget.model.name
  43. : widget.friendModel.remarks ?? widget.friendModel.userName;
  44. }
  45. Future createPrivateChatRoom(id) async {
  46. await NewApiService().createPrivateChatRoom(id.toString(),
  47. onSuccess: (res) async {
  48. print(res["room"]);
  49. String roomId = res["room"];
  50. await Navigator.push(
  51. context,
  52. MaterialPageRoute(
  53. builder: (_) => ChatDetailPage(
  54. id: roomId,
  55. type: 'nearToOne',
  56. toUserId: id,
  57. title: name,
  58. jubaoToUserId: widget.friendModel?.targetUserId,
  59. ),
  60. ),
  61. );
  62. }, onError: (code, msg) {
  63. toasts(msg);
  64. });
  65. }
  66. @override
  67. void dispose() {
  68. UmengCommonSdk.onPageEnd("圈子-个人资料");
  69. _scrollController.dispose();
  70. super.dispose();
  71. }
  72. @override
  73. Widget build(BuildContext context) {
  74. double width = MediaQuery.of(context).size.width;
  75. return Scaffold(
  76. appBar: MyAppBar(
  77. centerTitle: widget.model != null ? "附近的人" : '圈子',
  78. ),
  79. body: Container(
  80. child: Column(children: <Widget>[
  81. SizedBox(
  82. height: 10,
  83. ),
  84. Row(
  85. crossAxisAlignment: CrossAxisAlignment.start,
  86. children: <Widget>[
  87. SizedBox(width: 10),
  88. ClipRRect(
  89. borderRadius: BorderRadius.all(Radius.circular(29)),
  90. child: LoadNetworkImage(
  91. avatarUrl,
  92. width: 57,
  93. height: 57,
  94. // alignment: Alignment.centerLeft,
  95. ),
  96. ),
  97. SizedBox(width: 10),
  98. Expanded(
  99. child: Column(
  100. crossAxisAlignment: CrossAxisAlignment.start,
  101. children: <Widget>[
  102. Text(
  103. name ?? "",
  104. style: TextStyle(
  105. fontSize: 16,
  106. color: Colors.black,
  107. ),
  108. textAlign: TextAlign.start,
  109. ),
  110. if (distance != null)
  111. Text(
  112. '距离: $distance 米以内',
  113. style:
  114. TextStyle(color: Color(0xff666666), fontSize: 13),
  115. textAlign: TextAlign.start,
  116. ),
  117. ],
  118. ),
  119. ),
  120. ],
  121. ),
  122. SizedBox(
  123. height: 20,
  124. ),
  125. Divider(
  126. height: 0.5,
  127. thickness: 0.5,
  128. color: Color(0xffF8F8F8),
  129. ),
  130. GestureDetector(
  131. onTap: () async {
  132. if (widget.model != null) {
  133. NavigatorUtils.pushResult(context,
  134. "${FriendsRouter.remarks}?id=${targetUserId}&remarks=${Uri.encodeComponent(widget.model.remarks ?? '')}",
  135. (res) {
  136. setState(() {
  137. widget.model.remarks = res;
  138. name = res;
  139. });
  140. });
  141. } else {
  142. NavigatorUtils.pushResult(context,
  143. "${FriendsRouter.remarks}?id=${targetUserId}&remarks=${Uri.encodeComponent(widget.friendModel.remarks ?? '')}",
  144. (res) {
  145. setState(() {
  146. widget.friendModel.remarks = res;
  147. name = res;
  148. });
  149. });
  150. }
  151. },
  152. child: Container(
  153. color: Colors.white,
  154. height: 50,
  155. child: Row(
  156. children: [
  157. SizedBox(
  158. width: 10,
  159. ),
  160. Text(
  161. '备注名',
  162. style: TextStyle(
  163. color: Color(0xff333333),
  164. fontSize: 14,
  165. ),
  166. ),
  167. Spacer(),
  168. Icon(
  169. Iconfont.gengduo,
  170. color: Color(0xffcccccc),
  171. size: 14,
  172. ),
  173. SizedBox(
  174. width: 10,
  175. ),
  176. ],
  177. ),
  178. ),
  179. ),
  180. GestureDetector(
  181. onTap: () async {
  182. Navigator.of(context).push(MaterialPageRoute(
  183. builder: (context) => JuBaoPage(
  184. toUserId: widget.friendModel.targetUserId,
  185. )));
  186. },
  187. child: Container(
  188. color: Colors.white,
  189. height: 50,
  190. child: Row(
  191. children: [
  192. SizedBox(
  193. width: 10,
  194. ),
  195. Text(
  196. '举报',
  197. style: TextStyle(
  198. color: Color(0xff333333),
  199. fontSize: 14,
  200. ),
  201. ),
  202. Spacer(),
  203. Icon(
  204. Iconfont.gengduo,
  205. color: Color(0xffcccccc),
  206. size: 14,
  207. ),
  208. SizedBox(
  209. width: 10,
  210. ),
  211. ],
  212. ),
  213. ),
  214. ),
  215. Divider(
  216. height: 5,
  217. thickness: 5,
  218. color: Color(0xffF8F8F8),
  219. ),
  220. FlatButton(
  221. height: 50,
  222. child: Text(widget.model != null ? "打招呼" : "发消息"),
  223. textColor: Color(0xff5589FF),
  224. onPressed: () async {
  225. if (widget.model != null) {
  226. createPrivateChatRoom(targetUserId);
  227. } else {
  228. if (widget.friendModel.dataTable == 3) {
  229. await Navigator.push(
  230. context,
  231. MaterialPageRoute(
  232. builder: (_) => ChatDetailPage(
  233. id: widget.friendModel.sessionid,
  234. type: 'nearToOne',
  235. toUserId: widget.friendModel.userId,
  236. jubaoToUserId: widget.friendModel.targetUserId,
  237. title: widget.friendModel.remarks ??
  238. widget.friendModel.userName),
  239. ),
  240. );
  241. }
  242. }
  243. },
  244. ),
  245. Expanded(
  246. child: Container(
  247. color: Color(0xfff8f8f8),
  248. ),
  249. )
  250. ]),
  251. ),
  252. );
  253. }
  254. }