google_maps_pick_place
一个 pub.dev 包,可帮助从 Google 地图中选择位置
一个 pub.dev 包,可帮助从 Google 地图中选择位置
{"sdk":"flutter"}^2.1.5^8.2.1^2.0.4^9.2.0^4.0.6{"sdk":"flutter"}^2.0.0以下为英文项目原文快照,最新内容请访问 GitHub。
A pub.dev package to handle picking place from google map and use the picked data in the app.
linkedIn GitHub followers GitHub Repo stars GitHub forks Pub Version
https://raw.githubusercontent.com/youssufhebish/google_maps_pick_place/HEAD/resources/preview.gif
Get an API key at https://cloud.google.com/maps-platform/.
Enable Google Map SDK for each platform.
For more details, see Getting started with Google Maps Platform.
minSdkVersion in android/app/build.gradle:android {
defaultConfig {
minSdkVersion 20
}
}
This means that app will only be available for users that run Android SDK 20 or higher.
- Make sure you set the
compileSdkVersionin your "android/app/build.gradle" file to 31:android { compileSdkVersion 31 ... }
android/app/src/main/AndroidManifest.xml:<manifest ...
<application ...
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="YOUR KEY HERE"/>
- Add the following to your "gradle.properties" file:
android.useAndroidX=true android.enableJetifier=true
- Make sure you replace all the
android.dependencies to their AndroidX counterparts (a full list can be found Android migration guide).
To use Hybrid Composition
to render the GoogleMap widget on Android, set AndroidGoogleMapsFlutter.useAndroidViewSurface to
true.
if (defaultTargetPlatform == TargetPlatform.android) {
AndroidGoogleMapsFlutter.useAndroidViewSurface = true;
}
To set up, specify your API key in the application delegate ios/Runner/AppDelegate.m:
#include "AppDelegate.h"
#include "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
Or in your swift code, specify your API key in the application delegate 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)
}
}
On iOS you'll need to add the following entries to your Info.plist file (located under ios/Runner) in order to access the device's location.
Simply open your Info.plist file and add the following:
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs access to location when open and in the background.</string>
In addition, you need to add the Background Modes capability to your XCode project (Project > Signing and Capabilties > "+ Capability" button) and select Location Updates.g>This app needs access to location when open and in the background.
Opt-in to the embedded views preview by adding a boolean property to the app's Info.plist file
with the key io.flutter.embedded_views_preview and the value YES.
<key>io.flutter.embedded_views_preview</key>
<true/>
You can use GoogleMapsPickPlace by pushing to a new page using Navigator, OR put as a child of any widget. When the user picks a place on the map, it will return result to 'getResult' with FullAddress type.
import 'package:flutter/material.dart';
import 'package:google_maps_pick_place/google_maps_pick_place.dart';
// ...
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => GoogleMapsPickPlace(
apiKey: "YOU GOOGLE MAPS API KEY",
getResult: (FullAddress result) {
print('${result.address}');
/// Don't use Navigator.of(context).pop() it's build in the method
},
),
),
);
Searching for a place feature needs a paid google map api key. With free key map and picking a place feature will work correctly without any error. But searching for a place feature will not work.
| Parameter | Type | Description |
|---|---|---|
| apiKey | String | Google Map Api Token |
| mapLanguage | Language | map's language used in search and other widgets |
| getResult | Function(FullAddress)? | Method of Getting the address and position |
| initialPosition | LatLng | Initial position of the map in case there's no location and GPS is off |
| enableMyLocationButton | bool | Enable or disable the My Location button |
| enableSearchButton | bool | Enable or disable the Search button |
| loader | Widget | Widget to show while the map is loading |
| doneButton | Widget? | Widget to show when the map is done loading and apply getResult method |
| errorButton | Widget? | Widget to show when there's a corruption or there's no internet connection |
| zoomFactor | double | Zoom factor of the map (default is 5.0) |
| markerColor | MarkerColor | Marker color of the map (default is red) |
| Parameter | Type | Description |
|---|---|---|
| address | String? | Formatted address |
| position | Position? | Position of the address |
MIT