chat_page.dart 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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/msg_bean_data_entity.dart';
  5. import 'package:bbyyy/beans/my_shop_bean_entity.dart';
  6. import 'package:bbyyy/beans/user_vp_bean_entity.dart';
  7. import 'package:bbyyy/https/MyDio.dart';
  8. import 'package:bbyyy/msgDB/my_msg_db.dart';
  9. import 'package:bbyyy/my_tools/const.dart';
  10. import 'package:bbyyy/my_tools/dims.dart';
  11. import 'package:bbyyy/my_tools/ev.dart';
  12. import 'package:bbyyy/my_tools/event_bus.dart';
  13. import 'package:bbyyy/my_tools/my_colors.dart';
  14. import 'package:bbyyy/my_tools/my_cookie.dart';
  15. import 'package:bbyyy/my_tools/my_tools.dart';
  16. import 'package:bbyyy/my_tools/my_views.dart';
  17. import 'package:bbyyy/paegs/chat_page/chat_data.dart';
  18. import 'package:bbyyy/paegs/chat_page/chat_page_view.dart';
  19. import 'package:disable_screenshots/disable_screenshots.dart';
  20. import 'package:flutter/cupertino.dart';
  21. import 'package:flutter/material.dart';
  22. import 'package:pull_to_refresh/pull_to_refresh.dart';
  23. import 'package:scroll_to_index/scroll_to_index.dart';
  24. class ChatPage extends StatefulWidget {
  25. MyShopBeanDataData chatWith;
  26. GoodsBeanDataData goods;
  27. ChatPage(this.chatWith, this.goods) {
  28. ChatData().chatWith = chatWith;
  29. }
  30. @override
  31. _ChatPageState createState() => _ChatPageState();
  32. }
  33. class _ChatPageState extends State<ChatPage> {
  34. FocusNode _focusNode = FocusNode();
  35. AutoScrollController _scrollController;
  36. RefreshController _refreshController =
  37. RefreshController(initialRefresh: true);
  38. int page = 1;
  39. List<MessageBeanContent> msges = [];
  40. @override
  41. void initState() {
  42. super.initState();
  43. ChatData().context = context;
  44. _scrollController = AutoScrollController(
  45. viewportBoundaryGetter: () =>
  46. Rect.fromLTRB(0, 0, 0, MediaQuery.of(context).padding.bottom),
  47. axis: Axis.vertical);
  48. EventBus().on('hasNewMsg', (arg) {
  49. queryMessage();
  50. });
  51. watermarkQuery();
  52. }
  53. @override
  54. Widget build(BuildContext context) {
  55. return GestureDetector(
  56. onTap: () {
  57. MyTools().hideKeyboard(context);
  58. },
  59. behavior: HitTestBehavior.translucent,
  60. child: Scaffold(
  61. body: Column(
  62. children: [
  63. MyViews().myAppBar(widget.chatWith.userUid==0?'客服':widget.chatWith.userName, 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 = MsgDB(
  128. '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": ["user_uid == ${widget.chatWith.userUid}","vp_key == $vpKeyChatWaterMark"]
  160. },
  161. "dims": userVpDims,
  162. "paging": [1, 2000]
  163. }, (response, hasError) {
  164. UserVpBeanEntity entity =
  165. UserVpBeanEntity().fromJson(json.decode(response.data.toString()));
  166. if(entity.data.data.length != 0){
  167. MyCookie().plugin.addWatermark(context, "${MyCookie().getUID()}",
  168. rowCount: 4, columnCount: 8);
  169. print('asdfnfansfionasifnioasfn');
  170. }else{
  171. watermarkQuery2();
  172. print('41515115151');
  173. }
  174. setState(() {});
  175. }, (error) {});
  176. }
  177. void watermarkQuery2(){
  178. MyDio().query({
  179. "key": "user_vp",
  180. "filters": {
  181. "conditions": ["user_uid == ${MyCookie().getUID()}","vp_key == $vpKeyChatWaterMark"]
  182. },
  183. "dims": userVpDims,
  184. "paging": [1, 2000]
  185. }, (response, hasError) {
  186. UserVpBeanEntity entity =
  187. UserVpBeanEntity().fromJson(json.decode(response.data.toString()));
  188. if(entity.data.data.length != 0){
  189. MyCookie().plugin.addWatermark(context, "${MyCookie().getUID()}",
  190. rowCount: 4, columnCount: 8);
  191. print('asdfnfansfionasifnioasfn');
  192. }else{
  193. print('41515115151');
  194. }
  195. setState(() {});
  196. }, (error) {});
  197. }
  198. }