【发布时间】:2019-04-16 17:49:36
【问题描述】:
我在从服务器 API 获取数据时遇到问题。结果返回一个空值。谁能帮我解决它?谢谢你,非常感谢。
class TrackingPage extends StatefulWidget {
@override
_TrackingPageState createState() => _TrackingPageState();
}
class _TrackingPageState extends State<TrackingPage> {
_fetchPost() {
API.fetchPost().then((response) {
setState(() {
return Cargo.fromJson(response.body);
});
});
}
initState() {
super.initState();
_fetchPost();
}
dispose() {
super.dispose();
}
Widget _trackingpg() {
return Container(
child: FutureBuilder<Cargo>(
future: _fetchPost(),
builder: (context, snapshot) {
Text(snapshot.data.status);
},
));
}
}
这是我的 API 类
class API{
static Future fetchPost(){
var url = baseUrl;
return http.get(url);
}
}
PODO 类
Cargo cargoFromJson(String str) {
final jsonData = json.decode(str);
return Cargo.fromJson(jsonData);
}
String cargoToJson(Cargo data) {
final dyn = data.toJson();
return json.encode(dyn);
}
class Cargo {
String cargoClass;
String cargoId;
String type;
String status;
List<TemperatureReading> temperatureReadings;
Cargo({
this.cargoClass,
this.cargoId,
this.type,
this.status,
this.quantity,
this.origin,
this.temperatureReadings,
});
factory Cargo.fromJson(Map<String, dynamic> json) => new Cargo(
cargoClass: json["\u0024class"],
cargoId: json["cargoId"],
type: json["type"],
status: json["status"],
temperatureReadings: new List<TemperatureReading>.from(
json["temperatureReadings"]
.map((x) => TemperatureReading.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"\u0024class": cargoClass,
"cargoId": cargoId,
"type": type,
"status": status,
"temperatureReadings":
new List<dynamic>.from(temperatureReadings.map((x) => x.toJson())),
};
}
class TemperatureReading {
String temperatureReadingClass;
double centigrade;
String cargo;
String transactionTimestamp;
TemperatureReading({
this.temperatureReadingClass,
this.centigrade,
this.cargo,
this.transactionTimestamp,
});
factory TemperatureReading.fromJson(Map<String, dynamic> json) =>
new TemperatureReading(
temperatureReadingClass: json["\u0024class"],
centigrade: json["centigrade"].toDouble(),
cargo: json["cargo"],
transactionTimestamp: json["transactionTimestamp"],
);
Map<String, dynamic> toJson() => {
"\u0024class": temperatureReadingClass,
"centigrade": centigrade,
"cargo": cargo,
"transactionTimestamp": transactionTimestamp,
};
}
它表明“在 null 上调用了 getter 'status'。 收件人:空" Json 文件是嵌套列表格式。在这种情况下,我试图获取字符串“status”,但没有成功。
【问题讨论】:
-
阅读
FutureBuilder文档-提示:你不能无条件使用snapshot.data.* -
您是否阅读过
FutureBuilder文档?他们甚至展示了一些示例代码,你看到了吗?如果有,还有什么不清楚的地方? -
对不起先生,我只是一个新手。
-
因此,如果您是新手,则必须阅读文档的次数越多 - 您是否尝试过我提到的示例代码?
-
感谢您的建议。我能够得到响应,但我无法对其进行解码。