Flutter地点选择插件place_picker_v2的使用

Flutter 地点选择插件 place_picker_v2 的使用

Flutter 地点选择插件 place_picker_v2 #

在 Flutter 中,place_picker_v2 是一个用于选择地点的插件。它支持暗主题和自定义本地化。

注意:此库不会受到此处指示的弃用影响。

提醒:请确保启用 Places APIMaps SDK for AndroidMaps SDK for iOSGeocoding API

使用方法 #

要使用此插件,请将其作为依赖项添加到您的 pubspec.yaml 文件中:

dependencies:
  place_picker_v2: ^版本号

然后运行 flutter pub get 来安装插件。

入门指南 #

该插件依赖于 google_maps_flutter 显示地图。请遵循以下指南将 API 密钥添加到 Android 和 iOS 包中。

Android #

在应用清单文件 android/app/src/main/AndroidManifest.xml 中指定您的 API 密钥并添加 ACCESS_FINE_LOCATION 权限:

<manifest ...

  <!-- 添加此权限 -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

  <application ...
    <!-- 在此处添加您的 API 密钥 -->
    <meta-data android:name="com.google.android.geo.API_KEY"
               android:value="YOUR KEY HERE"/>
    <activity ..../>
  </application>
</manifest>

更新您的 gradle.properties 文件:

android.enableJetifier=true
android.useAndroidX=true
org.gradle.jvmargs=-Xmx1536M

请确保在 build.gradle 文件中包含以下依赖项:

// 父级 build.gradle (android/build.gradle)
dependencies {
    classpath 'com.android.tools.build:gradle:3.3.0'
    classpath 'com.google.gms:google-services:4.2.0'
}
...

// 应用级 build.gradle (android/app/build.gradle)
compileSdkVersion 28
iOS #

在应用委托文件 ios/Runner/AppDelegate.m 中指定您的 API 密钥:

#import "AppDelegate.h"
#import "GeneratedPluginRegistrant.h"
#import "GoogleMaps/GoogleMaps.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [GMSServices provideAPIKey:@"YOUR KEY HERE"];
  [GeneratedPluginRegistrant registerWithRegistry:self];
  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end

或者,在 Swift 代码中,指定您的 API 密钥在应用委托文件 ios/Runner/AppDelegate.swift 中:

import UIKit
import Flutter
import GoogleMaps

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GMSServices.provideAPIKey("YOUR KEY HERE")
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

确保在应用的 Info.plist 文件中启用嵌入视图预览,并添加位置请求所需的权限:

<!-- 添加 io.flutter.embedded_views_preview 键值对 -->
<key>io.flutter.embedded_views_preview</key>
<string>YES</string>

<!-- 添加位置权限 -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to pick up your delivery location</string>

示例用法 #

首先,将插件导入到您的代码中:

import 'package:place_picker_v2/entities/location_result.dart';
import 'package:place_picker_v2/widgets/place_picker.dart';

创建一个方法,例如 showPlacePicker,并在按钮或 InkWellonTap 事件中调用它。LocationResult 将返回所选地点的名称和经纬度。您可以根据需要处理结果。可以传递一个可选的 LatLng displayLocation 以显示特定位置。这在您希望地图显示之前选择的位置时非常有用。

void showPlacePicker() async {
  LocationResult? result = await Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => PlacePicker("YOUR API KEY")));

  // 处理结果
  print(result);
}

完整示例代码

import 'package:flutter/material.dart';
import 'package:place_picker_v2/entities/location_result.dart';
import 'package:place_picker_v2/widgets/place_picker.dart';

class PickerDemo extends StatefulWidget {
  [@override](/user/override)
  State<StatefulWidget> createState() => PickerDemoState();
}

class PickerDemoState extends State<PickerDemo> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Picker Example')),
      body: Center(
        child: TextButton(
          child: Text("Pick Delivery location"),
          onPressed: () {
            showPlacePicker();
          },
        ),
      ),
    );
  }

  void showPlacePicker() async {
    LocationResult? result = await Navigator.of(context).push(
        MaterialPageRoute(builder: (context) => PlacePicker("YOUR API KEY")));

    // 处理结果
    print(result);
  }
}

更多关于Flutter地点选择插件place_picker_v2的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter地点选择插件place_picker_v2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用place_picker_v2插件来选择地点的代码示例。这个插件允许用户从地图上选择一个地点,并返回该地点的详细信息,如名称、地址和经纬度。

首先,确保你已经在pubspec.yaml文件中添加了place_picker_v2依赖项:

dependencies:
  flutter:
    sdk: flutter
  place_picker_v2: ^x.y.z  # 请将x.y.z替换为最新的版本号

然后,运行flutter pub get来安装依赖项。

接下来,在你的Flutter项目中,你可以按照以下步骤使用place_picker_v2插件:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:place_picker_v2/place_picker_v2.dart';
  1. 创建一个按钮来触发地点选择器
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Place Picker V2 Example'),
        ),
        body: PlacePickerExample(),
      ),
    );
  }
}

class PlacePickerExample extends StatefulWidget {
  @override
  _PlacePickerExampleState createState() => _PlacePickerExampleState();
}

class _PlacePickerExampleState extends State<PlacePickerExample> {
  PlaceResult? selectedPlace;

  void _pickPlace() async {
    final result = await PlacePicker.showPicker(
      context,
      apiKey: 'YOUR_GOOGLE_MAPS_API_KEY',  // 请替换为你的Google Maps API密钥
      language: 'en',
      initialPosition: LatLng(-34.397, 150.644),  // 初始位置,例如悉尼
      useCurrentLocation: true,  // 是否使用当前位置作为初始位置
      enableSearchBar: true,  // 是否启用搜索栏
      searchBarHintText: 'Search Place',
      onPlaceSelected: (place) {
        // 用户选择地点后的回调
        setState(() {
          selectedPlace = place;
        });
      },
      onError: (errorMessage) {
        // 发生错误时的回调
        print('Error: $errorMessage');
      },
    );

    if (result != null) {
      // 处理选择结果
      setState(() {
        selectedPlace = result;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          ElevatedButton(
            onPressed: _pickPlace,
            child: Text('Pick a Place'),
          ),
          if (selectedPlace != null)
            Padding(
              padding: const EdgeInsets.all(16.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Text('Name: ${selectedPlace!.name}'),
                  Text('Address: ${selectedPlace!.address}'),
                  Text('Latitude: ${selectedPlace!.latLng!.latitude}'),
                  Text('Longitude: ${selectedPlace!.latLng!.longitude}'),
                ],
              ),
            ),
        ],
      ),
    );
  }
}
  1. 注意事项
    • 请确保你已经获取了Google Maps API密钥,并将其替换为YOUR_GOOGLE_MAPS_API_KEY
    • 初始位置(initialPosition)可以设置为任何你想要的经纬度。
    • useCurrentLocation参数允许你决定是否使用设备的当前位置作为初始位置。
    • enableSearchBar参数允许你启用或禁用搜索栏。

这个示例展示了如何创建一个简单的Flutter应用,该应用允许用户从地图上选择一个地点,并显示所选地点的详细信息。你可以根据需要对这个示例进行扩展和自定义。

回到顶部