打印语句及其下面的任何内容都不会运行,并且错误消息指出问题是从var time
开始的上一行。我还确认earthquakes
是一个growableList,这意味着earthquakes[0]
应该没有问题,但它没有...我做错了什么?如果问题需要更多澄清,请告诉我,我会提供。
链接到gif错误
链接到GitHub上的code
我的代码中有问题的部分如下。第43行报告错误。
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';
class Quake extends StatefulWidget {
var _data;
Quake(this._data);
@override
State<StatefulWidget> createState() => new QuakeState(_data);
}
class QuakeState extends State<Quake> {
// https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson
// "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson";
var _data;
QuakeState(this._data);
@override
Widget build(BuildContext context) {
// debugPrint(_data['features'].runtimeType.toString());
List earthquakes = _data['features'];
return new Scaffold(
appBar: new AppBar(
title: new Text("Quakes - USGS All Earthquakes"),
backgroundColor: Colors.red,
centerTitle: true,
),
body: new ListView.builder(
itemCount: earthquakes.length,
itemBuilder: (BuildContext context, int index) {
print("${earthquakes[index]}");
var earthquake = earthquakes[index];
var time = earthquake['properties']['time'];
time *= 1000;
//var dateTime = new DateTime.fromMillisecondsSinceEpoch(int.parse(time));
//time = new DateFormat.yMMMMd(dateTime).add_jm();
return new ListTile(
title: new Text(time ?? "Empty"),
);
}));
}
}
Future<Map> getJson(String url) async {
return await http.get(url).then((response) => json.decode(response.body));
}
答案 0 :(得分:4)
title: new Text(time ?? "Empty"),
应该是
title: new Text(time != null ? '$time' : "Empty"),
或
title: new Text('${time ?? "Empty"}'),
答案 1 :(得分:2)
正如以上答案所指出的,time
变量为int
,而Text()
需要一个String
。
可能还有另一个问题:
如果time
是null
,则空感知运算符??
将无法正常工作。因为time
表达式中的??
之前使用了time *= 1000
变量。
因此,time *= 1000
应该被删除,而Text
应该像
Text(time == null ? "Empty" : '${time * 1000}')
注意:在这种情况下,time
未被修改。
答案 2 :(得分:1)
摘录下一行的代码是:
title: new Text(time ?? "Empty"),
实际上,它实际上应该如下所示:
title: new Text(time?.toString() ?? "Empty"),
答案 3 :(得分:1)
尽管原始问题已得到很好的回答,但我想显示引起问题的类型问题。
time
已声明为 int
Text()
需要字符串
当time ?? "Empty"
的值为time
时,类型为 int ,这将导致Text()
收到错误的类型。
无论何时显示type 'String' is not a subtype of type 'int'
消息,都存在类型不匹配的情况。
答案 4 :(得分:0)
答案 5 :(得分:0)
这是因为您在应该使用字符串的地方使用了 int 值。使用 int 值或将其转换为字符串作为 intValueName.toString();
答案 6 :(得分:0)
检查您的数据类型。可能是您的时间是一个字符串。在你的情况下它是一个 int,所以抛出一个错误。
解决将Int
值转换为String
的问题。
将 Int 值转换为 String。
static String checkString(dynamic value) {
if (value is int) {
return value.toString();
} else {
return value;
}
}
}
然后像这样使用
title: Text(checkString(time)),
您也可以在 int 类中使用 .toString()
函数。
title: Text(time.toString(),
您也可以将 int 值转换为 String 并使用它
String time = "$time”;
答案 7 :(得分:-1)
只需检查是否在ListBuilder的itemBuilder上更改(上下文,索引)的顺序