I am trying to get the weather of a location as a result of api call to the OpenWeatherApi. The async function getLocationAndWeatherData() is used to get the data. Now after getting the data, I need to send this data to a new screen. So I've used the arguments parameter. Now, when I use the Navigator.pushNamed() after getting the weather data, I'm getting the warning as mentioned in the question. So what's the workaround?
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import '../services/location.dart';
import '../services/networking.dart';
class LoadingScreen extends StatefulWidget {
@override
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
@override
void initState() {
super.initState();
}
bool pressed = false;
Widget loadingAndNext() {
setState(() {
pressed = false;
});
return Center(
child: SpinKitDoubleBounce(
color: Colors.white,
size: 50.0,
),
);
}
Widget mainScreen() {
return Center(
child: TextButton(
onPressed: () {
setState(() {
pressed = true;
getLocationAndWeatherData();
});
},
child: Container(
padding: EdgeInsets.all(18.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Colors.white,
),
child: Text("Get Location"),
),
),
);
}
Future<dynamic> getLocationAndWeatherData() async {
Location location = Location();
await location.getCurrentLocation();
double lat = location.getLatitude();
double lon = location.getLongitude();
NetworkHelper networkHelper = NetworkHelper(lat: lat, lon: lon);
var x = await networkHelper.getData();
Navigator.pushNamed(context, "/location", arguments: {'weatherData': x});
pressed = false;
}
@override
Widget build(BuildContext context) {
return Scaffold(body: !pressed ? mainScreen() : loadingAndNext());
}
}
After awaiting for the result in getLocationAndWeatherData(),when I use the Navigator.pushNamed(),I get a warning that I shouldn't use BuildContexts here. If I use this method in setState, I need it to be asynchronous. Can I use async and await in setState? If not, how do I get rid of this warning?