Flutter地图搜索插件search_map的使用
Flutter 地图搜索插件 search_map 的使用
Flutter Search Map
一个集成 Google Maps Places API 的 Flutter 包,提供带有自动完成和地点详情检索的位置搜索字段。此包简化了添加基于地图的搜索功能,带有平滑的动画叠加层,无缝处理用户交互。
关键特性
- Google Places 自动完成:获取实时地址建议。
- 地点详情检索:获取任何选定地点的详细信息(名称、地址、坐标)。
- 平滑动画叠加层:搜索结果以平滑的淡入淡出和滑动动画显示和消失。
- 防抖搜索:通过内置防抖减少冗余的 API 调用。
- 动态叠加层宽度:叠加层与文本字段的宽度匹配,并有 3 像素的垂直偏移,以完美对齐。
- 可自定义的叠加层和图标:使用动态显示搜索结果的自定义选项和 Font Awesome 图标。
- 本地化支持:使用
easy_localization
支持多种语言。 - 清除按钮与叠加层管理:当搜索被清除时,自动隐藏叠加层。
- 会话管理:高效管理 API 会话以优化性能并最小化成本。
安装
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
search_map: any
开始使用
- 创建一个 Google Cloud 项目并启用 Places API。
- 从 Google Cloud 控制台生成 API 密钥。
- 将你的 API 密钥添加到小部件配置中。
使用
import 'package:search_map/search_map.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Search Map Example')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: SearchMap(
apiKey: 'YOUR_API_KEY',
focusNode: FocusNode(),
onClickAddress: (placeDetails) {
print('Selected: ${placeDetails.description}');
},
),
),
),
);
}
}
自定义
- 自定义叠加层样式:使用
overlayStyle
参数来自定义叠加层的外观。 - 本地化:使用
easy_localization
支持多种语言。 - 防抖时间:使用
debounceTime
调整防抖时间,以平衡性能和响应性。 - 图标集成:使用
font_awesome_flutter
添加搜索图标。 - 会话管理:使用
sessionManager
高效管理 API 会话。 - 错误处理:使用
onError
回调优雅地处理错误。
示例代码
import 'package:flutter/material.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:search_map/search_map.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();
runApp(
EasyLocalization(
supportedLocales: [Locale('en'), Locale('es'), Locale('ar')],
path: 'assets/langs',
fallbackLocale: Locale('en'),
child: MyApp(),
),
);
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
FocusNode focusNode = FocusNode();
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
home: Scaffold(
appBar: AppBar(title: const Text('Search Map Example')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: SearchMap(
apiKey: 'YOUR_API_KEY',
focusNode: focusNode,
decoration: const InputDecoration(
hintText: 'Search for a location',
),
onClickAddress: (placeDetails) {
print('Selected Place: ${placeDetails.toJson()}');
focusNode.unfocus();
},
),
),
),
);
}
}
更多关于Flutter地图搜索插件search_map的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图搜索插件search_map的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
search_map_place
是一个 Flutter 插件,用于在应用中集成 Google Places API 的搜索功能,允许用户搜索地点并获取相关详细信息。以下是使用 search_map_place
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 search_map_place
插件的依赖:
dependencies:
flutter:
sdk: flutter
search_map_place: ^0.3.0 # 请检查最新版本
然后运行 flutter pub get
来获取依赖包。
2. 获取 Google Places API 密钥
你需要一个 Google Places API 密钥来使用该插件。可以在 Google Cloud Console 中创建一个项目并启用 Places API,然后生成一个 API 密钥。
3. 配置 API 密钥
在 AndroidManifest.xml
和 Info.plist
中配置 API 密钥:
Android:
在 android/app/src/main/AndroidManifest.xml
中添加以下内容:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY"/>
iOS:
在 ios/Runner/Info.plist
中添加以下内容:
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to show places nearby</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>We need your location to show places nearby</string>
<key>io.flutter.embedded_views_preview</key>
<true/>
<key>com.google.android.geo.API_KEY</key>
<string>YOUR_API_KEY</string>
4. 使用 SearchMapPlaceWidget
在你的 Flutter 应用中使用 SearchMapPlaceWidget
来集成搜索功能:
import 'package:flutter/material.dart';
import 'package:search_map_place/search_map_place.dart';
class SearchMapExample extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Search Map Place Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: SearchMapPlaceWidget(
apiKey: 'YOUR_API_KEY', // 替换为你的 API 密钥
// 可选参数
language: 'en',
location: Location(lat: 37.4219999, lng: -122.0840575), // 默认位置
radius: 30000, // 搜索半径
onSelected: (Place place) async {
// 当用户选择一个地点时触发
print('Selected place: ${place.description}');
// 获取地点的详细信息
final geolocation = await place.geolocation;
print('Latitude: ${geolocation.coordinates.latitude}');
print('Longitude: ${geolocation.coordinates.longitude}');
},
),
),
);
}
}
void main() => runApp(MaterialApp(
home: SearchMapExample(),
));