You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:27:01