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
更多关于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.xml
或Info.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');
}
}