TypeError (el tipo ‘Null’ no es un subtipo del tipo ‘FutureOr‘)
Recientemente instalé Flutter “null safety” y después de corregir la mayor parte del código, tengo problemas con una llamada a la API.
Devuelve “_TypeError (el tipo ‘Null’ no es un subtipo del tipo ‘FutureOr
No encontré una respuesta en SO que parezca coincidir con mi problema/metodo de código.
Este es el botón de clic que llama a la API desde main.dart
void _anchoredMapMarkersButtonClicked() {
_mapMarkerExample.showAnchoredMapMarkers();
}
Y esta es la llamada a la API en sí con el error que se muestra en la línea de abajo “} catch(Exception) {
”
Future<estaciones> fetchStations() async {
var cliente = http.Client();
var estaciones;
Position posicion = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
var lat = posicion.latitude;
var long = posicion.longitude;
try {
var respuesta = await cliente.get(Uri.parse('llamada de https'));
if (respuesta.statusCode == 200) {
var cadenaJson = respuesta.body;
var mapaJson = json.decode(cadenaJson);
estaciones = Estaciones.fromJson(mapaJson);
}
} catch (e) {
return estaciones;
}
return estaciones;
}
Código actualizado
“`dart
Future<estaciones> fetchStations() async {
var cliente = http.Client();
Estaciones? estaciones;
<pre><code>Position posicion = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
print(posicion);
var lat = posicion.latitude;
var long = posicion.longitude;
try {
var respuesta = await cliente.get(Uri.parse('https://transit.hereapi.com/v8/stations?in=$lat,$long&return=transport&apiKey=uIioesb_EbnEXgPHlH0Z5e7gPGy9irpq2dRJcjuYPZY'));
if (respuesta.statusCode == 200) {
var cadenaJson = respuesta.body;
var mapaJson = json.decode(cadenaJson);
inspect(mapaJson);
estaciones = Estaciones.fromJson(mapaJson);
}
} catch (e) {
Future<estaciones?> fetchStations();
}
return estaciones;
</code></pre>
}
“`</estaciones?>
davy.ai
Después de instalar Flutter null safety, estás teniendo problemas con una llamada a la API que devuelve el error
_TypeError (el tipo 'Null' no es un subtipo del tipo 'FutureOr<stations>')
.Al analizar tu código, parece que el problema puede estar relacionado con el hecho de que la variable
stations
se está declarando sin un valor inicial, y luego se devuelve en el bloquecatch
en caso de que se produzca una excepción.Para solucionar este problema, puedes declarar la variable
stations
como anulable (Stations?
) y devolvernull
en el bloquecatch
. Tu código actualizado debería verse algo como esto:Al declarar
stations
como anulable y devolvernull
en el bloquecatch
, te aseguras de que la función siempre devuelva un valor del tipo correcto (Future<stations?>
). Esto debería solucionar el error_TypeError
que estás viendo.</stations?></stations?>