Hibok
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

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