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

开始使用

  1. 创建一个 Google Cloud 项目并启用 Places API。
  2. 从 Google Cloud 控制台生成 API 密钥。
  3. 将你的 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

1 回复

更多关于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(),
));
回到顶部