方法的回调
点击翻译,调方法,在方法的回调里面获取数据
CommonMethodCall().getTranslateText(
originalText: widget.originalText,
code: Get.deviceLocale?.languageCode ?? 'vn',
onSuccess: (data) {
hasPress = false;
if (data != '') {
//显示翻译气泡和词条
widget.translateCallBack(showTranslate, data);
LogEvent.logEvent(
name: EventKey.KEY_IM_TRANS_CLICK,
parameters: {
'user_id': Global.userId,
'translated': widget.originalText,
'original': data
});
}
PrintUtil.prints('获取翻译数据-最终回调数据给button-${data}');
mySetState(() {});
});
//因为方法里面有网络请求异步返回数据,所以用回调的方法方便获取数据,如果用
//获取客户端本地-服务端-谷歌翻译
getTranslateText(
{required String originalText,
required String code,
required Function(String translateData) onSuccess}) async {
String appText = '';
if (originalText != '' || code != '') {
appText = CommonMethodCall()
.getTranslateByCode(originalText: originalText, code: code);
PrintUtil.prints('获取翻译数据-本地翻译-$appText');
if (appText != '') {
onSuccess(appText);
return;
}
PrintUtil.prints('获取翻译数据-开始请求接口');
CommonMethodCall().getTranslateHttp(
originalText: originalText,
code: code,
onSuccess: (translateData) {
onSuccess(translateData);
});
}
}
///请求接口获取翻译数据
getTranslateHttp(
{required String originalText,
required String code,
required Function(String translateData) onSuccess}) {
RxHttp<responseHttp.Response>()
..init()
..setBaseUrl(Api.BUSINESS_BASE_API)
..setPath(Api.USER_TRANSLATE_DETAIL)
..setCacheMode(CacheMode.NO_CACHE)
..setParams({"content": originalText})
..setJsonTransFrom((data) {
PrintUtil.prints('获取翻译信息 :==> $data');
return responseHttp.Response.fromJson(json.decoder.convert(data));
})
..call(
NetCallback(onNetFinish: (response) async {
if (response.code == 200) {
TranslateModel translateModel =
TranslateModel.fromJson(response.data);
PrintUtil.prints(
'获取翻译数据-接口数据-${translateModel.content_translate}');
if (translateModel.content_translate != null &&
translateModel.content_translate != '') {
PrintUtil.prints(
'获取翻译数据-接口数据不为空-${translateModel.content_translate}');
//返回词条
onSuccess(translateModel.content_translate ?? '');
//保存在本地
CommonMethodCall().saveTranslate(
originalText: originalText,
code: code,
translateText: '${translateModel.content_translate}');
} else {
PrintUtil.prints(
'获取翻译数据-接口数据为空-${translateModel.content_translate} - 开始请求谷歌翻译');
getGoogleTranslate(
originalText: originalText,
code: code,
onSuccess: onSuccess);
}
}
}, onNetError: (errorCode, error) async {
PrintUtil.prints('获取翻译数据-网络错误时- 开始请求谷歌翻译');
showToast(S.current.no_translation);
getGoogleTranslate(
originalText: originalText, code: code, onSuccess: onSuccess);
}),
server: Servers.businessServer);
}
//调用谷歌翻译
getGoogleTranslate(
{required String originalText,
required String code,
required Function(String translateData) onSuccess}) async {
//使用谷歌翻译,返回词条,保存在本地,上报接口
String translatedText = '';
translatedText =
await TranslationService().translateText(originalText, code);
PrintUtil.prints('获取翻译数据- 谷歌翻译-$translatedText');
if (translatedText != '') {
//返回词条
onSuccess(translatedText);
//保存在本地
CommonMethodCall().saveTranslate(
originalText: originalText,
code: code,
translateText: translatedText);
//上报接口
CommonMethodCall().postTranslateHttp(
originalText: originalText, translateData: translatedText);
} else {
//翻译失败
showToast(S.current.no_translation);
}
}
页面的回调
Function(bool, String) translateCallBack;这个就是回调
import 'package:base_utils/base_utils.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import '../../../common/Global.dart';
import '../../../common/common_method_call.dart';
import '../../../logevent/key_events.dart';
import '../../../logevent/log_event.dart';
//翻译按钮
class ImTranslateButton extends StatefulWidget {
Function(bool, String) translateCallBack;
String originalText;
ImTranslateButton({
Key? key,
required this.translateCallBack,
required this.originalText,
}) : super(key: key);
@override
State<StatefulWidget> createState() => ImTranslateButtonState();
}
class ImTranslateButtonState extends State<ImTranslateButton> {
//回调是否显示翻译气泡
bool showTranslate = false;
//防止多点
bool hasPress = false;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
mySetState(callBack) {
if (mounted) {
setState(() {
callBack();
});
}
}
//获取翻译
getTranslate() {
//防止多点
if (hasPress == false) {
//成功回调或者取消显示气泡才可以再点击
hasPress = true;
//按钮改变
showTranslate = !showTranslate;
//获取翻译,显示翻译气泡
if (showTranslate == true) {
CommonMethodCall().getTranslateText(
originalText: widget.originalText,
code: Get.deviceLocale?.languageCode ?? 'vn',
onSuccess: (data) {
hasPress = false;
if (data != '') {
//显示翻译气泡和词条
widget.translateCallBack(showTranslate, data);
LogEvent.logEvent(
name: EventKey.KEY_IM_TRANS_CLICK,
parameters: {
'user_id': Global.userId,
'translated': widget.originalText,
'original': data
});
}
PrintUtil.prints('获取翻译数据-最终回调数据给button-${data}');
mySetState(() {});
});
} else {
hasPress = false;
//取消显示气泡
widget.translateCallBack(showTranslate, '');
}
mySetState(() {});
} else {
print('获取翻译数据-还没有回调回来');
}
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
getTranslate();
},
child: Container(
height: WidgetAdaptation.getWidth(40),
padding: EdgeInsets.only(left: WidgetAdaptation.getWidth(3)),
margin: EdgeInsets.only(top: WidgetAdaptation.getWidth(5)),
decoration: const BoxDecoration(),
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
alignment: Alignment.center,
height: WidgetAdaptation.getWidth(24),
width: WidgetAdaptation.getWidth(24),
child: Image(
width: WidgetAdaptation.getWidth(24),
height: WidgetAdaptation.getWidth(24),
image: AssetImage(showTranslate
? 'assets/images/untranslated.png'
: 'assets/images/translated.png')),
),
],
),
),
);
}
}
调用方法:
ImTranslateButton(
originalText:
widget.wsImMessage.messageBody?.msgContent ?? '',
translateCallBack:
(bool showTranslate, String translateData) {//回调
showTranslateView = showTranslate;
translateText = translateData;
//是否显示翻译文本
_checkTranslateTextVisibility();
mySetState(() {});
PrintUtil.prints('是否显示翻译${showTranslate}');
},
),