diff --git a/.idea/bytedesk-flutter.iml b/.idea/bytedesk-flutter.iml index 57c1845..3669e1a 100644 --- a/.idea/bytedesk-flutter.iml +++ b/.idea/bytedesk-flutter.iml @@ -36,6 +36,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index 9a8fadf..4f30dba 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -5,7 +5,6 @@ - @@ -13,14 +12,14 @@ - - @@ -28,7 +27,6 @@ - @@ -36,7 +34,6 @@ - @@ -44,7 +41,6 @@ - @@ -52,7 +48,6 @@ - @@ -60,7 +55,6 @@ - @@ -68,7 +62,6 @@ - @@ -76,7 +69,6 @@ - @@ -84,7 +76,6 @@ - @@ -92,7 +83,6 @@ - @@ -100,7 +90,6 @@ - @@ -108,7 +97,6 @@ - @@ -116,7 +104,6 @@ - @@ -124,7 +111,6 @@ - @@ -132,7 +118,6 @@ - @@ -140,7 +125,6 @@ - @@ -148,7 +132,6 @@ - @@ -156,7 +139,6 @@ - @@ -164,7 +146,6 @@ - @@ -172,7 +153,6 @@ - @@ -180,7 +160,6 @@ - @@ -188,7 +167,6 @@ - @@ -196,7 +174,6 @@ - @@ -204,7 +181,6 @@ - @@ -212,7 +188,6 @@ - @@ -220,7 +195,6 @@ - @@ -228,7 +202,6 @@ - @@ -236,7 +209,6 @@ - @@ -245,14 +217,12 @@ - @@ -260,7 +230,6 @@ - @@ -268,7 +237,6 @@ - @@ -276,7 +244,6 @@ - @@ -284,7 +251,6 @@ - @@ -292,7 +258,6 @@ - @@ -300,7 +265,6 @@ - @@ -308,7 +272,6 @@ - @@ -316,7 +279,6 @@ - @@ -324,7 +286,6 @@ - @@ -332,7 +293,6 @@ - @@ -340,14 +300,13 @@ - - @@ -355,7 +314,6 @@ - @@ -363,7 +321,6 @@ - @@ -371,7 +328,6 @@ - @@ -379,7 +335,6 @@ - @@ -388,7 +343,6 @@ @@ -396,14 +350,12 @@ - @@ -411,7 +363,6 @@ - @@ -419,7 +370,6 @@ - @@ -427,7 +377,6 @@ - @@ -435,7 +384,6 @@ - @@ -443,7 +391,6 @@ - @@ -451,7 +398,7 @@ - @@ -459,7 +406,6 @@ - @@ -467,7 +413,6 @@ - @@ -475,7 +420,6 @@ - @@ -483,7 +427,6 @@ - @@ -491,7 +434,6 @@ - @@ -499,7 +441,6 @@ - @@ -507,7 +448,6 @@ - @@ -515,14 +455,13 @@ - - @@ -530,7 +469,6 @@ - @@ -538,7 +476,6 @@ - @@ -546,7 +483,6 @@ - @@ -554,7 +490,6 @@ - @@ -562,7 +497,6 @@ - @@ -570,7 +504,6 @@ - @@ -578,7 +511,6 @@ - @@ -586,7 +518,6 @@ - @@ -594,7 +525,6 @@ - @@ -602,7 +532,6 @@ - @@ -610,7 +539,6 @@ - @@ -618,7 +546,6 @@ - @@ -626,7 +553,6 @@ - @@ -634,7 +560,6 @@ - @@ -642,7 +567,6 @@ - @@ -650,7 +574,6 @@ - @@ -658,7 +581,6 @@ - @@ -666,7 +588,6 @@ - @@ -674,7 +595,6 @@ - @@ -682,7 +602,6 @@ - @@ -690,7 +609,6 @@ - @@ -698,7 +616,6 @@ - @@ -706,7 +623,6 @@ - @@ -714,7 +630,6 @@ - @@ -722,7 +637,6 @@ - @@ -730,7 +644,6 @@ - @@ -738,7 +651,6 @@ - @@ -746,7 +658,6 @@ - @@ -754,7 +665,6 @@ - @@ -762,7 +672,6 @@ - @@ -770,7 +679,6 @@ - @@ -778,7 +686,6 @@ - @@ -786,7 +693,6 @@ - @@ -794,7 +700,6 @@ - @@ -802,7 +707,6 @@ - @@ -810,7 +714,6 @@ - @@ -818,7 +721,6 @@ - @@ -827,14 +729,12 @@ - @@ -842,7 +742,6 @@ - @@ -850,7 +749,6 @@ - @@ -858,7 +756,6 @@ - @@ -866,7 +763,6 @@ - @@ -874,7 +770,6 @@ - @@ -882,7 +777,6 @@ - @@ -890,7 +784,6 @@ - @@ -898,7 +791,6 @@ - @@ -906,7 +798,6 @@ - @@ -914,7 +805,6 @@ - @@ -922,7 +812,6 @@ - @@ -930,7 +819,6 @@ - @@ -938,7 +826,6 @@ - @@ -946,7 +833,6 @@ - @@ -954,7 +840,6 @@ - @@ -962,7 +847,6 @@ - @@ -970,7 +854,6 @@ - @@ -978,7 +861,6 @@ - @@ -986,7 +868,6 @@ - @@ -994,7 +875,7 @@ - @@ -1002,7 +883,6 @@ - @@ -1010,7 +890,6 @@ - @@ -1018,7 +897,6 @@ - @@ -1026,21 +904,20 @@ - - - @@ -1048,7 +925,6 @@ - @@ -1056,7 +932,6 @@ - @@ -1064,7 +939,6 @@ - @@ -1072,7 +946,6 @@ - @@ -1080,7 +953,6 @@ - @@ -1088,7 +960,6 @@ - @@ -1096,7 +967,6 @@ - @@ -1104,7 +974,6 @@ - @@ -1112,7 +981,6 @@ - @@ -1120,7 +988,6 @@ - @@ -1128,7 +995,6 @@ - @@ -1136,7 +1002,6 @@ - @@ -1144,7 +1009,6 @@ - @@ -1152,7 +1016,6 @@ - @@ -1160,7 +1023,6 @@ - @@ -1168,7 +1030,6 @@ - @@ -1176,7 +1037,6 @@ - @@ -1184,152 +1044,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -1368,6 +1086,7 @@ + @@ -1380,6 +1099,7 @@ + @@ -1387,6 +1107,7 @@ + @@ -1446,9 +1167,12 @@ + + + @@ -1467,10 +1191,6 @@ - - - - diff --git a/bytedesk_demo/pubspec.yaml b/bytedesk_demo/pubspec.yaml index cc19e1d..e18b392 100644 --- a/bytedesk_demo/pubspec.yaml +++ b/bytedesk_demo/pubspec.yaml @@ -44,7 +44,7 @@ dependencies: # 振动 https://pub.dev/packages/vibration # 针对报错fatal error: 'vibration/vibration-Swift.h' file not found #import , ld: library not found for -lvibration # 请在ios/Podfile中添加:use_frameworks! - vibration: ^1.7.3 + vibration: ^1.7.5 # 在线客服 https://pub.dev/packages/bytedesk_kefu #bytedesk_kefu: ^1.4.1 bytedesk_kefu: diff --git a/bytedesk_kefu/lib/ui/chat/page/chat_kf_page.dart b/bytedesk_kefu/lib/ui/chat/page/chat_kf_page.dart index 81bb4ec..83d16e0 100755 --- a/bytedesk_kefu/lib/ui/chat/page/chat_kf_page.dart +++ b/bytedesk_kefu/lib/ui/chat/page/chat_kf_page.dart @@ -114,8 +114,32 @@ class _ChatKFPageState extends State // final _flutterVideoCompress = FlutterVideoCompress(); bool _isRequestingThread = true; // + String goodName = ''; + String goodPrice = ''; + String goodUrl = ''; + bool showGood = false; @override void initState() { + if (widget.custom != null && + widget.custom!.trim().length > 0){ + showGood = true; + Map json = jsonDecode(widget.custom??""); + json.forEach((key, value) { + //typeOne等所对应的数组数据 + if(key=='title'){ + goodName = value; + } + if(key=='price'){ + goodPrice = value; + } + if(key=='imageUrl'){ + goodUrl = value; + } + }); + } + + + // BytedeskUtils.printLog('chat_kf_page init'); SpUtil.putBool(BytedeskConstants.isCurrentChatKfPage, true); // 从历史会话或者顶部通知栏进入 @@ -191,7 +215,7 @@ class _ChatKFPageState extends State Widget build(BuildContext context) { super.build(context); // - return Scaffold( + return Scaffold ( appBar: AppBar( title: Text(_title ?? '请求中, 请稍后...',style: TextStyle(color: Color(0xFF333333),fontSize: 16),), backgroundColor: Colors.white, @@ -260,11 +284,11 @@ class _ChatKFPageState extends State BytedeskUtils.printLog('创建新会话'); // TODO: 参考拼多多,在发送按钮上方显示pop商品信息,用户确认之后才会发送商品信息 // 发送商品信息 - if (widget.custom != null && - widget.custom!.trim().length > 0) { - _bdMqtt.sendCommodityMessage( - widget.custom!, _currentThread!); - } + // if (widget.custom != null && + // widget.custom!.trim().length > 0) { + // _bdMqtt.sendCommodityMessage( + // widget.custom!, _currentThread!); + // } // 发送附言消息 if (widget.postscript != null && widget.postscript!.trim().length > 0) { @@ -278,11 +302,11 @@ class _ChatKFPageState extends State // 加载本地历史消息 _appendMessage(state.threadResult.msg!); // 发送商品信息 - if (widget.custom != null && - widget.custom!.trim().length > 0) { - _bdMqtt.sendCommodityMessage( - widget.custom!, _currentThread!); - } + // if (widget.custom != null && + // widget.custom!.trim().length > 0) { + // _bdMqtt.sendCommodityMessage( + // widget.custom!, _currentThread!); + // } // 发送附言消息 if (widget.postscript != null && widget.postscript!.trim().length > 0) { @@ -482,63 +506,133 @@ class _ChatKFPageState extends State ), Text('会话请求中, 请稍后...',style: TextStyle(color: Color(0xFF333333)),) ])) - : Container( - alignment: Alignment.bottomCenter, - color: Color(0xFFDEEEEEE), - child: Column( - children: [ - // 参考pull_to_refresh库中 QQChatList例子 - Expanded( - // - child: SmartRefresher( - enablePullDown: false, - onLoading: () async { - // BytedeskUtils.printLog('TODO: 下拉刷新'); // 注意:方向跟默认是反着的 - // await Future.delayed(Duration(milliseconds: 1000)); - _getMessages(_page, _size); - setState(() {}); - _refreshController.loadComplete(); - }, - footer: ClassicFooter( - loadStyle: LoadStyle.ShowWhenLoading, - ), - enablePullUp: true, - // - child: Scrollable( - controller: _scrollController, - axisDirection: AxisDirection.up, - viewportBuilder: (context, offset) { - return ExpandedViewport( - offset: offset, + : Stack( + alignment: Alignment.center, + children: [ + + + Container( + alignment: Alignment.bottomCenter, + color: Color(0xFFDEEEEEE), + child: Column( + children: [ + // 参考pull_to_refresh库中 QQChatList例子 + Expanded( + // + child: SmartRefresher( + enablePullDown: false, + onLoading: () async { + // BytedeskUtils.printLog('TODO: 下拉刷新'); // 注意:方向跟默认是反着的 + // await Future.delayed(Duration(milliseconds: 1000)); + _getMessages(_page, _size); + setState(() {}); + _refreshController.loadComplete(); + }, + footer: ClassicFooter( + loadStyle: LoadStyle.ShowWhenLoading, + ), + enablePullUp: true, + // + child: Scrollable( + controller: _scrollController, axisDirection: AxisDirection.up, - slivers: [ - SliverExpanded(), - SliverList( - delegate: SliverChildBuilderDelegate( - (c, i) => _messages[i], - childCount: _messages.length), - ) - ], - ); - }, + viewportBuilder: (context, offset) { + return ExpandedViewport( + offset: offset, + axisDirection: AxisDirection.up, + slivers: [ + SliverExpanded(), + SliverList( + delegate: SliverChildBuilderDelegate( + (c, i) => _messages[i], + childCount: _messages.length), + ) + ], + ); + }, + ), + // + controller: _refreshController, + ), + ), + Divider( + height: 1.0, ), - // - controller: _refreshController, - ), + Container( + decoration: BoxDecoration( + color: Colors.white + ), + // child: _textComposerWidget(), + child: _chatInput(), + ), + + ], ), - Divider( - height: 1.0, + ), + showGood? Positioned( + top: 0, + child:Container( + width: 300, + margin: EdgeInsets.all(10), + padding: EdgeInsets.symmetric(vertical: 10), + decoration: BoxDecoration( + color: Color(0xFFe5f9ff).withOpacity(0.8), + borderRadius: BorderRadius.all(Radius.circular(5)), ), - Container( - decoration: BoxDecoration( - color: Colors.white - ), - // child: _textComposerWidget(), - child: _chatInput(), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(width: 10,), + Image.network(goodUrl,width: 50,height: 50,), + SizedBox(width: 10,), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(goodName,style: TextStyle(color: Color(0xFF333333),fontSize: 15),), + SizedBox(height: 8,), + Row( + children: [ + Text('¥ '+goodPrice,style: TextStyle(color: Colors.red,fontSize: 16),), + SizedBox(width: 30,), + GestureDetector( + onTap: (){ + showGood = false; + setState(() { + }); + _goodsSubmitted(); + }, + child: Container( + decoration: BoxDecoration( + color: Color(0xFFefefef), + borderRadius: BorderRadius.all(Radius.circular(4)), + border: Border.all(color:Color(0xFF999999) ) + ), + padding: EdgeInsets.symmetric(horizontal: 5), + child: Text('发送链接',style: TextStyle(color: Color(0xFF333333)),), + ), + ), + ], + ), + ], + ), + Spacer(), + IconButton( + padding: const EdgeInsets.only(bottom: 30), + icon: Icon( + Icons.close, + ), + onPressed: () { + showGood = false; + setState(() { + }); + }, + ), + ], ), - ], - ), - ))); + ),):SizedBox(), + ], + ))); } Widget _chatInput() { @@ -665,7 +759,8 @@ class _ChatKFPageState extends State icon: Icon(Icons.send), onPressed: () => _handleSubmitted(_textController.text), ), - ) + ), + ], ), ), @@ -676,6 +771,33 @@ class _ChatKFPageState extends State @override bool get wantKeepAlive => true; + // 发送商品消息 + void _goodsSubmitted() { + + if (widget.custom != null && + widget.custom!.trim().length > 0) { + + if (_bdMqtt.isConnected()) { + if (_currentThread == null) { + Fluttertoast.showToast(msg: '请求客服中, 请稍后...'); + return; + } + // 长连接正常情况下,调用长连接接口 + _bdMqtt.sendCommodityMessage( + widget.custom!, _currentThread!); + } else { + + } + + }else{ + return; + } + + + } + + + // 发送消息 void _handleSubmitted(String? text) { _textController.clear(); diff --git a/bytedesk_kefu/pubspec.yaml b/bytedesk_kefu/pubspec.yaml index 3303d47..3cf7a7f 100644 --- a/bytedesk_kefu/pubspec.yaml +++ b/bytedesk_kefu/pubspec.yaml @@ -71,7 +71,7 @@ dependencies: # 视频压缩 https://pub.dev/packages/flutter_video_compress/install # flutter_video_compress: ^0.3.7+8 # 振动 https://pub.dev/packages/vibration - # vibration: ^1.7.3 + # vibration: ^1.7.5 # 播放语音 # https://pub.dev/packages/audioplayers # audioplayers: ^0.16.1