Home > Back-end >  How to access future content
How to access future content

Time:12-03

I have this function that is working inside a future builder:

Future<Data> fetchData(String barCode, String url) async {
  final response = await http.get(Uri.parse(url   barCode));

  Map<String, dynamic> novoJson = json.decode(utf8.decode(response.bodyBytes));
  novoJson.forEach((key, value) {
    if (value == null) {
      novoJson.update(key, (value) => "Não encontrado");
    }
  });

  if (response.statusCode == 200) {
    return Data.fromJson(novoJson);
  } else {
    throw Exception('Failed to load album');
  }
}

class Data {
  final Map<String, dynamic> response;

  Data({required this.response});

  factory Data.fromJson(Map<String, dynamic> json) {
    return Data(response: json);
  }
}

Now i'm trying to access the json it returns inside a ElevatedButton, like this:

onPressed: () {
                if (_formKey.currentState!.validate()) {
                  var futureData = fetchData(myController.text, args.url);
                  showDialog(
                      context: context,
                      builder: (BuildContext context) {
                        return AlertDialog(title: animacaoRespostaApi());
                      });
                  futureData.whenComplete(() {
                    Navigator.of(context).pop();
                    print(futureData);
                    return Navigator.pushNamed(context, args.rota, arguments: ParametrosRetornoConsulta(myController.text, args.url));
                  });
                }
              }

But when print it I get an instance of Future instead of the object, and I can't access it's content with futureData['id'] for example. How can I make futureData stop being an Future and become a iterable object ?

CodePudding user response:

Future<Data> fetchData is Future, you need to use await for data.


onPressed: () async {
                if (_formKey.currentState!.validate()) {
                  var futureData = await fetchData(myController.text, args.url);

  • Related