我正在尝试根据 Json 文件中的字符串向我的地图小部件添加标记。当我运行代码时,地图不会呈现。我认为我没有正确访问列表。 Flutter_Google_maps 小部件中的标记:属性现在采用 Set((。
我看到过对"要添加标记"的问题的其他回答,首先您应该创建一个空的标记类型集并将其分配给谷歌地图小部件中的标记:属性。因此,您可以使用 add(( 方法将所需的 Marker(( 附加到创建的集合中。最后,您使用 setState(( 重建小部件并在 UI 上显示更新的标记集。 但它没有帮助
这是我到目前为止的代码:
杰森:
[
{
"name": "H1: Hatfield-Brooklyn",
"colour": "FF8F8F",
"coords": [
{
"ID": "385",
"longitude": "28.044276",
"latitude": "-26.145868"
},
]
地图:
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:gtbuddy/src/models/routes.dart';
import 'package:gtbuddy/src/ui/components/serviceArea.dart';
class MapSample extends StatefulWidget {
final String selectedStation;
MapSample({this.selectedStation});
@override
State<MapSample> createState() => MapSampleState();
}
class MapSampleState extends State<MapSample> {
Future _future;
Future<String> loadString() async =>
// await rootBundle.loadString('assets/Routes/coords_${widget.selectedStation}.json');
await rootBundle.loadString('assets/route/coords_${widget.selectedStation}.json');
List<Marker> allMarkers = [];
GoogleMapController _controller;
@override
void initState() {
// TODO: implement initState
super.initState();
_future = loadString();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Bus Routes"),
centerTitle: true,
backgroundColor: Color.fromRGBO(59, 62, 64, 1),
actions: <Widget>[
FlatButton(
textColor: Colors.white,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => busStationList()),
);
},
child: Icon(Icons.add),
),
],
),
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 CircularProgressIndicator();
}
List<Routes> parsedJson = jsonDecode(snapshot.data);
allMarkers = parsedJson.map((element) {
element.coords.forEach((internalItem){
return Marker(
//here you need to create a random name.
markerId: MarkerId(internalItem.iD),
position: LatLng(internalItem.latitude, internalItem.longitude));
});
}).toList();
return GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(-26.0000, 28.0000), zoom: 10.151926040649414),
markers: Set.from(allMarkers),
onMapCreated: mapCreated,
);
},
),
),
]),
);
}
void mapCreated(controller) {
setState(() {
_controller = controller;
});
}
}
地图除了一组标记不列出所以使用 {} 不是 [] 使用
Set<Marker> allMarkers = {};