Flutter地址查找插件find_address的使用

Flutter地址查找插件find_address的使用

本插件用于弹出一个窗口以查找地址,并返回地址信息及相应的经纬度坐标。

通常在输入家庭或办公室地址时,经常会出现地区、地名、道路等信息填写错误的情况。此外,在基于地址的搜索中,准确的地址需要保存在数据库中。因此,为了实现精确的地址查找(即自动完成功能),我们使用了行安部API来开发此功能。

通过找到的地址,我们可以获取其经纬度,并且可以通过卡卡奥地图API(例如Google地图)进行查看。地址API按以下方式分类:省/直辖市 -> 市/区。这样可以方便地根据地址查找相关信息。

在数据库中,需要存储完整的地址信息,包括“市/区”,“市/区/街道”,“省/市/区/街道”,“经/纬度”,“邮政编码”等。

使用方法

地址搜索使用方法

在Flutter中,可以使用如下代码:

ElevatedButton(
  onPressed: () async {
    await findAddress(
      context,
      kakaoApiKey: "....Kakaotalk API Key....",
      dataApiKey: "....Data.go.kr API Key....",
    );
    print(re);
  },
  child: const Text(
    '地址查找',
  ),
),

在FlutterFlow中,可以创建自定义动作。以下是一个示例,用户选择地址后,将直接更新指定文档。

// 自动 FlutterFlow导入
import '/backend/backend.dart';
import '/actions/actions.dart' as action_blocks;
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/actions/index.dart'; // 导入其他自定义动作
import '/flutter_flow/custom_functions.dart'; // 导入自定义函数
import 'package:flutter/material.dart';
// 开始自定义动作代码
// 不要移除或修改上面的代码!

import 'package:find_address/find_address.dart' as addr;

Future updateAddress(
  BuildContext context,
  DocumentReference houseDocumentReference,
) async {
  // 添加您的函数代码在这里!
  final re = await addr.findAddress(
    context,
    kakaoApiKey: "....Kakaotalk API Key....",
    dataApiKey: "....Data.go.kr API Key....",
  );

  if (re == null) return;

  print(re);

  await houseDocumentReference.update({
    'roadAddr': re['roadAddr'], // 道路地址
    'siNm': re['siNm'], // 省份名称
    'sggNm': re['sggNm'], // 区域名称
    'siNmSggNm': '${re['siNm']} ${re['sggNm']}', // 省份和区域名称组合
    'latLng': GeoPoint(re['lat'] ?? 0, re['lng'] ?? 0), // 经纬度
  });

  return;
}

设计变更

可以通过以下方式进行设计变更:

ElevatedButton(
  onPressed: () async {
    re = await findAddress(
      context,
      kakaoApiKey: "xxxx",
      dataApiKey: "xxxx",
      themeData: Theme.of(context).copyWith(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
        textTheme: Theme.of(context).textTheme.copyWith(
              titleMedium: const TextStyle(color: Colors.red),
              labelMedium: const TextStyle(color: Colors.blue),
            ),
        inputDecorationTheme: InputDecorationTheme(
          border: OutlineInputBorder(borderRadius: BorderRadius.circular(16)),
          isDense: true,
          contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
        ),
        useMaterial3: true,
      ),
    );
    print(re);
  },
  child: const Text(
    '地址查找',
  ),
)

地址分类使用方法

当需要按省/市/区/街道进行搜索时使用。

例如,在开发二手市场或物物交换应用时,如果想查看附近或特定位置的物品,可以使用省/市/区/街道进行筛选。这样可以根据特定位置的省/市/区/街道进行查找。

该组件使用无需密钥的公开API,因此可立即使用。

示例

Container(
  padding: const EdgeInsets.all(32),
  width: double.infinity,
  color: Colors.blue.shade50,
  child: SelectSiGunGu(
    onSelected: (value) => print(value),
  ),
),
Container(
  padding: const EdgeInsets.all(32),
  width: double.infinity,
  color: Colors.orange.shade50,
  child: SelectSiGunGu.column(
    spacing: 8,
    onSelected: (value) => print(value),
  ),
),

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

1 回复

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


find_address 是一个 Flutter 插件,用于根据经纬度查找地址或根据地址查找经纬度。它通常用于需要地理编码或逆地理编码的应用程序中。以下是如何在 Flutter 项目中使用 find_address 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 find_address 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  find_address: ^0.0.3  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 find_address 包。

import 'package:find_address/find_address.dart';

3. 使用插件

根据经纬度查找地址(逆地理编码)

你可以使用 FindAddress.fromCoordinates 方法来根据经纬度查找地址。

void getAddressFromCoordinates() async {
  try {
    String address = await FindAddress.fromCoordinates(latitude: 37.7749, longitude: -122.4194);
    print('Address: $address');
  } catch (e) {
    print('Error: $e');
  }
}

根据地址查找经纬度(地理编码)

你可以使用 FindAddress.fromAddress 方法来根据地址查找经纬度。

void getCoordinatesFromAddress() async {
  try {
    LatLng coordinates = await FindAddress.fromAddress('1600 Amphitheatre Parkway, Mountain View, CA');
    print('Latitude: ${coordinates.latitude}, Longitude: ${coordinates.longitude}');
  } catch (e) {
    print('Error: $e');
  }
}

4. 处理权限(如果需要)

在某些平台上,你可能需要请求位置权限才能使用地理编码或逆地理编码功能。你可以使用 permission_handler 插件来请求权限。

dependencies:
  permission_handler: ^10.0.0  # 请检查最新版本

然后,请求权限:

import 'package:permission_handler/permission_handler.dart';

void requestLocationPermission() async {
  var status = await Permission.location.request();
  if (status.isGranted) {
    print('Location permission granted');
  } else {
    print('Location permission denied');
  }
}

5. 运行项目

确保你已经配置了所有必要的权限和设置,然后运行你的 Flutter 项目。

flutter run

注意事项

  • 确保你的设备或模拟器已连接到互联网,因为地理编码和逆地理编码通常需要网络请求。
  • 某些平台(如 Android 和 iOS)可能需要额外的配置,例如在 AndroidManifest.xmlInfo.plist 中添加权限声明。

示例代码

以下是一个完整的示例代码,展示了如何使用 find_address 插件进行地址查找和坐标查找:

import 'package:flutter/material.dart';
import 'package:find_address/find_address.dart';
import 'package:permission_handler/permission_handler.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Find Address Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async {
                  var status = await Permission.location.request();
                  if (status.isGranted) {
                    getAddressFromCoordinates();
                  } else {
                    print('Location permission denied');
                  }
                },
                child: Text('Get Address from Coordinates'),
              ),
              ElevatedButton(
                onPressed: () async {
                  var status = await Permission.location.request();
                  if (status.isGranted) {
                    getCoordinatesFromAddress();
                  } else {
                    print('Location permission denied');
                  }
                },
                child: Text('Get Coordinates from Address'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

void getAddressFromCoordinates() async {
  try {
    String address = await FindAddress.fromCoordinates(latitude: 37.7749, longitude: -122.4194);
    print('Address: $address');
  } catch (e) {
    print('Error: $e');
  }
}

void getCoordinatesFromAddress() async {
  try {
    LatLng coordinates = await FindAddress.fromAddress('1600 Amphitheatre Parkway, Mountain View, CA');
    print('Latitude: ${coordinates.latitude}, Longitude: ${coordinates.longitude}');
  } catch (e) {
    print('Error: $e');
  }
}
回到顶部