You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用Translator时为何Future<Translation>不能赋值给String类型参数

问题根因

translator.translate() 是异步方法,返回的是Future<Translation>类型,而非直接返回翻译结果。你在自定义translate函数里是用.then()等待异步执行完成后才拿结果更新状态,所以能正常运行;但在build方法里直接调用text.translate(to: 'es').toString()是直接对未完成的Future对象做toString转换,自然没法拿到正确的字符串结果,还会触发类型匹配错误。

解决方案

方案1:使用FutureBuilder在build中直接处理异步渲染

该方案最贴合你想要在build里直接调用翻译的需求:

class _TranslateState extends State<Translate> {
  GoogleTranslator translator = GoogleTranslator();
  String originalText = 'Hello , my name is Mehdi';

  @override
  Widget build(BuildContext context) {
    return Container(
      child: FutureBuilder<Translation>(
        // 传入异步翻译任务
        future: translator.translate(originalText, to: 'es'),
        builder: (context, snapshot) {
          // 加载中显示占位
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Text('翻译中...');
          }
          // 加载完成返回翻译结果
          if (snapshot.hasData) {
            return Text(snapshot.data!.toString());
          }
          // 报错显示错误提示
          return const Text('翻译失败');
        },
      ),
    );
  }
}

方案2:提前触发翻译、用状态变量存储结果

和你现有translate方法的逻辑一致,把翻译结果提前存到状态里,build直接读状态变量即可,适合不需要在build时动态切换翻译目标语言的场景:

class _TranslateState extends State<Translate> {
  GoogleTranslator translator = GoogleTranslator();
  String originalText = 'Hello , my name is Mehdi';
  // 存储翻译后的西班牙语文本
  String translatedEsText = '';

  @override
  void initState() {
    super.initState();
    // 页面初始化时就触发翻译
    translateToEs();
  }

  void translateToEs() {
    translator.translate(originalText, to: 'es').then((output) {
      setState(() {
        translatedEsText = output.toString();
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text(translatedEsText.isEmpty ? '加载中...' : translatedEsText),
    );
  }
}

内容的提问来源于stack exchange,提问作者Mehdi EL Garda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:42:02