Javascript snapshot.data不为null,但不显示数据
我的快照。数据不为空。当我打印响应时,它会显示数据。但在Flitter应用程序中,它没有显示数据。它只是从返回新循环压缩机指示器()中出现一个旋转的轮子。请帮忙Javascript snapshot.data不为null,但不显示数据,javascript,rest,flutter,http,dart,Javascript,Rest,Flutter,Http,Dart,我的快照。数据不为空。当我打印响应时,它会显示数据。但在Flitter应用程序中,它没有显示数据。它只是从返回新循环压缩机指示器()中出现一个旋转的轮子。请帮忙 import 'package:flutter/material.dart'; import 'package:notenverwaltung/UI/Fach/fach_page.dart'; import 'package:notenverwaltung/models/global.dart'; import 'dart:async'
import 'package:flutter/material.dart';
import 'package:notenverwaltung/UI/Fach/fach_page.dart';
import 'package:notenverwaltung/models/global.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
//import 'package:plant_app/screens/details/details_screen.dart';
class SemesterModel {
SemesterModel({this.id, this.name, this.durchschnitt, this.jahr, this.notiz});
final int id;
String name;
double durchschnitt;
String jahr;
String notiz;
}
class Semester extends StatelessWidget {
//SemesterModel model;
static const _semesterUrl = 'http://10.0.2.2:8888/semester';
static final _headers = {'Content-Type': 'application/json'};
const Semester({
Key key,
}) : super(key: key);
Future<List<SemesterModel>> getSemester() async {
final response = await http.get(_semesterUrl);
//print(response.body);
if (response.statusCode == 200) {
List responseJson = json.decode(response.body.toString());
List<SemesterModel> semesterList = createSemesterList(responseJson);
print(semesterList);
for (int i = 0; i < semesterList.length; i++) {
print(semesterList[i].id);
print(semesterList[i].name);
print(semesterList[i].durchschnitt);
print(semesterList[i].jahr);
print(semesterList[i].notiz);
}
return semesterList;
} else {
throw Exception('Failed to load note');
}
}
List<SemesterModel> createSemesterList(List data) {
List<SemesterModel> list = new List();
//print(data);
for (int i = 0; i < data.length; i++) {
int id = data[i]["id"];
String name = data[i]["name"];
double durchschnitt = data[i]["durchschnitt"];
String jahr = data[i]["jahr"];
String notiz = data[i]["notiz"];
SemesterModel semesterObject = new SemesterModel(
id: id,
name: name,
durchschnitt: durchschnitt,
jahr: jahr,
notiz: notiz);
list.add(semesterObject);
}
return list;
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: new FutureBuilder(
future: getSemester(),
builder: (context, snapshot) {
if (snapshot.data == null) {
return Container(
child: Container(
child: Text("Loading..."),
),
);
} else {
print(snapshot.data);
Expanded(
child: new ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
return new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SemesterCard(
semesterName: snapshot.data[index].name,
year: snapshot.data[index].jahr,
semesterAvg: snapshot.data[index].durchschnitt,
press: () {
Navigator.push(
context,
MaterialPageRoute(
//DetailsScreen()
builder: (context) => FachScreen(),
),
);
},
),
]);
}));
}
// }
// By default, show a loading spinner
return new CircularProgressIndicator();
},
));
}
}
导入“包装:颤振/材料.省道”;
导入“package:notenverwaltung/UI/Fach/Fach_page.dart”;
导入“包:notenverwaltung/models/global.dart”;
导入“dart:async”;
将“package:http/http.dart”导入为http;
导入“dart:convert”;
//导入“程序包:plant_应用程序/屏幕/详细信息/详细信息_屏幕.dart”;
类同态模型{
SemesterModel({this.id,this.name,this.durchchnitt,this.jahr,this.notiz});
最终int id;
字符串名;
双杜氏;
弦贾哈尔;
字符串notiz;
}
班级学期扩展无状态小部件{
//semester模型;
静态常数http://10.0.2.2:8888/semester';
静态最终_头={'Content-Type':'application/json'};
常数学期({
关键点,
}):super(key:key);
Future getSerm()异步{
最终响应=等待http.get(\u semesterUrl);
//打印(响应.正文);
如果(response.statusCode==200){
List responseJson=json.decode(response.body.toString());
List-semesterList=createSemesterList(responseJson);
打印(学期表);
对于(int i=0;iFachScreen(),
),
);
},
),
]);
}));
}
// }
//默认情况下,显示加载微调器
返回新的循环ProgressIndicator();
},
));
}
}
学期卡类别:
class SemesterCard extends StatelessWidget {
const SemesterCard({
Key key,
this.semesterName,
this.year,
this.semesterAvg,
this.press,
}) : super(key: key);
final String semesterName, year;
final double semesterAvg;
final Function press;
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Container(
margin: EdgeInsets.only(
left: kDefaultPadding,
top: kDefaultPadding / 2,
bottom: kDefaultPadding / 2,
),
width: size.width * 0.9,
child: Column(
children: <Widget>[
GestureDetector(
onTap: press,
child: Container(
padding: EdgeInsets.all(kDefaultPadding / 2),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(10),
bottomRight: Radius.circular(10),
topLeft: Radius.circular(10),
topRight: Radius.circular(10),
),
boxShadow: [
BoxShadow(
offset: Offset(0, 10),
blurRadius: 50,
color: kPrimaryColor.withOpacity(0.23),
),
],
),
child: Row(
children: <Widget>[
RichText(
text: TextSpan(
children: [
TextSpan(
text: "$semesterName\n".toUpperCase(),
style: Theme.of(context).textTheme.button),
TextSpan(
text: "$year".toUpperCase(),
style: TextStyle(
color: kPrimaryColor.withOpacity(0.5),
),
),
],
),
),
Spacer(),
Text('$semesterAvg',
style: Theme.of(context).textTheme.button.copyWith(
color: ((this.semesterAvg < 4.0)
? kTextRed
: (this.semesterAvg < 5.0 &&
this.semesterAvg > 4.0)
? kTextYellow
: kTextGreen),
))
],
),
),
)
],
),
);
}
}
class SemesterCard扩展了无状态小部件{
常量符号卡({
关键点,
这是我的名字,
今年,,
这是semesterAvg,
本报,
}):super(key:key);
最终字符串semesterName,年份;
最终双半平均值;
最终功能压力机;
@凌驾
小部件构建(构建上下文){
Size Size=MediaQuery.of(context).Size;
返回容器(
页边距:仅限边距(
左:kDefaultPadding,
顶部:kDefaultPadding/2,
底部:kDefaultPadding/2,
),
宽度:size.width*0.9,
子:列(
儿童:[
手势检测器(
onTap:新闻界,
子:容器(
填充:EdgeInsets.all(kDefaultPadding/2),
装饰:盒子装饰(
颜色:颜色,白色,
borderRadius:仅限borderRadius(
左下角:半径。圆形(10),
右下角:半径。圆形(10),
左上:半径。圆形(10),
右上角:半径。圆形(10),
),
boxShadow:[
箱形阴影(
偏移量:偏移量(0,10),
半径:50,
颜色:kPrimaryColor。不透明度(0.23),
),
],
),
孩子:排(
儿童:[
RichText(
text:TextSpan(
儿童:[
TextSpan(
文本:“$semesterName\n”.toUpperCase(),
样式:Theme.of(context.textTheme.button),
TextSpan(
文本:“$year”。toUpperCase(),
样式:TextStyle(
颜色:kPrimaryColor。不透明度(0.5),
),