【发布时间】:2021-04-19 05:23:11
【问题描述】:
我有一个问题:我正在尝试从现有 API 中获取标记,但我不想手动编写所有 300 万点的经度和纬度,所以我创建了一个forEach 方法必须遍历所有点。但我收到以下错误:
The method 'forEach' was called on null.
Receiver: null
Tried calling: forEach(Closure: (Stops) => Null)
我还尝试使用 loop for...if 并在 snapshot 内启动一个循环,但它不起作用,因为它只能返回小部件,所以当我返回颤振地图然后尝试诱导纬度和经度时,没有任何效果。
更新
感谢 Sam Chan 的回答,但在我尝试了两个答案后,它给了我一个错误:
The method 'map' was called on null. Receiver: null Tried calling: map<Marker>(Closure: (Stops) => Marker)
我不明白我做错了什么?
我还有每个标记的 id,如果我写了这个:
final List<Stops> listStops = stopsFromJson(response.body);
for (var i = 1; i < listStops.length; i++) {
if (listStops[i].stId != null) {
return Stops.fromJson(jsonDecode(response.body)[1]);
} else {
return Stops();
}
And after that I wrote here this:
MarkerLayerOptions(
markers:[
Marker(
point: latLng.LatLng(snapshot.data.stLong, snapshot.data.stLat),
width: 20,
height: 20,
builder: (ctx) => Icon(Icons.add)
因此,地图上只出现了一个 ID = 1 所属的标记。我知道我必须使用列表,但是当我使用列表时,没有任何作用。
我的代码
List<Stops> listStops;
Future<List<Stops>> futureStops;
List<Marker> allMarkers = [];
@override
void initState() {
super.initState();
futureStops = fetchStops();
}
body: FutureBuilder<List<Stops>>(
future: futureStops,
builder: (context, snapshot) {
if (snapshot.hasData) {
listStops.forEach((Stops) {
allMarkers = listStops.map(
(Stops) => Marker(
point: latLng.LatLng(Stops.stLong, Stops.stLat),
width: 20,
height: 20,
builder: (_) => Icon(
Icons.person_pin,
color: Colors.green,
)),
);
});
return FlutterMap(
options: MapOptions(
center: latLng.LatLng(48.707103, 44.516939),
zoom: 13.0,
),
layers: [
new TileLayerOptions(
urlTemplate:
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
subdomains: ['a', 'b', 'c']),
MarkerLayerOptions(
markers: allMarkers,
)
],
在这里我想用纬度和经度调用标记,但没有任何效果。我还尝试在我的模型中编写一个循环,但那里也没有任何效果。我不明白我做错了什么。
MarkerLayerOptions( markers: allMarkers,
能给我一个提示吗?
谢谢大家!
也是我的模特
Future <List<Stops>> fetchStops () async {
//here is my link
if (response.statusCode == 200) {
final List<Stops> listStops = stopsFromJson(jsonDecode(response.body)[1]);
return listStops;
} else {
return List<Stops>();
}
}
【问题讨论】:
标签: loops flutter widget openstreetmap markers