Flutter地址搜索插件address_search_field的使用
Flutter地址搜索插件address_search_field的使用
address_search_field
插件帮助开发者创建能够自动补全地址的搜索小部件。这些小部件可以在用户点击文本输入框时通过 showDialog
函数显示出来。该插件依赖于以下库:
Dio
Google Maps for Flutter
Flutter Riverpod
演示
引入插件
在 pubspec.yaml
文件中添加依赖项:
dependencies:
address_search_field: ^5.0.3
Android权限配置
在 AndroidManifest.xml
文件中添加互联网权限:
<uses-permission android:name="android.permission.INTERNET"/>
导入库
在 Dart 文件中导入 address_search_field
包:
import 'package:address_search_field/address_search_field.dart';
使用GeoMethods
GeoMethods
对象用于调用 Google API,并支持多种参数设置。
GeoMethods geoMethods;
TextEditingController controller;
Address destinationAddress;
// 创建一个GeoMethods实例
final geoMethods = GeoMethods(
googleApiKey: 'YOUR_GOOGLE_API_KEY',
language: 'en',
countryCode: 'us',
);
// 调用API
geoMethods.autocompletePlace(query: 'place streets or reference');
geoMethods.geoLocatePlace(coords: Coords(0.10, 0.10));
geoMethods.getPlaceGeometry(reference: 'place streets', placeId: 'ajFDN3662fNsa4hhs42FAjeb5n');
geoMethods.getDirections(origin: Address(coords: Coords(0.10, 0.10)), destination: Address(coords: Coords(0.10, 0.10)));
使用AddressSearchBuilder
AddressSearchBuilder
小部件允许用户搜索地址并处理地址对象。
TextField(
controller: controller,
onTap: () => showDialog(
context,
builder: (BuildContext context) => AddressSearchDialog(
geoMethods: geoMethods,
controller: controller,
onDone: (Address address) => destinationAddress = address,
)
),
);
自定义AddressSearchDialog
可以通过 AddressSearchDialog.custom
创建自定义对话框。
TextField(
controller: controller,
onTap: () => showDialog(
context,
builder: (BuildContext context) {
return AddressSearchDialog.custom(
geoMethods: geoMethods,
builder: (
BuildContext context,
AsyncSnapshot<List<Address>> snapshot,
Future<void> Function() searchAddress,
Future<Address> Function(Address address) getGeometry,
void Function() dismiss,
) {
return MyCustomWidget(
snapshot: snapshot,
searchAddress: searchAddress,
getGeometry: getGeometry,
dismiss: dismiss,
controller: controller,
address: destinationAddress,
);
}
);
}
),
);
使用AddressLocator
AddressLocator
小部件允许从坐标获取地址引用。
Coords coords;
GeoMethods geoMethods;
TextEditingController controller;
Address initialAddress;
AddressLocator(
coords: coords,
geoMethods: geoMethods,
controller: controller,
child: TextField(
controller: controller,
onTap: () => showDialog(
context: context,
builder: (BuildContext context) => AddressSearchDialog(
controller: controller,
geoMethods: geoMethods,
onDone: (Address address) => initialAddress = address,
),
),
),
);
使用RouteSearchBox
RouteSearchBox
小部件可以帮助你使用 flutter_riverpod
提供者来管理路线信息。
final routeProvider = ChangeNotifierProvider<RouteNotifier>((ref) => RouteNotifier());
GeoMethods geoMethods;
TextEditingController originCtrl;
TextEditingController destCtrl;
Coords initialCoords;
RouteSearchBox(
provider: routeProvider,
geoMethods: geoMethods,
originController: originCtrl,
destinationController: destCtrl,
locationSetters: [
LocationSetter(
coords: initialCoords,
addressId: AddressId.origin,
),
],
child: Column(
children: [
TextField(
controller: originCtrl,
onTap: () => showDialog(
context: context,
builder: (context) => AddressSearchDialog.withProvider(
provider: routeProvider,
addressId: AddressId.origin,
),
),
),
TextField(
controller: destCtrl,
onTap: () => showDialog(
context: context,
builder: (context) => AddressSearchDialog.withProvider(
provider: routeProvider,
addressId: AddressId.destination,
),
),
),
Consumer(
builder: (BuildContext context, WidgetRef ref, Widget? _) {
return ElevatedButton(
child: const Text('Search'),
onPressed: () async {
final route = await ref.read(routeProvider).findRoute();
},
);
},
),
],
)
);
更多关于Flutter地址搜索插件address_search_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地址搜索插件address_search_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用address_search_field
插件的一个示例。这个插件允许用户在应用中进行地址搜索,通常与Google Maps API结合使用。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加address_search_field
的依赖:
dependencies:
flutter:
sdk: flutter
address_search_field: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Google Maps API
由于地址搜索通常依赖于Google Maps API,你需要获取一个API密钥,并在你的AndroidManifest.xml
和Info.plist
文件中进行配置。
Android
在AndroidManifest.xml
中添加:
<application>
<!-- 其他配置 -->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_GOOGLE_MAPS_API_KEY"/>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
iOS
在Info.plist
中添加:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>io.flutter.embedded_views_preview</key>
<true/>
<key>GOOGLE_MAPS_API_KEY</key>
<string>YOUR_GOOGLE_MAPS_API_KEY</string>
3. 使用AddressSearchField
在你的Flutter代码中,你可以这样使用AddressSearchField
:
import 'package:flutter/material.dart';
import 'package:address_search_field/address_search_field.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Address Search Field Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final AddressSearchFieldController _controller = AddressSearchFieldController();
String _selectedAddress = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Address Search Field Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
AddressSearchField(
apiKey: 'YOUR_GOOGLE_MAPS_API_KEY', // 在这里填入你的API密钥
controller: _controller,
onSelected: (place) {
setState(() {
_selectedAddress = "${place.name}, ${place.vicinity}";
});
},
hintText: 'Search for an address',
language: 'en', // 设置搜索语言
),
SizedBox(height: 16),
Text('Selected Address:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
Text(_selectedAddress, style: TextStyle(fontSize: 16)),
],
),
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
4. 运行应用
确保你已经配置好了API密钥,并且网络连接正常,然后运行你的Flutter应用。你应该能够看到一个地址搜索栏,输入地址时会显示搜索结果,选择一个地址后,会在页面上显示选中的地址信息。
请注意,你需要确保你的Google Maps API密钥没有被限制,并且已经启用了Places API。你可以在Google Cloud Console中管理你的API密钥和启用相应的API。