import 'dart:convert'; import 'package:bbyyy/beans/goods_bean_entity.dart'; import 'package:bbyyy/beans/message_bean_entity.dart'; import 'package:bbyyy/beans/my_shop_bean_entity.dart'; import 'package:bbyyy/beans/user_vp_bean_entity.dart'; import 'package:bbyyy/https/MyDio.dart'; import 'package:bbyyy/msgDB/my_msg_db.dart'; import 'package:bbyyy/my_tools/const.dart'; import 'package:bbyyy/my_tools/dims.dart'; import 'package:bbyyy/my_tools/ev.dart'; import 'package:bbyyy/my_tools/event_bus.dart'; import 'package:bbyyy/my_tools/my_colors.dart'; import 'package:bbyyy/my_tools/my_cookie.dart'; import 'package:bbyyy/my_tools/my_tools.dart'; import 'package:bbyyy/my_tools/my_views.dart'; import 'package:bbyyy/paegs/chat_page/chat_data.dart'; import 'package:bbyyy/paegs/chat_page/chat_page_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:scroll_to_index/scroll_to_index.dart'; class ChatPage extends StatefulWidget { MyShopBeanDataData chatWith; GoodsBeanDataData goods; ChatPage(this.chatWith, this.goods) { ChatData().chatWith = chatWith; } @override _ChatPageState createState() => _ChatPageState(); } class _ChatPageState extends State { FocusNode _focusNode = FocusNode(); AutoScrollController _scrollController; RefreshController _refreshController = RefreshController(initialRefresh: true); int page = 1; List msges = []; StateSetter ss; @override void initState() { super.initState(); ChatData().context = context; _scrollController = AutoScrollController( viewportBoundaryGetter: () => Rect.fromLTRB(0, 0, 0, MediaQuery.of(context).padding.bottom), axis: Axis.vertical); EventBus().on('hasNewMsg', (arg) { queryMessage(); }); watermarkQuery(); } @override Widget build(BuildContext context) { return GestureDetector( onTap: () { MyTools().hideKeyboard(context); }, behavior: HitTestBehavior.translucent, child: Scaffold( body: Column( children: [ MyViews().myAppBar( widget.chatWith.userUid == 0 ? '客服' : widget.chatWith.userName, context, []), // ChatPageView().goodsInfo(widget.goods), Expanded( child: StatefulBuilder(builder: (BuildContext context, void Function(void Function()) setState) { ss = setState; return Container( color: MyColors.cf2f2f2, child: SmartRefresher( enablePullDown: true, onLoading: onLoading, onRefresh: onRefresh, footer: CustomFooter( loadStyle: LoadStyle.ShowWhenLoading, builder: (context, mode) { if (mode == LoadStatus.loading) { return Container( height: 60.0, child: Container( height: 20.0, width: 20.0, child: CupertinoActivityIndicator(), ), ); } else return Container(); }, ), enablePullUp: true, controller: _refreshController, child: Scrollable( controller: _scrollController, axisDirection: AxisDirection.up, viewportBuilder: (context, offset) { return ExpandedViewport( offset: offset, axisDirection: AxisDirection.up, slivers: [ SliverExpanded(), SliverList( delegate: SliverChildBuilderDelegate( (c, i) => ChatPageView().chatItems(msges[i], context), childCount: msges.length), ) ], ); }, ), ), ); },), ), ChatPageView().inputBox(context, _focusNode) ], ), ), ); } void onLoading() { page++; queryMessage(); } void onRefresh() { page = 1; queryMessage(); } queryMessage() async { MsgDB msgDB = MsgDB('table${MyCookie().getUID()}_${widget.chatWith.userUid}'); if (!msgDB.isTableExits) { await msgDB.open(); } List> maps = await msgDB.queryTableData(page, 10); if (page == 1) { msges.clear(); } maps.forEach((element) { MessageBeanContent msg = MessageBeanContent().fromJson(json.decode(json.encode(element))); msges.add(msg); ChatData().msges = msges; }); endRe(_refreshController); ss(() {}); } @override void dispose() { super.dispose(); ChatData().clean(); MyCookie().plugin.removeWatermark(); MyCookie().prefs.setString( '${MyCookie().getUID()}_${widget.chatWith.userUid}', DateTime.now().toString().substring(0, 19)); } void watermarkQuery() { print('asdasdasd---------------${json.encode(widget.chatWith)}'); MyDio().query({ "key": "user_vp", "filters": { "conditions": [ "user_uid == ${widget.chatWith.userUid}", "vp_key == $vpKeyChatWaterMark" ] }, "dims": userVpDims, "paging": [1, 2000] }, (response, hasError) { UserVpBeanEntity entity = UserVpBeanEntity().fromJson(json.decode(response.data.toString())); if (entity.data.data.length != 0) { MyCookie().plugin.addWatermark(context, "${MyCookie().getUID()}", rowCount: 4, columnCount: 8); print('asdfnfansfionasifnioasfn'); } else { watermarkQuery2(); print('41515115151'); } setState(() {}); }, (error) {}); } void watermarkQuery2() { MyDio().query({ "key": "user_vp", "filters": { "conditions": [ "user_uid == ${MyCookie().getUID()}", "vp_key == $vpKeyChatWaterMark" ] }, "dims": userVpDims, "paging": [1, 2000] }, (response, hasError) { UserVpBeanEntity entity = UserVpBeanEntity().fromJson(json.decode(response.data.toString())); if (entity.data.data.length != 0) { MyCookie().plugin.addWatermark(context, "${MyCookie().getUID()}", rowCount: 4, columnCount: 8); print('asdfnfansfionasifnioasfn'); } else { print('41515115151'); } setState(() {}); }, (error) {}); } }