Hibok
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

131 rader
4.0 KiB

  1. import 'package:chat/data/UserData.dart';
  2. import 'package:chat/data/constants.dart';
  3. import 'package:chat/generated/i18n.dart';
  4. import 'package:chat/utils/HttpUtil.dart';
  5. import 'package:chat/utils/MessageMgr.dart';
  6. import 'package:chat/utils/msgHandler.dart';
  7. import 'package:chat/utils/screen.dart';
  8. import 'package:flutter/material.dart';
  9. import 'package:oktoast/oktoast.dart';
  10. import 'package:chat/proto/all.pbserver.dart';
  11. // class TranslateState {
  12. // static const int NoPerson = 0; //没有翻译人员在线
  13. // static const int SameLan = 1; //同一语言
  14. // static const int Unopen = 2; //没有开启人工翻译
  15. // static const int Opend = 3; //已经开启人工翻译
  16. // }
  17. class TranslateSateWidget extends StatefulWidget {
  18. final int friendId;
  19. TranslateSateWidget({this.friendId});
  20. @override
  21. _TranslateSateWidgetState createState() => _TranslateSateWidgetState();
  22. }
  23. class _TranslateSateWidgetState extends State<TranslateSateWidget> {
  24. //翻译相关
  25. TranslateState translateStatus = TranslateState.SameLan;
  26. @override
  27. void initState() {
  28. super.initState();
  29. getTranslateState();
  30. MessageMgr().on("Update Translate State", updateTranslateState);
  31. }
  32. @override
  33. void dispose() {
  34. MessageMgr().off("Update Translate State", updateTranslateState);
  35. super.dispose();
  36. }
  37. @override
  38. Widget build(BuildContext context) {
  39. Color transColor = Colors.grey;
  40. if (translateStatus == TranslateState.Opend) {
  41. transColor = Constants.ConfrimButtonColor;
  42. } else if (translateStatus == TranslateState.Unopen) {
  43. transColor = Constants.BlackTextColor;
  44. }
  45. bool switchTrans = translateStatus == TranslateState.Unopen ||
  46. translateStatus == TranslateState.Opend;
  47. if (!switchTrans) {
  48. return Container();
  49. }
  50. return Center(
  51. child: InkWell(
  52. child: Container(
  53. decoration: BoxDecoration(
  54. border: Border.all(color: transColor),
  55. borderRadius: BorderRadius.circular(3),
  56. ),
  57. padding: EdgeInsets.symmetric(horizontal: 7, vertical: 2),
  58. child: fixedText(I18n.of(context).translate,
  59. fontSize: 11, color: transColor)),
  60. onTap: () async {
  61. if (UserData().isSuperVip) {
  62. print('开启/关闭人工翻译');
  63. switchTranslateState();
  64. } else {
  65. showToast(I18n.of(context).need_svip);
  66. }
  67. }));
  68. }
  69. //更改人工翻译状态
  70. switchTranslateState() async {
  71. TranslateState newState;
  72. if (translateStatus == TranslateState.Opend) {
  73. newState = TranslateState.Unopen;
  74. } else {
  75. newState = TranslateState.Opend;
  76. }
  77. bool res = await HttpUtil().updateTranslateState(
  78. widget.friendId, newState == TranslateState.Opend);
  79. if (res) {
  80. translateStatus = newState;
  81. if (mounted) {
  82. setState(() {});
  83. }
  84. MsgHandler.swtichTranslateState(newState);
  85. }
  86. }
  87. updateTranslateState(transArgs) {
  88. print('切换人工翻译');
  89. if (transArgs.hTransl == TranslateState.Opend &&
  90. translateStatus != transArgs.hTransl) {
  91. showToast(I18n.of(context).translate_on);
  92. } else if (transArgs.hTransl == TranslateState.Unopen) {
  93. //showToast(I18n.of(context).translate_off);
  94. }
  95. translateStatus = transArgs.hTransl;
  96. if (mounted) {
  97. setState(() {});
  98. }
  99. }
  100. //获取人工翻译的状态
  101. Future getTranslateState() async {
  102. print('~~~~~~~~~~~获取聊天翻译状态~~~~~~~~~~~~~~');
  103. Map tranObj = await HttpUtil().getTranslateState(widget.friendId);
  104. if (tranObj != null) {
  105. int status = tranObj['status'];
  106. translateStatus = TranslateState.valueOf(status);
  107. //同步双方翻译状态
  108. MsgHandler.swtichTranslateState(translateStatus);
  109. if (mounted) {
  110. setState(() {});
  111. }
  112. }
  113. }
  114. }