Flutter中如何使用location库将经纬度转换为实际地址
Flutter 经纬度转实际地址实现方案
- 第一步:引入地理编码依赖
在项目的pubspec.yaml文件中添加官方维护的geocoding包依赖,执行依赖拉取操作即可使用地理编码能力。 - 第二步:封装经纬度转地址的异步方法
import 'package:geocoding/geocoding.dart'; Future<String> convertLatLngToAddress(double latitude, double longitude) async { try { List<Placemark> placemarks = await placemarkFromCoordinates(latitude, longitude); if (placemarks.isNotEmpty) { Placemark place = placemarks.first; // 可根据需求拼接地址字段,以下为示例拼接规则 return "${place.administrativeArea}${place.locality}${place.subLocality}${place.thoroughfare}${place.subThoroughfare}"; } return "未识别到有效地址"; } catch (e) { return "地址解析失败: ${e.toString()}"; } }
- 第三步:修改现有页面代码,异步加载并展示地址
你原有的经纬度展示部分可以替换为FutureBuilder来加载解析后的地址,修改后的代码片段如下:
void dispose() { locationService.dispose(); super.dispose(); } return StreamBuilder<UserLocation>( stream: locationService.locationStream, builder: (_, snapshot) => (snapshot.hasData) ? Scaffold( appBar: AppBar( title: const Text("Order"), actions: [ IconButton(onPressed: () => logout(), icon: const Icon(Icons.logout)) ], ), body: ListView( children: [ Column( children: <Widget>[ const Text("纬度"), Text("${snapshot.data!.latitude}"), const Text("经度"), Text("${snapshot.data!.longitude}"), const Text("当前地址"), // 新增地址解析展示部分 FutureBuilder<String>( future: convertLatLngToAddress(snapshot.data!.latitude, snapshot.data!.longitude), builder: (context, addrSnapshot) { if (addrSnapshot.hasData) { return Text(addrSnapshot.data!); } else if (addrSnapshot.hasError) { return const Text("地址解析出错"); } return const CircularProgressIndicator(); }, ) ], ), ], ), ) : const Scaffold(body: Center(child: CircularProgressIndicator())), );
注意事项:请确保应用已经获取到位置权限,否则会出现解析失败的问题
内容的提问来源于stack exchange,提问作者Nero Chaniago
相关产品推荐
相关产品推荐

