为什么我不能使用翻译器插件将类型 'Translation' 分配给类型 'String'?

Why can I not assign type 'Translation' to type 'String' using translator plugin?

我正在构建一个翻译应用程序,但在将最终翻译分配给存储该翻译的变量时遇到困难,因为我想在其他地方使用它。代码:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:translator/translator.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Translator',
      home: MyHomePage(title: 'Translator'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  TextEditingController textController = TextEditingController();

  var translatedPhrase = "";
  var translator = GoogleTranslator();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold (
        appBar: AppBar(
          centerTitle: true,
          backgroundColor: Colors.green[100],
          title: const Text(
            "What Are You Saying In Spanish?",
            style: TextStyle(
            fontSize: 20.0,
            color: Colors.black,
            fontWeight: FontWeight.w600,
            ),
          ),
        ),
        body: Center(
          child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Flexible(
              flex: 1,
              child: Container(
                width: double.infinity,
                height: double.infinity,
                color: Colors.lightBlue,
                child: Column(
                  children: <Widget>[
                    TextField(
                      controller: textController,
                      
                    ),
                    MaterialButton(
                      child: const Text("Translate"),
                      color: Colors.white,
                      onPressed: () {
                        setState(() {
                          // ignore: non_constant_identifier_names
                          translator.translate(textController.text, from: "en", to: "es").then((t) {
                            setState(() {
                              translatedPhrase = t;
                            });
                          });
                        });
                      },
                    ),
                  ],
                ),
              ),
            ),
            Flexible(
              flex: 1,
              child: Container(
                width: double.infinity,
                height: double.infinity,
                color: Colors.grey,
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Text(
                      translatedPhrase,
                      style: const TextStyle(
                        fontSize: 20,
                      ),
                    ),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget> [
                        MaterialButton(
                          child: const Icon(Icons.clear),
                          onPressed: () {
                            setState(() {
                              translatedPhrase = "";
                              textController.text = "";
                            });
                          },
                        ),
                        MaterialButton(
                          child: const Icon(Icons.content_copy),
                          onPressed: () {
                            Clipboard.setData(ClipboardData(text: translatedPhrase));
                          },
                        ),
                      ],
                    )
                  ],
                ),
              ),
            ),
          ],
          ),
        ),
      ),
    );
  }
}

我收到错误消息“类型 'Translation' 的值无法分配给类型 'String' 的变量。尝试更改变量的类型,或强制转换右手输入 'String'。”在第 77 行(translatedPhrase = t;)。基本上,我只是想 help/advice 了解如何让 Materialbutton 工作以执行翻译功能。谢谢!

尝试使用以下代码,希望您能找到解决方案。

   GoogleTranslator translator = GoogleTranslator();
              await translator
                  .translate(textController.text, from: 'en', to: 'es')
                  .then((value) {
                translatedPhrase = value.toString();
                setState(() {});
              });

translate 方法 returns 一个 Translation 对象,因此您不能将其分配给字符串。 Translation 对象有一个 属性 text.

因此您的代码应如下所示:

translator.translate(textController.text, from: "en", to: "es").then((t) {
                            setState(() {
                              translatedPhrase = t.text;
                            });
                          });