Flutter地址获取插件flutter_address_from_latlng的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter地址获取插件flutter_address_from_latlng的使用

插件简介

flutter_address_from_latlng 是一个用于根据经纬度获取地址信息的Flutter插件。它提供了多种方法来获取不同类型的地址,如详细的格式化地址、前提地址(Premise)、街道地址(Street)、路线地址(Route)等。

功能特性

  • 获取最详细的格式化地址
  • 获取前提地址(Premise)
  • 获取街道地址(Street)
  • 获取路线地址(Route)
  • 获取更多类型的地址信息

开始使用

要在项目中使用 flutter_address_from_latlng,首先需要在 pubspec.yaml 文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  # 添加 flutter_address_from_latlng 依赖
  flutter_address_from_latlng: ^最新版本

然后,在 Dart 文件中导入该插件:

import 'package:flutter_address_from_latlng/flutter_address_from_latlng.dart';

使用示例

以下是一个完整的示例代码,展示了如何使用 flutter_address_from_latlng 插件来获取不同类型的地址信息。为了简化示例,我们假设你已经有了 Google API Key,并且已经将其存储在一个变量 googleApiKey 中。

import 'package:flutter/material.dart';
import 'package:flutter_address_from_latlng/flutter_address_from_latlng.dart';

void main() async {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('flutter_address_from_latlng 示例'),
        ),
        body: AddressFetcher(),
      ),
    );
  }
}

class AddressFetcher extends StatefulWidget {
  [@override](/user/override)
  _AddressFetcherState createState() => _AddressFetcherState();
}

class _AddressFetcherState extends State<AddressFetcher> {
  String? formattedAddress;
  Address? premiseAddress;
  Address? streetAddress;
  Address? directionAddress;
  Address? establishmentAddress;
  Address? plusCodeAddress;
  Address? neighborhoodAddress;
  Address? administrativeArea1;
  Address? administrativeArea2;
  Address? administrativeArea3;
  Address? countryAddress;

  final double latitude = 37.4219983; // 示例纬度
  final double longitude = -122.084;  // 示例经度
  final String googleApiKey = 'YOUR_GOOGLE_API_KEY'; // 请替换为你的Google API Key

  Future<void> fetchAddresses() async {
    try {
      // 获取格式化地址
      formattedAddress = await FlutterAddressFromLatLng().getFormattedAddress(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取前提地址(Premise)
      premiseAddress = await FlutterAddressFromLatLng().getPremiseAddress(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取街道地址(Street)
      streetAddress = await FlutterAddressFromLatLng().getStreetAddress(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取路线地址(Route)
      directionAddress = await FlutterAddressFromLatLng().getDirectionAddress(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取机构地址(Establishment)
      establishmentAddress = await FlutterAddressFromLatLng().getEstablishmentAddress(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取Plus Code地址
      plusCodeAddress = await FlutterAddressFromLatLng().getPlusCodeAddress(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取邻里地址(Neighborhood)
      neighborhoodAddress = await FlutterAddressFromLatLng().getNeighborhoodAddress(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取一级行政区划地址
      administrativeArea1 = await FlutterAddressFromLatLng().getAdministrativeAddress1(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取二级行政区划地址
      administrativeArea2 = await FlutterAddressFromLatLng().getAdministrativeAddress2(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取三级行政区划地址
      administrativeArea3 = await FlutterAddressFromLatLng().getAdministrativeAddress3(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      // 获取国家地址
      countryAddress = await FlutterAddressFromLatLng().getCountryAddress(
        latitude: latitude,
        longitude: longitude,
        googleApiKey: googleApiKey,
      );

      setState(() {}); // 更新UI
    } catch (e) {
      print('Error fetching addresses: $e');
    }
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    fetchAddresses(); // 在初始化时获取地址
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return ListView(
      padding: EdgeInsets.all(16.0),
      children: [
        Text('格式化地址: $formattedAddress', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('前提地址: ${premiseAddress?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('街道地址: ${streetAddress?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('路线地址: ${directionAddress?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('机构地址: ${establishmentAddress?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('Plus Code地址: ${plusCodeAddress?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('邻里地址: ${neighborhoodAddress?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('一级行政区划地址: ${administrativeArea1?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('二级行政区划地址: ${administrativeArea2?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('三级行政区划地址: ${administrativeArea3?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('国家地址: ${countryAddress?.address ?? 'N/A'}', style: TextStyle(fontSize: 16)),
      ],
    );
  }
}

更多关于Flutter地址获取插件flutter_address_from_latlng的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter地址获取插件flutter_address_from_latlng的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_address_from_latlng插件来获取地址的示例代码。这个插件允许你通过给定的经纬度来获取相应的地址信息。

首先,确保你已经在pubspec.yaml文件中添加了flutter_address_from_latlng依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_address_from_latlng: ^最新版本号  # 请替换为最新的版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用flutter_address_from_latlng插件:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:flutter_address_from_latlng/flutter_address_from_latlng.dart';
  1. 创建一个函数来获取地址
Future<void> _getAddressFromLatLng(double lat, double lng) async {
  FlutterAddressFromLatLng address = FlutterAddressFromLatLng();

  try {
    AddressResult result = await address.getAddressFromLatLng(lat, lng);

    if (result != null && result.resultCode == 100) {
      // 成功获取地址
      print("Address: ${result.addressComponent.addressDetail.locality}");
      print("Country: ${result.addressComponent.addressDetail.country}");
      print("Street: ${result.addressComponent.addressDetail.street}");
      // 你可以根据需要访问更多字段
    } else {
      // 处理错误
      print("Error: ${result?.errorMessage ?? 'Unknown error'}");
    }
  } catch (e) {
    // 处理异常
    print("Exception: $e");
  }
}
  1. 在UI中调用这个函数
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Address Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Address Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 使用示例经纬度
            double lat = 37.7749; // 旧金山纬度
            double lng = -122.4194; // 旧金山经度
            _getAddressFromLatLng(lat, lng);
          },
          child: Text('Get Address'),
        ),
      ),
    );
  }
}

在这个示例中,当你点击按钮时,应用会使用给定的经纬度调用_getAddressFromLatLng函数,并打印出获取到的地址信息。

请注意,这个插件依赖于某些地理编码服务(如Google Maps Geocoding API),你可能需要配置API密钥或遵循特定服务的条款和条件。确保你了解并遵守这些要求。

回到顶部