Search code examples
flutternull

snapshot.data returing null in Flutter. Using in Translator package


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"),

Solution

  • 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');
              }
            }
          });
    

    FutureBuilder doc