Как исправить 'String не является подтипом типа widget'? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь использовать библиотеку GoogleTranslator для перевода входного текста, но я получил ошибку, в которой говорится, что тип String не является подтипом типа Widget

Я попытался создать функцию, которая получит текст и вернет переведенный текст, и использовал виджет в теле приложения.

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

void main() => runApp(MyApp());

Widget translator(String input) {
  GoogleTranslator translator = GoogleTranslator();

  String translation = translator
      .translate("I would buy a car, if I had money.", from: 'en', to: 'ar')
      .toString();
  return translation as Widget;
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Translator'),
        ),
        body: Center(
          child: translator("Hello World"),
        ),
      ),
    );
  }
}

Я ожидаю, что вывод будет в переведенном тексте в центре экрана

1 Ответ

0 голосов
/ 22 января 2019
return translation as Widget;

должно быть

return Text(translation);

обновление

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Translator'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final _translations = <String,String>{};

  String translator(String input) {
    if(_translations.containsKey(input)) {
      return _translations[input];
    } else {
      _translate(input);
      return input;
    }
  }

  Future<void> _translate(String input) async { 
    GoogleTranslator translator = GoogleTranslator();

    String translation = await translator
        .translate("I would buy a car, if I had money.", from: 'en', to: 'ar');
    setState(() => _translations[input] = translation);
  }

  @override
  Widget build(BuildContext context) {
    return Text(translator("Hello World"));
  }
}
...