在我的应用程序中,用户可以启动由当前位置和目的地组成的导航,显示在谷歌地图应用程序上。
代码如下:
ListTile(
title:
Text("Launch Google Maps", textAlign: TextAlign.center),
onTap: () async {
Position position = await Geolocator().getCurrentPosition(
desiredAccuracy: LocationAccuracy.bestForNavigation);
print("Position: $position"); //all Information about position (Coordinates etc.)
List<Placemark> placemark =
await Geolocator().placemarkFromPosition(position);
print("Placemark: ${placemark[0].locality}"); //Kingston
final String clubName =
clubs[index].name.toString().replaceAll(" ", "+");
print("Name: $clubName"); //Flawless
final String clubCity =
clubs[index].location.city.toString().replaceAll("ü", "ue");
print("Stadt: $clubCity");//London
final String newGoogleUrl =
"https://www.google.com/maps/dir/?api=1&origin=${placemark[0].locality}&destination=$clubName,$clubCity";
if (await canLaunch(newGoogleUrl)) {
await launch(newGoogleUrl);
} else {
throw 'Could not launch $newGoogleUrl';
}
},
),
代码流:
- 列表项
- 获取用户当前位置
- 根据位置获取地点详细信息
- 获取俱乐部名称
- 获取俱乐部城市
- 撰写网址字符串
- 根据网址启动谷歌地图
一切都很好。我可以获取所有必需的信息,并在最后启动谷歌地图。但这里最大的问题是,这需要大约 8 秒才能启动谷歌地图。我知道这是一个异步函数,我必须等待位置等,但我不知道如何解决这个问题。
如何改进此代码以几乎立即启动谷歌地图,而不必在按下按钮后始终等待 8 秒?
我想过将当前位置存储在共享首选项中,因此我不需要调用地理定位器 API,但我不确定这种方法是否多久更新一次该位置等。
任何帮助都非常感谢。
除了让它异步之外,你试过谷歌地图的精简版吗?
优酷链接
如果您的地图有很多标记,或者只是为了简单地提高性能以换取花哨的动画,它就很合适。
在颤振中,将精简模式设置为 true
return GoogleMap(
liteModeEnabled: true,
mapType: MapType.normal,
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: _initialLocation,
zoom: 17,
),
markers: _markers,
polylines: _lines,
);