chat_page.dart 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. import 'dart:convert';
  2. import 'package:bbyyy/beans/goods_bean_entity.dart';
  3. import 'package:bbyyy/beans/message_bean_entity.dart';
  4. import 'package:bbyyy/beans/my_shop_bean_entity.dart';
  5. import 'package:bbyyy/beans/user_vp_bean_entity.dart';
  6. import 'package:bbyyy/https/MyDio.dart';
  7. import 'package:bbyyy/msgDB/my_msg_db.dart';
  8. import 'package:bbyyy/my_tools/const.dart';
  9. import 'package:bbyyy/my_tools/dims.dart';
  10. import 'package:bbyyy/my_tools/ev.dart';
  11. import 'package:bbyyy/my_tools/event_bus.dart';
  12. import 'package:bbyyy/my_tools/my_colors.dart';
  13. import 'package:bbyyy/my_tools/my_cookie.dart';
  14. import 'package:bbyyy/my_tools/my_tools.dart';
  15. import 'package:bbyyy/my_tools/my_views.dart';
  16. import 'package:bbyyy/paegs/chat_page/chat_data.dart';
  17. import 'package:bbyyy/paegs/chat_page/chat_page_view.dart';
  18. import 'package:flutter/cupertino.dart';
  19. import 'package:flutter/material.dart';
  20. import 'package:pull_to_refresh/pull_to_refresh.dart';
  21. import 'package:scroll_to_index/scroll_to_index.dart';
  22. class ChatPage extends StatefulWidget {
  23. MyShopBeanDataData chatWith;
  24. GoodsBeanDataData goods;
  25. ChatPage(this.chatWith, this.goods) {
  26. ChatData().chatWith = chatWith;
  27. }
  28. @override
  29. _ChatPageState createState() => _ChatPageState();
  30. }
  31. class _ChatPageState extends State<ChatPage> {
  32. FocusNode _focusNode = FocusNode();
  33. AutoScrollController _scrollController;
  34. RefreshController _refreshController =
  35. RefreshController(initialRefresh: true);
  36. int page = 1;
  37. List<MessageBeanContent> msges = [];
  38. StateSetter ss;
  39. @override
  40. void initState() {
  41. super.initState();
  42. ChatData().context = context;
  43. _scrollController = AutoScrollController(
  44. viewportBoundaryGetter: () =>
  45. Rect.fromLTRB(0, 0, 0, MediaQuery.of(context).padding.bottom),
  46. axis: Axis.vertical);
  47. EventBus().on('hasNewMsg', (arg) {
  48. queryMessage();
  49. });
  50. watermarkQuery();
  51. }
  52. @override
  53. Widget build(BuildContext context) {
  54. return GestureDetector(
  55. onTap: () {
  56. MyTools().hideKeyboard(context);
  57. },
  58. behavior: HitTestBehavior.translucent,
  59. child: Scaffold(
  60. body: Column(
  61. children: [
  62. MyViews().myAppBar(
  63. widget.chatWith.userUid == 0 ? '客服' : widget.chatWith.userName,
  64. context, []),
  65. // ChatPageView().goodsInfo(widget.goods),
  66. Expanded(
  67. child: StatefulBuilder(builder: (BuildContext context, void Function(void Function()) setState) {
  68. ss = setState;
  69. return Container(
  70. color: MyColors.cf2f2f2,
  71. child: SmartRefresher(
  72. enablePullDown: true,
  73. onLoading: onLoading,
  74. onRefresh: onRefresh,
  75. footer: CustomFooter(
  76. loadStyle: LoadStyle.ShowWhenLoading,
  77. builder: (context, mode) {
  78. if (mode == LoadStatus.loading) {
  79. return Container(
  80. height: 60.0,
  81. child: Container(
  82. height: 20.0,
  83. width: 20.0,
  84. child: CupertinoActivityIndicator(),
  85. ),
  86. );
  87. } else
  88. return Container();
  89. },
  90. ),
  91. enablePullUp: true,
  92. controller: _refreshController,
  93. child: Scrollable(
  94. controller: _scrollController,
  95. axisDirection: AxisDirection.up,
  96. viewportBuilder: (context, offset) {
  97. return ExpandedViewport(
  98. offset: offset,
  99. axisDirection: AxisDirection.up,
  100. slivers: <Widget>[
  101. SliverExpanded(),
  102. SliverList(
  103. delegate: SliverChildBuilderDelegate(
  104. (c, i) =>
  105. ChatPageView().chatItems(msges[i], context),
  106. childCount: msges.length),
  107. )
  108. ],
  109. );
  110. },
  111. ),
  112. ),
  113. );
  114. },),
  115. ),
  116. ChatPageView().inputBox(context, _focusNode)
  117. ],
  118. ),
  119. ),
  120. );
  121. }
  122. void onLoading() {
  123. page++;
  124. queryMessage();
  125. }
  126. void onRefresh() {
  127. page = 1;
  128. queryMessage();
  129. }
  130. queryMessage() async {
  131. MsgDB msgDB =
  132. MsgDB('table${MyCookie().getUID()}_${widget.chatWith.userUid}');
  133. if (!msgDB.isTableExits) {
  134. await msgDB.open();
  135. }
  136. List<Map<String, dynamic>> maps = await msgDB.queryTableData(page, 10);
  137. if (page == 1) {
  138. msges.clear();
  139. }
  140. maps.forEach((element) {
  141. MessageBeanContent msg =
  142. MessageBeanContent.fromJson(json.decode(json.encode(element)));
  143. msges.add(msg);
  144. ChatData().msges = msges;
  145. });
  146. endRe(_refreshController);
  147. ss(() {});
  148. }
  149. @override
  150. void dispose() {
  151. super.dispose();
  152. ChatData().clean();
  153. MyCookie().plugin.removeWatermark();
  154. MyCookie().prefs.setString(
  155. '${MyCookie().getUID()}_${widget.chatWith.userUid}',
  156. DateTime.now().toString().substring(0, 19));
  157. }
  158. void watermarkQuery() {
  159. print('asdasdasd---------------${json.encode(widget.chatWith)}');
  160. MyDio().query({
  161. "key": "user_vp",
  162. "filters": {
  163. "conditions": [
  164. "user_uid == ${widget.chatWith.userUid}",
  165. "vp_key == $vpKeyChatWaterMark"
  166. ]
  167. },
  168. "dims": userVpDims,
  169. "paging": [1, 2000]
  170. }, (response, hasError) {
  171. UserVpBeanEntity entity =
  172. UserVpBeanEntity.fromJson(json.decode(response.data.toString()));
  173. if (entity.data.data.length != 0) {
  174. MyCookie().plugin.addWatermark(context, "${MyCookie().getUID()}",
  175. rowCount: 4, columnCount: 8);
  176. print('asdfnfansfionasifnioasfn');
  177. } else {
  178. watermarkQuery2();
  179. print('41515115151');
  180. }
  181. setState(() {});
  182. }, (error) {});
  183. }
  184. void watermarkQuery2() {
  185. MyDio().query({
  186. "key": "user_vp",
  187. "filters": {
  188. "conditions": [
  189. "user_uid == ${MyCookie().getUID()}",
  190. "vp_key == $vpKeyChatWaterMark"
  191. ]
  192. },
  193. "dims": userVpDims,
  194. "paging": [1, 2000]
  195. }, (response, hasError) {
  196. UserVpBeanEntity entity =
  197. UserVpBeanEntity.fromJson(json.decode(response.data.toString()));
  198. if (entity.data.data.length != 0) {
  199. MyCookie().plugin.addWatermark(context, "${MyCookie().getUID()}",
  200. rowCount: 4, columnCount: 8);
  201. print('asdfnfansfionasifnioasfn');
  202. } else {
  203. print('41515115151');
  204. }
  205. setState(() {});
  206. }, (error) {});
  207. }
  208. }