Ver a proveniência

优化 消息弹窗/实时帮再来一单/查看图片界面

master
jiahao há 5 anos
ascendente
cometimento
ff7db77c45
30 ficheiros alterados com 1097 adições e 839 eliminações
  1. BIN
      assets/images/img_splash_4.png
  2. BIN
      assets/images/img_splash_5.png
  3. BIN
      assets/img_splash_4.png
  4. BIN
      assets/img_splash_5.png
  5. +1
    -1
      i18n/vi-VN.json
  6. +3
    -2
      ios/Flutter/flutter_export_environment.sh
  7. +2
    -0
      ios/Runner/Info.plist
  8. +32
    -2
      lib/chat/ChatPage.dart
  9. +1
    -1
      lib/chat/company_server_view.dart
  10. +7
    -7
      lib/chat/full_img_view.dart
  11. +1
    -1
      lib/chat/input_bar.dart
  12. +2
    -2
      lib/generated/i18n.dart
  13. +1
    -1
      lib/home/AddProgram.dart
  14. +659
    -659
      lib/home/ConversActionPage.dart
  15. +1
    -1
      lib/home/InformUser.dart
  16. +1
    -1
      lib/home/ProfilePage.dart
  17. +4
    -0
      lib/home/ProgramDetail.dart
  18. +1
    -1
      lib/home/daily_bonus_page.dart
  19. +73
    -72
      lib/home/homeMain.dart
  20. +1
    -1
      lib/home/realtimehelper/translation_butler_page.dart
  21. +5
    -4
      lib/home/splash_page.dart
  22. +2
    -0
      lib/main.dart
  23. +64
    -0
      lib/proto/transhousekeeper.pb.dart
  24. +17
    -0
      lib/proto/transhousekeeper.pbenum.dart
  25. +25
    -0
      lib/proto/transhousekeeper.pbjson.dart
  26. +20
    -5
      lib/proto/transhousekeeper.proto
  27. +20
    -0
      lib/utils/CustomUI.dart
  28. +17
    -2
      lib/utils/count_down_button.dart
  29. +56
    -1
      lib/utils/msgHandler.dart
  30. +81
    -75
      lib/utils/wpop/w_popup_menu.dart

BIN
assets/images/img_splash_4.png Ver ficheiro

Antes Depois
Largura: 720  |  Altura: 762  |  Tamanho: 332 KiB Largura: 720  |  Altura: 868  |  Tamanho: 333 KiB

BIN
assets/images/img_splash_5.png Ver ficheiro

Antes Depois
Largura: 720  |  Altura: 763  |  Tamanho: 196 KiB Largura: 720  |  Altura: 868  |  Tamanho: 197 KiB

BIN
assets/img_splash_4.png Ver ficheiro

Antes Depois
Largura: 720  |  Altura: 868  |  Tamanho: 333 KiB

BIN
assets/img_splash_5.png Ver ficheiro

Antes Depois
Largura: 720  |  Altura: 868  |  Tamanho: 197 KiB

+ 1
- 1
i18n/vi-VN.json Ver ficheiro

@@ -1164,7 +1164,7 @@
"search_plach": "Rà soát địa điểm",
"finding_place": " Tìm địa điểm",
"real_time_helper": "Hỗ trợ nhanh",
"translation_butler": "Dịch vụ dịch thuật thời gian thực",
"translation_butler": "Dịch vụ dịch thuật \nthời gian thực",
"travel_butler": " Trợ lý chỉ đường",
"translation_butler_tips": "Trợ lý dịch thuật giúp bạn giải quyết trở ngại ngôn ngữ",
"choose_language": " Vui lòng chọn một ngôn ngữ để dịch ",


+ 3
- 2
ios/Flutter/flutter_export_environment.sh Ver ficheiro

@@ -2,9 +2,10 @@
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=/Users/random/sdk/flutter_sdk"
export "FLUTTER_APPLICATION_PATH=/Users/random/code/flutter/project/hibok"
export "FLUTTER_TARGET=lib/main.dart"
export "FLUTTER_TARGET=/Users/random/code/flutter/project/hibok/lib/main.dart"
export "FLUTTER_BUILD_DIR=build"
export "SYMROOT=${SOURCE_ROOT}/../build/ios"
export "FLUTTER_FRAMEWORK_DIR=/Users/random/sdk/flutter_sdk/bin/cache/artifacts/engine/ios-release"
export "FLUTTER_FRAMEWORK_DIR=/Users/random/sdk/flutter_sdk/bin/cache/artifacts/engine/ios"
export "FLUTTER_BUILD_NAME=1.1.0"
export "FLUTTER_BUILD_NUMBER=15"
export "TRACK_WIDGET_CREATION=true"

+ 2
- 0
ios/Runner/Info.plist Ver ficheiro

@@ -188,6 +188,8 @@
</array>
<key>io.flutter.embedded_views_preview</key>
<true/>
<key>UISupportsDocumentBrowser</key>
<true/>
<key>kTCCServiceMediaLibrary</key>
<string>App need your agree, can visit your music</string>
</dict>


+ 32
- 2
lib/chat/ChatPage.dart Ver ficheiro

@@ -48,6 +48,9 @@ import 'package:chat/utils/PopUpMenu.dart' as myPop;
import 'package:chat/models/money_change.dart';
class ChatPage extends StatefulWidget {
static bool isChatPageActive=false;
final int friendId;
final int enterType; // 0默认 1图片
final dynamic enterContent;
@@ -104,6 +107,7 @@ class _ChatPageState extends State<ChatPage> {
SoundUtils().stop();
nickNameController.dispose();
super.dispose();
ChatPage.isChatPageActive =false;
}
jumpToMsg(time) async {
@@ -132,6 +136,7 @@ class _ChatPageState extends State<ChatPage> {
void initState() {
super.initState();
print('init chatpage');
ChatPage.isChatPageActive=true;
getDefaultSetting();
getUserInfo();
@@ -194,6 +199,28 @@ class _ChatPageState extends State<ChatPage> {
TranslateHKMgr().order=null;
});
if(!UserData().isTranslateUser){
var cancle = InkWell(onTap: (){Navigator.pop(context);},child: Container(
decoration: BoxDecoration(
color: const Color(0XFFC7E5FF),
borderRadius: BorderRadius.all(
Radius.circular(Constants.LittleButtonRadius))),
margin: EdgeInsets.only(top: 0, bottom: 18.5),
height: 37.5,
width: 200,
alignment: Alignment.center,
child: CountDownButton(I18n.of(context).cancel, (){Navigator.of(context).pop();},isOnlyRichText: true,countDownTime: 10,)),);
CustomUI.buildTowConfirmWithCountDown(context, '是否再来一单', '是的', (){
MsgHandler.sendAnotherOrderReq();
Navigator.of(context).pop();
}, cancle);
}
}
void _sendFile(File file) async {
@@ -336,6 +363,9 @@ class _ChatPageState extends State<ChatPage> {
);
}
List<Widget> actions = [];
int voucher = Provider.of<VoucherChangeProvider>(context).voucher;
@@ -423,7 +453,7 @@ class _ChatPageState extends State<ChatPage> {
Provider<int>.value(value: widget.friendId),
],
child: GestureDetector(
onTap: hideKeyBoard,
onTapDown: (args){hideKeyBoard();},
child: ExtendedTextSelectionPointerHandler(
///选择文字,消除弹窗
@@ -530,7 +560,7 @@ class _ChatPageState extends State<ChatPage> {
MsgHandler.sendEndTransHKOrderReq();
Navigator.of(context).pop();
},
'取消',
I18n.of(context).cancel,
(){ Navigator.of(context).pop();});
}
}else{


+ 1
- 1
lib/chat/company_server_view.dart Ver ficheiro

@@ -165,7 +165,7 @@ class _CompanyServerPageState extends State<CompanyServerPage> {
actionBarColor: "#50A7F9",
actionBarTitle: "Hibok",
allViewTitle: "",
useDetailsView: false,
useDetailsView: true,
selectCircleStrokeColor: "#000000",
),
);


+ 7
- 7
lib/chat/full_img_view.dart Ver ficheiro

@@ -1,8 +1,10 @@
import 'dart:io';
import 'dart:typed_data';
import 'package:chat/data/constants.dart';
import 'package:chat/generated/i18n.dart';
import 'package:chat/models/ChatMsg.dart';
import 'package:chat/r.dart';
import 'package:chat/utils/screen.dart';
import 'package:extended_image/extended_image.dart';
import 'package:flutter/material.dart';
@@ -98,19 +100,17 @@ class _PhotoPageState extends State<PhotoPage>
))
],
)),
Positioned(bottom: 1,child: UnconstrainedBox(child: Container( width: Screen.width,height: 95,child: Image.asset(R.assetsImagesImgCheckPhotoBg,fit: BoxFit.fill,),),),),
Positioned(
right: 10,
bottom: 10,
child: Material(child: InkWell(
right: 15,
bottom: 15,
child: Material(color: Colors.transparent,child: InkWell(
onTap: saveToGallery,
child: Container(
width: 50,
height: 50,
padding: EdgeInsets.all(5),
decoration: BoxDecoration(
color: Colors.grey.withAlpha(150),
borderRadius: BorderRadius.circular(8)),
child: Icon(Icons.save_alt, color: Colors.white70),
child: Icon( IconData(0xe680, fontFamily: Constants.IconFontFamily), color: Colors.white70,size: 40,),
)),))
],
))),);


+ 1
- 1
lib/chat/input_bar.dart Ver ficheiro

@@ -761,7 +761,7 @@ class InputBarState extends State<InputBar>
actionBarColor: "#50A7F9",
actionBarTitle: "Hibok",
allViewTitle: "",
useDetailsView: false,
useDetailsView: true,
selectCircleStrokeColor: "#000000",
),
);


+ 2
- 2
lib/generated/i18n.dart Ver ficheiro

@@ -6044,9 +6044,9 @@ class _I18n_vi_VN extends I18n {
/// "Hỗ trợ nhanh"
@override
String get real_time_helper => "Hỗ trợ nhanh";
/// "Dịch vụ dịch thuật thời gian thực"
/// "Dịch vụ dịch thuật \nthời gian thực"
@override
String get translation_butler => "Dịch vụ dịch thuật thời gian thực";
String get translation_butler => "Dịch vụ dịch thuật \nthời gian thực";
/// " Trợ lý chỉ đường"
@override
String get travel_butler => " Trợ lý chỉ đường";


+ 1
- 1
lib/home/AddProgram.dart Ver ficheiro

@@ -721,7 +721,7 @@ class _AddProgramState extends State<AddProgram> {
actionBarColor: "#50A7F9",
actionBarTitle: "Hibok",
allViewTitle: "",
useDetailsView: false,
useDetailsView: true,
selectCircleStrokeColor: "#000000",
),
);


+ 659
- 659
lib/home/ConversActionPage.dart
A apresentação das diferenças no ficheiro foi suprimida por ser demasiado grande
Ver ficheiro


+ 1
- 1
lib/home/InformUser.dart Ver ficheiro

@@ -191,7 +191,7 @@ class _InformUserPageState extends State<InformUserPage> {
actionBarColor: "#50A7F9",
actionBarTitle: "Hibok",
allViewTitle: "",
useDetailsView: false,
useDetailsView: true,
selectCircleStrokeColor: "#000000",
),
);


+ 1
- 1
lib/home/ProfilePage.dart Ver ficheiro

@@ -451,7 +451,7 @@ class _ProfilePageState extends State<ProfilePage>
actionBarColor: "#50A7F9",
actionBarTitle: "Hibok",
allViewTitle: "",
useDetailsView: false,
useDetailsView: true,
selectCircleStrokeColor: "#000000",
),
);


+ 4
- 0
lib/home/ProgramDetail.dart Ver ficheiro

@@ -8,6 +8,7 @@ import 'package:chat/utils/MessageBox.dart';
import 'package:chat/utils/MessageMgr.dart';
import 'package:chat/utils/PicSwiper.dart';
import 'package:chat/utils/app_navigator.dart';
import 'package:chat/utils/local_notification_util.dart';
import 'package:chat/utils/msgHandler.dart';
import 'package:flutter/material.dart';
import 'package:oktoast/oktoast.dart';
@@ -67,6 +68,9 @@ class _ProgramDetailPageState extends State<ProgramDetailPage> {
MessageMgr().on('update_dy', msgUpdateDy);
MessageMgr().on('refresh_list', msgRefreshList);
getData();
LocalNotificationUtil().cleanAllNotifications();
}
msgRefreshList(data) {


+ 1
- 1
lib/home/daily_bonus_page.dart Ver ficheiro

@@ -501,7 +501,7 @@ class DailyBouusState extends State with SingleTickerProviderStateMixin {
child: Text(
bean.state == 1
? I18n.of(context).have_get
: '${bean.h}${I18n.of(context).daily_translate_voucher}',
: '${bean.h}',
textScaleFactor: 1.0,
style: TextStyle(color: Colors.white, fontSize: 12),
),


+ 73
- 72
lib/home/homeMain.dart Ver ficheiro

@@ -362,79 +362,22 @@ class _HomeMainState extends State<HomeMain> {
I18n.of(context).me
];
// _navigationViews = [
// NavigationIconView(
// title: _titles[2],
// icon: IconData(
// 0xe67c,
// fontFamily: 'iconfont',
// ),
// isShowdot: true,
// iconSize: 29),
// NavigationIconView(
// title: _titles[0],
// isShowdot: true,
// iconMargin: EdgeInsets.only(top: 2),
// type: 5,
// icon: IconData(
// 0xe66e,
// fontFamily: 'iconfont',
// ),
// iconSize: 26.5),
// NavigationIconView(
// title: _titles[1],
// icon: IconData(
// 0xe656,
// fontFamily: 'iconfont',
// ),
// isCenter: true,
// iconSize: 31),
// NavigationIconView(
// title: _titles[1],
// isShowdot: true,
// icon: IconData(
// 0xe60b,
// fontFamily: 'iconfont',
// ),
// type: 6,
// iconSize: 26.5),
// NavigationIconView(
// title: _titles[3],
// icon: IconData(
// 0xe67b,
// fontFamily: 'iconfont',
// ),
// iconSize: 26.5),
// ];
//
// _pages = [
// RealTimeHelperPage(),
// FriendPage(),
// FindPage(),
// ConversActionPage(),
//// GroupChatListPage(),
// ProfilePage(
// userId: UserData().basicInfo.userId,
// ),
// ];
_navigationViews = [
NavigationIconView(
title: _titles[1],
isShowdot: true,
title: _titles[2],
icon: IconData(
0xe60b,
0xe67c,
fontFamily: 'iconfont',
),
type: 1,
iconSize: 26.5),
isShowdot: true,
iconSize: 29),
NavigationIconView(
title: _titles[0],
isShowdot: true,
iconMargin: EdgeInsets.only(top: 2),
type: 5,
icon: IconData(
0xe663,
0xe66e,
fontFamily: 'iconfont',
),
iconSize: 26.5),
@@ -446,17 +389,15 @@ class _HomeMainState extends State<HomeMain> {
),
isCenter: true,
iconSize: 31),
NavigationIconView(
title: _titles[3],
title: _titles[1],
isShowdot: true,
icon: IconData(
0xe66e,
0xe60b,
fontFamily: 'iconfont',
),
type: 4,
type: 6,
iconSize: 26.5),
NavigationIconView(
title: _titles[3],
icon: IconData(
@@ -467,16 +408,75 @@ class _HomeMainState extends State<HomeMain> {
];
_pages = [
ConversActionPage(),
// RealTimeHelperPage(),
RealTimeHelperPage(),
FriendPage(),
FindPage(),
// ConversActionPage(),
GroupChatListPage(),
ConversActionPage(),
// GroupChatListPage(),
ProfilePage(
userId: UserData().basicInfo.userId,
),
];
// _navigationViews = [
// NavigationIconView(
// title: _titles[1],
// isShowdot: true,
// icon: IconData(
// 0xe60b,
// fontFamily: 'iconfont',
// ),
// type: 1,
// iconSize: 26.5),
// NavigationIconView(
// title: _titles[0],
// isShowdot: true,
// iconMargin: EdgeInsets.only(top: 2),
// type: 5,
// icon: IconData(
// 0xe663,
// fontFamily: 'iconfont',
// ),
// iconSize: 26.5),
// NavigationIconView(
// title: _titles[1],
// icon: IconData(
// 0xe656,
// fontFamily: 'iconfont',
// ),
// isCenter: true,
// iconSize: 31),
//
// NavigationIconView(
// title: _titles[3],
// isShowdot: true,
// icon: IconData(
// 0xe66e,
// fontFamily: 'iconfont',
// ),
// type: 4,
// iconSize: 26.5),
//
// NavigationIconView(
// title: _titles[3],
// icon: IconData(
// 0xe67b,
// fontFamily: 'iconfont',
// ),
// iconSize: 26.5),
// ];
//
// _pages = [
// ConversActionPage(),
//// RealTimeHelperPage(),
// FriendPage(),
// FindPage(),
//// ConversActionPage(),
// GroupChatListPage(),
// ProfilePage(
// userId: UserData().basicInfo.userId,
// ),
// ];
}
@override
@@ -553,11 +553,12 @@ class _HomeMainState extends State<HomeMain> {
_navigationViews.map((NavigationIconView view) {
return view.item;
}).toList(),
onTap: (int index) {
onTap: (int index) async{
if (_currentIndex == index) {
//在当前页面点击不刷新
return;
}
setStatusBar();
//刷新我的界面数据
if (index == 4) {
MessageMgr().emit('update_data');


+ 1
- 1
lib/home/realtimehelper/translation_butler_page.dart Ver ficheiro

@@ -133,7 +133,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> {
print('time:$time');

int second = int.parse(time) ~/ 1000;
if((DateTime.now().millisecondsSinceEpoch ~/ 1000 - second)>8*3600){ ///超过5小时清除缓存记录
if((DateTime.now().millisecondsSinceEpoch ~/ 1000 - second)>1800){ ///超过半小时清除缓存记录
SPUtils.save(Constants.TranslationHelper,null);
return;
}


+ 5
- 4
lib/home/splash_page.dart Ver ficheiro

@@ -42,14 +42,14 @@ class SplashPageState extends State<SplashPage> {

list.add(SplashBean(
'assets/images/img_splash_4.png',
I18n.of(Constants.getCurrentContext()).translation_butler,
I18n.of(Constants.getCurrentContext()).splash_tips_content4,
I18n.of(Constants.getCurrentContext()).travel_butler,
I18n.of(Constants.getCurrentContext()).splash_tips_content5,
Color(0xFF2B79F7)));

list.add(SplashBean(
'assets/images/img_splash_5.png',
I18n.of(Constants.getCurrentContext()).travel_butler,
I18n.of(Constants.getCurrentContext()).splash_tips_content5,
I18n.of(Constants.getCurrentContext()).translation_butler,
I18n.of(Constants.getCurrentContext()).splash_tips_content4,
Color(0xFFBE58FF)));


@@ -176,6 +176,7 @@ class SplashPageState extends State<SplashPage> {
Text(
data.title,
textScaleFactor: 1.0,
textAlign: TextAlign.center,
style: TextStyle(color: data.titleColor, fontSize: 30),
),
SizedBox(


+ 2
- 0
lib/main.dart Ver ficheiro

@@ -294,6 +294,8 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
MessageMgr().emit(
'Receive AudioChat Request', MsgHandler.audioChatRequestFriendId);
}
// await FlutterStatusbarcolor.setStatusBarColor(Colors.white);
break;
case AppLifecycleState.paused: // 应用程序不可见,后台
print('切换到后台');


+ 64
- 0
lib/proto/transhousekeeper.pb.dart Ver ficheiro

@@ -377,6 +377,7 @@ class DeliveryTransHKOrderPush extends $pb.GeneratedMessage {
class CancellationTransHKOrderPush extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('CancellationTransHKOrderPush', package: const $pb.PackageName('yl_pb'))
..aOS(1, 'orderId')
..e<TransHKOrderCancellation>(2, 'type', $pb.PbFieldType.OE, TransHKOrderCancellation.TimeOut, TransHKOrderCancellation.valueOf, TransHKOrderCancellation.values)
..hasRequiredFields = false
;

@@ -398,6 +399,11 @@ class CancellationTransHKOrderPush extends $pb.GeneratedMessage {
set orderId($core.String v) { $_setString(0, v); }
$core.bool hasOrderId() => $_has(0);
void clearOrderId() => clearField(1);

TransHKOrderCancellation get type => $_getN(1);
set type(TransHKOrderCancellation v) { setField(2, v); }
$core.bool hasType() => $_has(1);
void clearType() => clearField(2);
}

class TransHKChatNotice extends $pb.GeneratedMessage {
@@ -447,3 +453,61 @@ class TransHKChatNotice extends $pb.GeneratedMessage {
void clearEmployer() => clearField(5);
}

class AnotherOrderReq extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('AnotherOrderReq', package: const $pb.PackageName('yl_pb'))
..aOS(1, 'orderId')
..hasRequiredFields = false
;

AnotherOrderReq._() : super();
factory AnotherOrderReq() => create();
factory AnotherOrderReq.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory AnotherOrderReq.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
AnotherOrderReq clone() => AnotherOrderReq()..mergeFromMessage(this);
AnotherOrderReq copyWith(void Function(AnotherOrderReq) updates) => super.copyWith((message) => updates(message as AnotherOrderReq));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static AnotherOrderReq create() => AnotherOrderReq._();
AnotherOrderReq createEmptyInstance() => create();
static $pb.PbList<AnotherOrderReq> createRepeated() => $pb.PbList<AnotherOrderReq>();
static AnotherOrderReq getDefault() => _defaultInstance ??= create()..freeze();
static AnotherOrderReq _defaultInstance;

$core.String get orderId => $_getS(0, '');
set orderId($core.String v) { $_setString(0, v); }
$core.bool hasOrderId() => $_has(0);
void clearOrderId() => clearField(1);
}

class AnotherOrderRes extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('AnotherOrderRes', package: const $pb.PackageName('yl_pb'))
..a<$core.int>(1, 'errorCode', $pb.PbFieldType.O3)
..aOS(2, 'orderId')
..hasRequiredFields = false
;

AnotherOrderRes._() : super();
factory AnotherOrderRes() => create();
factory AnotherOrderRes.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory AnotherOrderRes.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
AnotherOrderRes clone() => AnotherOrderRes()..mergeFromMessage(this);
AnotherOrderRes copyWith(void Function(AnotherOrderRes) updates) => super.copyWith((message) => updates(message as AnotherOrderRes));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static AnotherOrderRes create() => AnotherOrderRes._();
AnotherOrderRes createEmptyInstance() => create();
static $pb.PbList<AnotherOrderRes> createRepeated() => $pb.PbList<AnotherOrderRes>();
static AnotherOrderRes getDefault() => _defaultInstance ??= create()..freeze();
static AnotherOrderRes _defaultInstance;

$core.int get errorCode => $_get(0, 0);
set errorCode($core.int v) { $_setSignedInt32(0, v); }
$core.bool hasErrorCode() => $_has(0);
void clearErrorCode() => clearField(1);

$core.String get orderId => $_getS(1, '');
set orderId($core.String v) { $_setString(1, v); }
$core.bool hasOrderId() => $_has(1);
void clearOrderId() => clearField(2);
}


+ 17
- 0
lib/proto/transhousekeeper.pbenum.dart Ver ficheiro

@@ -30,6 +30,23 @@ class TransHKOrderState extends $pb.ProtobufEnum {
const TransHKOrderState._($core.int v, $core.String n) : super(v, n);
}

class TransHKOrderCancellation extends $pb.ProtobufEnum {
static const TransHKOrderCancellation TimeOut = TransHKOrderCancellation._(1, 'TimeOut');
static const TransHKOrderCancellation Rejection = TransHKOrderCancellation._(2, 'Rejection');
static const TransHKOrderCancellation ActiveCancellation = TransHKOrderCancellation._(3, 'ActiveCancellation');

static const $core.List<TransHKOrderCancellation> values = <TransHKOrderCancellation> [
TimeOut,
Rejection,
ActiveCancellation,
];

static final $core.Map<$core.int, TransHKOrderCancellation> _byValue = $pb.ProtobufEnum.initByValue(values);
static TransHKOrderCancellation valueOf($core.int value) => _byValue[value];

const TransHKOrderCancellation._($core.int v, $core.String n) : super(v, n);
}

class TransHKChatNoticeType extends $pb.ProtobufEnum {
static const TransHKChatNoticeType StartChat = TransHKChatNoticeType._(1, 'StartChat');
static const TransHKChatNoticeType EndChat = TransHKChatNoticeType._(2, 'EndChat');


+ 25
- 0
lib/proto/transhousekeeper.pbjson.dart Ver ficheiro

@@ -16,6 +16,15 @@ const TransHKOrderState$json = const {
],
};

const TransHKOrderCancellation$json = const {
'1': 'TransHKOrderCancellation',
'2': const [
const {'1': 'TimeOut', '2': 1},
const {'1': 'Rejection', '2': 2},
const {'1': 'ActiveCancellation', '2': 3},
],
};

const TransHKChatNoticeType$json = const {
'1': 'TransHKChatNoticeType',
'2': const [
@@ -117,6 +126,7 @@ const CancellationTransHKOrderPush$json = const {
'1': 'CancellationTransHKOrderPush',
'2': const [
const {'1': 'OrderId', '3': 1, '4': 1, '5': 9, '10': 'OrderId'},
const {'1': 'Type', '3': 2, '4': 1, '5': 14, '6': '.yl_pb.TransHKOrderCancellation', '10': 'Type'},
],
};

@@ -131,3 +141,18 @@ const TransHKChatNotice$json = const {
],
};

const AnotherOrderReq$json = const {
'1': 'AnotherOrderReq',
'2': const [
const {'1': 'OrderId', '3': 1, '4': 1, '5': 9, '10': 'OrderId'},
],
};

const AnotherOrderRes$json = const {
'1': 'AnotherOrderRes',
'2': const [
const {'1': 'ErrorCode', '3': 1, '4': 1, '5': 5, '10': 'ErrorCode'},
const {'1': 'OrderId', '3': 2, '4': 1, '5': 9, '10': 'OrderId'},
],
};


+ 20
- 5
lib/proto/transhousekeeper.proto Ver ficheiro

@@ -13,6 +13,11 @@ enum TransHKOrderState{
Completed = 5; //已完成
}

enum TransHKOrderCancellation {
TimeOut = 1; //超时
Rejection = 2; //绝收
ActiveCancellation = 3; //主动取消
}
enum TransHKChatNoticeType{
StartChat = 1; //开始
EndChat = 2; //结束
@@ -65,11 +70,11 @@ message EndTransHKOrderRes{
optional string OrderId = 2; //订单号
}

//翻译官设置是否接单Msg= 9
//Msg= 9 翻译官设置是否接单
message TransHKInterSetIsReceiptReq {
optional bool IsReceipt = 1; //详见错误码文档
}
//翻译官设置是否接单Msg= 10
//Msg= 10 翻译官设置是否接单
message TransHKInterSetIsReceiptRes {
optional int32 ErrorCode = 1; //详见错误码文档
optional bool IsReceipt = 2; //详见错误码文档
@@ -88,10 +93,10 @@ message DeliveryTransHKOrderPush {

//Msg= 21 订单取消推送
message CancellationTransHKOrderPush {
optional string OrderId =1; //订单号
optional string OrderId =1; //订单号s
optional TransHKOrderCancellation Type = 2;//取消原因
}


//翻译会话通告消息
message TransHKChatNotice {
optional TransHKChatNoticeType NoticeType = 1; //公告类型
@@ -99,4 +104,14 @@ message TransHKChatNotice {
repeated BaseUserInfo OperateduId = 3; //被操作用户Ids 有可能是多人
optional BaseUserInfo Inter = 4; //翻译官
optional BaseUserInfo Employer = 5; //客户
}
}

//Msg = 30 再来一单
message AnotherOrderReq {
optional string OrderId =1; //上一单的订单号
}
//Msg = 31 再来一单回应
message AnotherOrderRes {
optional int32 ErrorCode = 1; //详见错误码文档
optional string OrderId =2; //订单号
}

+ 20
- 0
lib/utils/CustomUI.dart Ver ficheiro

@@ -1289,4 +1289,24 @@ class CustomUI {
..layout();
return _textPainter.width;
}
static void buildTowConfirmWithCountDown(
BuildContext context,
String tipTitle,
String confirmButtonTitle,
confirmCallback,
cancelCountDown,
{title = ''}) {
var confirm = buildConfirmBotton(confirmButtonTitle, confirmCallback);
// var cancle = buildCancleBotton(cancleButtonTitle, cancleCallback);
buildTip(
context,
title,
buildConfirmContent(
_buildContentTip(tipTitle),
Column(
children: <Widget>[cancelCountDown, confirm],
)));
}
}

+ 17
- 2
lib/utils/count_down_button.dart Ver ficheiro

@@ -10,7 +10,8 @@ class CountDownButton extends StatefulWidget{
final Function onPress;
final int countDownTime;
final AlignmentGeometry align;
CountDownButton(this.text,this.countDownCallBack,{this.countDownTime=5*60,this.align=Alignment.center,this.onPress});
final bool isOnlyRichText;
CountDownButton(this.text,this.countDownCallBack,{this.countDownTime=5*60,this.align=Alignment.center,this.onPress,this.isOnlyRichText=false});

@override
State<StatefulWidget> createState() {
@@ -62,7 +63,21 @@ class CountDownButtonState extends State<CountDownButton> {
// ~/ 取整操作
int seconds = secondsPassed % 60;
int minutes = secondsPassed ~/ 60;
return Container(
return widget.isOnlyRichText?RichText(
maxLines: 1,
textAlign: TextAlign.center,
text: TextSpan(children: [
TextSpan(
text: widget.text,
style: TextStyle(
color: Colors.white,
fontSize: 16)),
TextSpan(
text:' ('+ getFull(minutes)+' : '+getFull(seconds)+')',
style: TextStyle(
color: Colors.white, fontSize: 13)),
])):
Container(
alignment: widget.align,
// margin: EdgeInsets.only(left: 30, right: 30, top: 20,bottom: 20),
height: 48,


+ 56
- 1
lib/utils/msgHandler.dart Ver ficheiro

@@ -1,6 +1,7 @@
import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import 'package:chat/chat/ChatPage.dart';
import 'package:chat/chat/group_chat_view.dart';
import 'package:chat/data/UserData.dart';
import 'package:chat/data/chat_data_mgr.dart';
@@ -266,6 +267,8 @@ class MsgHandler {
} else if (chat.channelType == ChatChannelType.TransHK) {
print('聊天管家消息');
isTranslateHK = true;
}else if (chat.channelType == ChatChannelType.CSD) {
print('反馈消息');
}
MsgModel msgModel;
@@ -441,6 +444,11 @@ class MsgHandler {
///接到开始翻译管家消息-打开翻译管家聊天页面
if(notice.noticeType==TransHKChatNoticeType.StartChat){
if(ChatPage.isChatPageActive){
Navigator.of(context).pop();
}
Future.delayed(Duration(seconds: 1),(){
TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY;
@@ -454,6 +462,9 @@ class MsgHandler {
}else if(notice.noticeType==TransHKChatNoticeType.EndChat){
print('chat.contentBuff cccc');
MessageMgr().emit(MessageMgr.TRANSLATE_HK_END_CHAT, friendId.id);
}
} else {
//私聊通知消息
@@ -487,6 +498,7 @@ class MsgHandler {
//print('******收到聊天消息 $time');
int sessionId = chat.targetId;
print('sessionId $sessionId');
print('chat.sendUserId ${chat.sendUserId}');
if (isGroup) {
GroupInfoMgr()
.getGroupInfo(sessionId)
@@ -495,7 +507,24 @@ class MsgHandler {
if (groupInfo != null) {
showGroup = groupInfo.messageFree == 0;
}
if (showGroup) {
bool isAt = false;///@的消息无论开不开群打扰都要显示推送
if (chat.altUserIds.length > 0) {
print('存在@消息');
msgModel.altUsers = chat.altUserIds;
var myId = UserData().basicInfo.userId;
for (var i = 0; i < msgModel.altUsers.length; i++) {
if (msgModel.altUsers[i] == myId) {
isAt = true;
}
}
}
if (showGroup || isAt) {
int nowTime = DateTime.now().millisecondsSinceEpoch;
if (nowTime - mLastClickTime < timeInterval &&
@@ -990,6 +1019,8 @@ class MsgHandler {
handlerEndTransHKOrderRes(content);
}else if(msgId==10){
handlerTransHKInterSetIsReceiptRes(content);
}else if(msgId==31){
handlerAnotherOrderRes(content);
}
break;
@@ -1307,6 +1338,7 @@ class MsgHandler {
String errorStr=I18n.of(context).translation_butler_order_failed;
switch(res.errorCode){
case 5014:
case 5014:
errorStr=I18n.of(context).translation_butler_order_failed2;
break;
@@ -1426,6 +1458,29 @@ class MsgHandler {
//用户发送再来一单请求
static sendAnotherOrderReq() {
debugPrint2('用户发送再来一单请求 orderId:${ TranslateHKMgr().orderId}');
var seq = AnotherOrderReq.create();
seq.orderId = TranslateHKMgr().orderId;
NetWork().sendMsg(ComId.TranslateOrder, 30, seq);
}
//用户发送再来一单请求回应
static handlerAnotherOrderRes(List<int> msgContent) {
debugPrint2('用户发送再来一单请求回应');
var res = AnotherOrderRes.fromBuffer(msgContent);
if (res.errorCode == 0) {
TranslateHKMgr().orderId = res.orderId;
// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
debugPrint2('用户发送再来一单请求回应成功: ');
} else {
debugPrint2('用户发送再来一单请求回应失败${res.errorCode}');
}
}
//用户主动结束翻译管家服务
static sendEndTransHKOrderReq() {


+ 81
- 75
lib/utils/wpop/w_popup_menu.dart Ver ficheiro

@@ -203,6 +203,11 @@ class _MenuPopWidgetState extends State<_MenuPopWidget> {
(_curPageChildCount - 1 + _curArrowCount) * _separatorWidth +
_curArrowWidth;

// if(widget.actions.length==1){
// _curPageWidth =_curPageWidth-200;
// }


return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
@@ -261,86 +266,87 @@ class _MenuPopWidgetState extends State<_MenuPopWidget> {
child: Container(
color: widget.backgroundColor,
height: widget.menuHeight,
),
),
Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
// 左箭头:判断是否是第一页,如果是第一页则不显示
_curPage == 0
? Container(
height: widget.menuHeight,
)
: InkWell(
onTap: () {
setState(() {
_curPage--;
});
},
child: Container(
alignment: Alignment.centerRight,
width: _arrowWidth + 3,
height: widget.menuHeight - 10,
child: Image.asset(
'assets/images/left_white.png',
fit: BoxFit.none,
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
// 左箭头:判断是否是第一页,如果是第一页则不显示
_curPage == 0
? Container(
height: widget.menuHeight,
)
: InkWell(
onTap: () {
setState(() {
_curPage--;
});
},
child: Container(
alignment: Alignment.center,
width: _arrowWidth ,
height: widget.menuHeight - 10,
child: Image.asset(
'assets/images/left_white.png',
fit: BoxFit.none,
),
),
// 左箭头:判断是否是第一页,如果是第一页则不显示
_curPage == 0
? Container(
height: widget.menuHeight,
)
: Container(
width: 1,
height: widget.menuHeight,
color: Colors.grey,
),

// 中间是ListView
_buildList(_curPageChildCount, _curPageWidth,
_curArrowWidth, _curArrowCount),

// 右箭头:判断是否有箭头,如果有就显示,没有就不显示
_curArrowCount > 0
? Container(
width: 1,
color: Colors.grey,
height: widget.menuHeight,
)
: Container(
),
// 左箭头:判断是否是第一页,如果是第一页则不显示
_curPage == 0
? Container(
height: widget.menuHeight,
)
: Container(
width: 1,
height: widget.menuHeight,
color: Colors.grey,
),

// 中间是ListView
_buildList(_curPageChildCount, _curPageWidth,
_curArrowWidth, _curArrowCount),

// 右箭头:判断是否有箭头,如果有就显示,没有就不显示
_curArrowCount > 0
? Container(
width: 1,
color: Colors.grey,
height: widget.menuHeight,
)
: Container(
height: widget.menuHeight,
),
_curArrowCount > 0
? InkWell(
onTap: () {
if ((_curPage + 1) *
widget._pageMaxChildCount <
widget.actions.length)
setState(() {
_curPage++;
});
},
child: Container(
width: _arrowWidth-4,
height: widget.menuHeight,
),
_curArrowCount > 0
? InkWell(
onTap: () {
if ((_curPage + 1) *
widget._pageMaxChildCount <
widget.actions.length)
setState(() {
_curPage++;
});
},
child: Container(
width: _arrowWidth-4,
height: widget.menuHeight,
child: Image.asset(
(_curPage + 1) *
widget
._pageMaxChildCount >=
widget.actions.length
? 'assets/images/right_gray.png'
: 'assets/images/right_white.png',
fit: BoxFit.none,
),
child: Image.asset(
(_curPage + 1) *
widget
._pageMaxChildCount >=
widget.actions.length
? 'assets/images/right_gray.png'
: 'assets/images/right_white.png',
fit: BoxFit.none,
),
)
: Container(
height: widget.menuHeight,
),
],
)
: Container(
height: widget.menuHeight,
),
],
),
),
),

],
),
),
@@ -392,7 +398,7 @@ class _MenuPopWidgetState extends State<_MenuPopWidget> {
// (_curPageChildCount - 1 + _curArrowCount) *
// _separatorWidth) /
// _curPageChildCount,
width: (text.length / (totalTxtLength) * (width)) + minPadding,
width: _curPageChildCount==1?180:(text.length / (totalTxtLength) * (width)) + minPadding,
height: widget.menuHeight,
child: Center(
child: Text(


Carregando…
Cancelar
Guardar