function 方法回调和页面

方法的回调

点击翻译,调方法,在方法的回调里面获取数据

        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}');
                    },
                  ),
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值