我有问题与futurebuilder与列表视图生成器|扑动



我尝试从API获取数据,但没有获得数据。正在获取ModelName的实例…我也无法获得snapshot.data.length的长度。. 我读了一些博客,但是没有成功。

我已经提供了下面的模型代码。请帮我摆脱这个问题。我是新手,youtube上的一些视频也很老了。

import 'dart:convert';
import 'package:chaitanya_academy/models/exam_result_model.dart';
import 'package:chaitanya_academy/screens/DetailResult.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
class ResultsScreen extends StatefulWidget {
const ResultsScreen({Key? key}) : super(key: key);
@override
State<ResultsScreen> createState() => _ResultsScreenState();
}
class _ResultsScreenState extends State<ResultsScreen> {
Future<ResultModel> getResults() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var token = await prefs.getString('token');
var response = await http.get(
Uri.parse('http://localhost:8000/api/student/results'),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': "Bearer $token",
},
);
return ResultModel.fromJson(jsonDecode(response.body));
}
@override
void initState() {
super.initState();
getResults();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('My Results')),
body: Padding(
padding: const EdgeInsets.all(18.0),
child: FutureBuilder<ResultModel>(
future: getResults(),
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data);
return ListView.builder(
itemCount: 1,
itemBuilder: (BuildContext context, int index) {
return ListTile(
contentPadding: const EdgeInsets.all(5.0),
leading: const Icon(
Icons.menu_book,
color: Colors.blueAccent,
),
// title: Text(snapshot.data[1].examId.toString()),
trailing: const Icon(Icons.visibility),
onTap: () {
// Navigator.push(context, MaterialPageRoute(builder: (context) => DetailResult()));
},
);
},
);
} else {
return const CircularProgressIndicator();
}
},
),
),
);
}
}
class ResultModel {
int? examId;
String? examName;
int? examStream;
String? createdAt;
String? updatedAt;
ResultModel(
{this.examId,
this.examName,
this.examStream,
this.createdAt,
this.updatedAt});
ResultModel.fromJson(Map<String, dynamic> json) {
examId = json['exam_id'];
examName = json['exam_name'];
examStream = json['exam_stream'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['exam_id'] = this.examId;
data['exam_name'] = this.examName;
data['exam_stream'] = this.examStream;
data['created_at'] = this.createdAt;
data['updated_at'] = this.updatedAt;
return data;
}
}

必须存储快照。通过创建其类ResultModel的对象,如下所示:ResultModel snapshotData =快照.data;那么你就可以很容易地访问snapshotData对象的各种属性