I am using translator package for automatically translate the String value in the Text widget, but my codes are not working.. just returning null.
Codes:
Future<String> translate(String input, String to) async {
final translator = GoogleTranslator();
var translation = await translator.translate(input, from: 'en', to: to);
return translation.text;
}
class TranslatedText extends StatefulWidget {
String data;
String to;
TranslatedText({Key? key, required this.data, required this.to}) : super(key: key);
@override
State<TranslatedText> createState() => _TranslatedTextState();
}
class _TranslatedTextState extends State<TranslatedText> {
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: MainController().translate(widget.data, widget.to),
builder: (BuildContext c, AsyncSnapshot<String> snapshot) {
return Text('${snapshot.data}');
});
}
}
TranslatedText(data: "Egg", to: "es"),
It's a common behavior for FutureBuilder. It resolves in the future and returns a response (snapshot) after a while, so you need to check the snapshot first and structure your code accordingly. Like:
FutureBuilder(
future: MainController().translate(widget.data, widget.to),
builder: (BuildContext c, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
} else {
if (snapshot.hasData) {
var result = snapshot.data as String;
return Text(result);
} else if (snapshot.hasError) {
return Text('An error occurred');
} else {
return Text('No data returned from API');
}
}
});