【发布时间】:2021-02-18 09:26:51
【问题描述】:
我制作了一个简单的应用程序来从数据库中获取标记并在 Google 地图上绘制它们。
我已从 API 获取标记信息,并将它们添加到名称为“allMarkers”的列表中。
但是当我运行我的应用程序时,地图无法运行并出现此错误。
type 'List<dynamic>' is not a subtype of type 'String'
如何在我的列表中插入名为“allMarkers”的标记并在谷歌地图上绘制它们
我的代码
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:google_maps_flutter/google_maps_flutter.dart';
class Home extends StatefulWidget {
@override
_Home2State createState() => _HomeState();
}
class _HomeState extends State<Home> {
Future _future;
Future loadString() async {
var url = "http://10.0.2.2/GoApp/locations.php";
var response = await http.get(url);
final dynamic responsebody = jsonDecode(response.body);
//print(responsebody);
return responsebody;
}
List<Marker> allMarkers = [];
GoogleMapController _controller;
@override
void initState() {
super.initState();
_future = loadString();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(children: [
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: FutureBuilder(
future: _future,
builder: (context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
List<dynamic> parsedJson = jsonDecode(snapshot.data);
allMarkers = parsedJson.map((i) {
return Marker(
markerId: MarkerId(i['loc_id']),
position: LatLng(i['loc_x'], i['loc_y']),
);
}).toList();
return GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(40.7128, -74.0060), zoom: 1.0),
markers: Set.from(allMarkers),
onMapCreated: mapCreated,
mapType: MapType.normal,
tiltGesturesEnabled: true,
compassEnabled: true,
rotateGesturesEnabled: true,
myLocationEnabled: true,
);
},
),
),
]),
);
}
void mapCreated(controller) {
setState(() {
_controller = controller;
});
}
}
我来自 API 的 JSON 数据
[
{
loc_id: "1",
loc_x: "40.7128",
loc_y: "-74.0060"
},
{
loc_id: "2",
loc_x: "41.7128",
loc_y: "-75.0060"
}
]
【问题讨论】:
标签: flutter google-maps