我知道颤振已经改变了 Google_Maps_api 这导致我的代码中出现多个错误,例如
1) 没有为“标记”类定义“选项”
2) 位置参数太多:0 预期 2 找到
3) 没有为类“GoogleMapController”定义“addMarker”
4) 没有为类“GoogleMapController”定义“clearMarker”
我已经检查过了:
Flutter:如何使用新的 Marker API 向 Google Maps 添加标记?
我是 FLUTTER 新手,请帮我解决这些错误,谢谢
我正在使用的 Git 是:
https://github.com/code4func/flutter-taxiapp
import 'package:fl_uberapp/src/model/place_item_res.dart';
import 'package:fl_uberapp/src/model/step_res.dart';
import 'package:fl_uberapp/src/model/trip_info_res.dart';
import 'package:fl_uberapp/src/repository/place_service.dart';
import 'package:fl_uberapp/src/resources/widgets/car_pickup.dart';
import 'package:fl_uberapp/src/resources/widgets/home_menu.dart';
import 'package:fl_uberapp/src/resources/widgets/ride_picker.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
var _scaffoldKey = new GlobalKey<ScaffoldState>();
var _tripDistance = 0;
final Map<String, Marker> _markers = <String, Marker>{};
GoogleMapController _mapController;
@override
Widget build(BuildContext context) {
print("build UI");
return Scaffold(
key: _scaffoldKey,
body: Container(
constraints: BoxConstraints.expand(),
color: Colors.white,
child: Stack(
children: <Widget>[
GoogleMap(
// key: ggKey,
// markers: Set.of(markers.values),
onMapCreated: (GoogleMapController controller) {
_mapController = controller;
},
initialCameraPosition: CameraPosition(
target: LatLng(10.7915178, 106.7271422),
zoom: 14.4746,
),
),
Positioned(
left: 0,
top: 0,
right: 0,
child: Column(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
AppBar(
backgroundColor: Colors.transparent,
elevation: 0.0,
title: Text(
"Taxi App",
style: TextStyle(color: Colors.black),
),
leading: FlatButton(
onPressed: () {
print("click menu");
_scaffoldKey.currentState.openDrawer();
},
child: Image.asset("ic_menu.png")),
actions: <Widget>[Image.asset("ic_notify.png")],
),
Padding(
padding: EdgeInsets.only(top: 20, left: 20, right: 20),
child: RidePicker(onPlaceSelected),
),
],
),
),
Positioned(left: 20, right: 20, bottom: 40,
height: 248,
child: CarPickup(_tripDistance),
)
],
),
),
drawer: Drawer(
child: HomeMenu(),
),
);
}
void onPlaceSelected(PlaceItemRes place, bool fromAddress) {
var mkId = fromAddress ? "from_address" : "to_address";
_addMarker(mkId, place);
_moveCamera();
_checkDrawPolyline();
}
void _addMarker(String mkId, PlaceItemRes place) async {
_addMarker(MarkerId, place);
// remove old
_markers.remove(mkId);
_mapController.clearMarkers();
_markers[mkId] = Marker(
mkId,
MarkerOptions(
position: LatLng(place.lat, place.lng),
infoWindowText: InfoWindowText(place.name, place.address)));
for (var m in _markers.values) {
await _mapController.addMarker(m.options);
}
}
void _moveCamera() {
print("move camera: ");
print(_markers);
if (_markers.values.length > 1) {
var fromLatLng = _markers["from_address"].options.position;
var toLatLng = _markers["to_address"].options.position;
var sLat, sLng, nLat, nLng;
if(fromLatLng.latitude <= toLatLng.latitude) {
sLat = fromLatLng.latitude;
nLat = toLatLng.latitude;
} else {
sLat = toLatLng.latitude;
nLat = fromLatLng.latitude;
}
if(fromLatLng.longitude <= toLatLng.longitude) {
sLng = fromLatLng.longitude;
nLng = toLatLng.longitude;
} else {
sLng = toLatLng.longitude;
nLng = fromLatLng.longitude;
}
LatLngBounds bounds = LatLngBounds(northeast: LatLng(nLat, nLng), southwest: LatLng(sLat, sLng));
_mapController.animateCamera(CameraUpdate.newLatLngBounds(bounds, 50));
} else {
_mapController.animateCamera(CameraUpdate.newLatLng(
_markers.values.elementAt(0).options.position));
}
}
void _checkDrawPolyline() {
// remove old polyline
_mapController.clearPolylines();
if (_markers.length > 1) {
var from = _markers["from_address"].options.position;
var to = _markers["to_address"].options.position;
PlaceService.getStep(
from.latitude, from.longitude, to.latitude, to.longitude)
.then((vl) {
TripInfoRes infoRes = vl;
_tripDistance = infoRes.distance;
setState(() {
});
List<StepsRes> rs = infoRes.steps;
List<LatLng> paths = new List();
for (var t in rs) {
paths
.add(LatLng(t.startLocation.latitude, t.startLocation.longitude));
paths.add(LatLng(t.endLocation.latitude, t.endLocation.longitude));
}
// print(paths);
_mapController.addPolyline(PolylineOptions(
points: paths, color: Color(0xFF3ADF00).value, width: 10));
});
}
}
}