I want to display data from api to the text and it is showing blank screen and I think I did anything required, I followed this tutrial https://docs.flutter.dev/cookbook/networking/fetch-data and still it does not work for me. I tried everything,
May you please help me.
My api call below
Future<CarDetails?> signInData() async {
final prefs = await SharedPreferences.getInstance();
final String? token = prefs.getString('token');
try {
Response response = await _dio.post('$_baseUrl/api/gateway',
data: {
"ClientPackageId": "0cdd231a-d7ad-4a68-a934-d373affb5100",
"PlatformId": "ios",
"ClientUserId": "AhmedOmar",
"VinNumber": VINumber
},
options: Options(headers: {
"Content-Type": "application/json",
"Authorization": "Bearer $token",
}));
print("data");
print(response.data.toString());
print(response.statusCode);
if (response.statusCode == 200) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => const ResultsPage(),
),
);
}
else if (response.statusCode == 500) {
// call your refresh token api here and save it in shared preference
print(response.statusCode);
await getToken();
signInData();
}
return CarDetails.fromJson(jsonDecode(response.data.toString()));
} catch (e) {
print(e);
}
My other page where I wanna show the results
class ResultsPage extends StatefulWidget {
const ResultsPage({Key? key}) : super(key: key);
@override
_ResultsPageState createState() => _ResultsPageState();
}
class _ResultsPageState extends State<ResultsPage> {
//List<CarDetails> objectList = [];
late Future<CarDetails?>? objectList;
_APIState? api;
@override
void initState() {
super.initState();
objectList = api?.signInData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
//centerTitle: true,
),
body: Center(
child: FutureBuilder<CarDetails?>(
future: objectList,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data?.make??"error");
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
// By default, show a loading spinner.
return const CircularProgressIndicator();
},
),
));
}
}
My model class
class CarDetails {
String? make;
String? type;
String? model;
int? year;
String? body;
String? driveType;
String? fueType;
CarDetails(
{this.make,
this.type,
this.model,
this.year,
this.body,
this.driveType,
this.fueType});
CarDetails.fromJson(Map<String, dynamic> json) {
make = json['make'];
type = json['type'];
model = json['model'];
year = json['year'];
body = json['body'];
driveType = json['drive_type'];
fueType = json['fue_type'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['make'] = this.make;
data['type'] = this.type;
data['model'] = this.model;
data['year'] = this.year;
data['body'] = this.body;
data['drive_type'] = this.driveType;
data['fue_type'] = this.fueType;
return data;
}
}
The problem is you are replacing the widget in your navigator stack when you get success.
Future<CarDetails?> signInData() async {
final prefs = await SharedPreferences.getInstance();
final String? token = prefs.getString('token');
try {
Response response = await _dio.post('$_baseUrl/api/gateway',
data: {
"ClientPackageId": "0cdd231a-d7ad-4a68-a934-d373affb5100",
"PlatformId": "ios",
"ClientUserId": "AhmedOmar",
"VinNumber": VINumber
},
options: Options(headers: {
"Content-Type": "application/json",
"Authorization": "Bearer $token",
}));
print("data");
print(response.data.toString());
print(response.statusCode);
if (response.statusCode == 200) {
//Get rid of this
//Navigator.of(context).pushReplacement(
// MaterialPageRoute(
// builder: (context) => const ResultsPage(),
// ),
//);
// Return your future here
return CarDetails.fromJson(jsonDecode(response.data.toString()));
}
else if (response.statusCode == 500) {
// call your refresh token api here and save it in shared preference
print(response.statusCode);
await getToken();
signInData();
}
} catch (e) {
print(e);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.