chat_page.dart 6.7 KB

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