地址搜索字段
Widget 构建器,用于创建“地址搜索小部件”,帮助通过引用自动完成地址。它们可用于获取两个地点之间的路线,并可选择途经点。这些小部件设计用于在 TextField 中通过 onTap 使用 showDialog 函数显示。它使用了 HTTP 和 Flutter 的 Google Maps 插件。(最后一个插件用于使用可与 GoogleMap Widget 一起使用的扩展对象)。

入门
要使用此插件,请将 address_search_field 添加到您的 pubspec.yaml 文件中作为 依赖项。例如
dependencies:
address_search_field: ^3.0.5
权限
Android
在 Android 上,您需要在 Android Manifest 文件(位于 android/app/src/main)中添加 internet 权限。为此,请将以下几行作为 manifest> 标签的直接子项添加
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
iOS
在 iOS 上,您需要在 Info.plist 文件(位于 ios/Runner)中添加 NSLocationWhenInUseUsageDescription 以访问设备的位置。只需打开您的 Info.plist 文件并添加以下内容
<key>NSLocationWhenInUseUsageDescription</key>
<string>Permission to get your location</string>
用法
导入包
import 'package:address_search_field/address_search_field.dart';
GeoMethods
GeoMethods(
googleApiKey: String,
language: String,
countryCode: String,
country: String,
city: String,
mode: String,
);
AddressSearchBuilder
此小部件是一个构建器,它提供了参数和方法来创建一个可以搜索地址并允许使用 Address 对象处理它们的界面。示例
GeoMethods geoMethods;
TextEditingController controller;
AddressSearchBuilder(
geoMethods: geoMethods,
controller: controller,
builder: (
BuildContext context,
AsyncSnapshot<List<Address>> snapshot, {
TextEditingController controller,
Future<void> Function() searchAddress,
Future<Address> Function(Address address) getGeometry,
}) {
return AddressSearchDialog(
snapshot: snapshot,
controller: controller,
searchAddress: searchAddress,
getGeometry: getGeometry,
onDone: (Address address) => null,
);
},
);
AddressSearchDialog不应单独使用。它需要AddressSearchBuilder的参数。使用此小部件的最佳方式是使用AddressSearchBuilder.deft,它将仅使用AddressDialogBuilder,并且实现更简单。示例
GeoMethods geoMethods;
TextEditingController controller;
AddressSearchBuilder.deft(
geoMethods: geoMethods,
controller: controller,
builder: AddressDialogBuilder(),
onDone: (Address address) => null,
);
AddressDialogBuilder
此构建器使用参数来自定义 AddressSearchDialog,后者由 AddressSearchBuilder 调用。示例
AddressDialogBuilder(
color: Color,
backgroundColor: Color,
hintText: String,
noResultText: String,
cancelText: String,
continueText: String,
useButtons: bool,
);
AddressLocator
此小部件是一种简单的方法,可以在 TextEditingController 中设置初始地址引用,前提是 AddressSearchBuilder 不是由 RouteSearchBox 创建的。locator 参数提供了一个 relocate 函数来执行此操作并获取 Address。示例
GeoMethods geoMethods;
TextEditingController controller;
Coords initialCoords;
Address initialAddress;
AddressLocator(
geoMethods: geoMethods,
controller: controller,
locator: (relocate) async => controller.text.isEmpty
? initialAddress.update(await relocate(initialCoords))
: null,
child: TextField(
onTap: () => AddressSearchBuilder.deft(
geoMethods: geoMethods,
controller: controller,
builder: AddressDialogBuilder(),
onDone: (Address address) {},
),
),
);
RouteSearchBox
这是一个特殊的小部件,带有一个构建器,它提供了三个 AddressSearchBuilder 来搜索起点 Address、终点 Address 以及可选的途经点 List<Address>。此小部件用于获取由构建器的 AddressSearchBuilder 获取的点的路线。
如何使用此小部件的完整示例可以在 此处 找到。示例
GeoMethods geoMethods;
TextEditingController originCtrl;
TextEditingController destCtrl;
Coords initialCoords;
RouteSearchBox(
geoMethods: geoMethods,
originCtrl: originCtrl,
destinationCtrl: destCtrl,
builder: (
BuildContext context,
AddressSearchBuilder originBuilder,
AddressSearchBuilder destinationBuilder, {
Future<Directions> Function() getDirections,
void Function(AddressId addrId, Coords coords) relocate,
AddressSearchBuilder waypointBuilder,
WaypointsManager waypointsMgr,
}) {
if(controller.text.isEmpty) relocate(AddressId.origin, initialCoords);
return Column(
children: [
TextField(
controller: originCtrl,
onTap: () => showDialog(
context: context,
builder:
(context) =>
originBuilder.buildDefault(
builder: AddressDialogBuilder(),
onDone: (Address address) => null,
),
),
),
TextField(
controller: destCtrl,
onTap: () => showDialog(
context: context,
builder:
(context) =>
destinationBuilder.buildDefault(
builder: AddressDialogBuilder(),
onDone: (Address address) => null,
),
),
),
],
);
},
);