Flutter地点选择插件google_places_picker的使用
Flutter地点选择插件google_places_picker的使用
Google Places Autocomplete for Flutter 是一个用于在Flutter应用中实现地点选择功能的插件。本文将详细介绍如何使用 google_places_picker
插件,并提供一个完整的示例 demo。
Getting Started
Setting up
- 在
main.dart
文件的initState
方法中运行initialize
方法(或任何只调用一次的地方),并传入您的 API 密钥作为参数:
import 'package:google_places_picker/google_places_picker.dart';
PluginGooglePlacePicker.initialize(
androidApiKey: "YOUR_ANDROID_API_KEY",
iosApiKey: "YOUR_IOS_API_KEY",
);
Usage
您可以通过 showAutocomplete
方法使用该插件,该方法接受一个 PlaceAutocompleteMode
参数来确定在 Android 上显示全屏控件还是覆盖控件(在 iOS 上没有效果)。它返回一个包含以下属性的 Place
对象:
- name
- id
- address
- latitude
- longitude
完整示例 Demo
下面是一个完整的示例代码,展示了如何在 Flutter 应用中集成 google_places_picker
插件。
import 'package:flutter/material.dart';
import 'package:google_places_picker/google_places_picker.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _placeName = 'Unknown';
@override
void initState() {
super.initState();
PluginGooglePlacePicker.initialize(
androidApiKey: "YOUR_ANDROID_API_KEY",
iosApiKey: "YOUR_IOS_API_KEY",
);
}
Future<void> _showAutocomplete() async {
String placeName;
var locationBias = LocationBias()
..northEastLat = 20.0
..northEastLng = 20.0
..southWestLat = 0.0
..southWestLng = 0.0;
var locationRestriction = LocationRestriction()
..northEastLat = 20.0
..northEastLng = 20.0
..southWestLng = 0.0
..southWestLat = 0.0;
var country = "US";
try {
var place = await PluginGooglePlacePicker.showAutocomplete(
mode: PlaceAutocompleteMode.MODE_OVERLAY,
countryCode: country,
restriction: locationRestriction,
typeFilter: TypeFilter.ESTABLISHMENT);
placeName = place?.name ?? "Null place name!";
} catch (e) {
print("Error: $e");
placeName = "Error occurred";
}
if (!mounted) return;
setState(() {
_placeName = placeName;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Place picker example app'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _showAutocomplete,
child: Text("Show autocomplete"),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("Place name: "),
Text(_placeName),
],
),
],
),
),
),
);
}
}
注意事项
- API Key: 确保替换
"YOUR_ANDROID_API_KEY"
和"YOUR_IOS_API_KEY"
为实际的 Google Places API 密钥。 - 权限: 确保在
AndroidManifest.xml
和Info.plist
中添加必要的权限和配置。 - 依赖管理: 在
pubspec.yaml
文件中添加google_places_picker
依赖:dependencies: google_places_picker: ^latest_version
更多关于Flutter地点选择插件google_places_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地点选择插件google_places_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用google_places_picker
插件来选择地点的示例代码。这个插件可以帮助你集成Google Places API,让用户能够轻松选择地点。
首先,确保你已经在pubspec.yaml
文件中添加了google_places_picker
依赖:
dependencies:
flutter:
sdk: flutter
google_places_picker: ^2.1.0+2 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你需要配置Google Places API。这包括在你的Google Cloud项目中启用Places API,并获取一个API密钥。确保你的API密钥在Android和iOS项目中正确配置(通常是在AndroidManifest.xml
和Info.plist
文件中)。
下面是一个完整的Flutter应用示例,展示如何使用google_places_picker
插件:
import 'package:flutter/material.dart';
import 'package:google_places_picker/google_places_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Google Places Picker Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PlacePickerDemo(),
);
}
}
class PlacePickerDemo extends StatefulWidget {
@override
_PlacePickerDemoState createState() => _PlacePickerDemoState();
}
class _PlacePickerDemoState extends State<PlacePickerDemo> {
PlaceResult? _selectedPlace;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Google Places Picker Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_selectedPlace != null
? '${_selectedPlace!.name}, ${_selectedPlace!.vicinity}'
: 'No place selected',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
final result = await PlacePicker.show(
context: context,
apiKey: 'YOUR_API_KEY', // 替换为你的Google Places API密钥
initialPosition: LatLng(37.7749, -122.4194), // 旧金山初始位置
radius: 1500,
);
if (result != null) {
setState(() {
_selectedPlace = result;
});
}
},
child: Text('Pick a Place'),
),
],
),
),
);
}
}
在这个示例中:
- 我们创建了一个简单的Flutter应用,其中包含一个按钮和一个文本显示区域。
- 当用户点击按钮时,会调用
PlacePicker.show
方法来显示地点选择器。 - 用户选择一个地点后,结果会被存储在
_selectedPlace
变量中,并在UI中显示。
请确保将YOUR_API_KEY
替换为你从Google Cloud获取的API密钥。
这个示例代码提供了一个基础框架,你可以根据需要进行扩展和修改,比如添加错误处理、优化UI等。