Flutter地点搜索插件google_places_for_flutter_3的使用
Flutter地点搜索插件 google_places_for_flutter_3
的使用
google_places_for_flutter_3
是一个用于Flutter的插件,它利用Google Maps API来实现一个自动补全地点的TextField。用户在输入时可以自动补全地点,并且还能获取坐标等更多信息。
该插件扩展了 Google Maps for Flutter 插件,并且维护了一个超过三年未更新的包:google_places_for_flutter。
安装
在项目的 pubspec.yaml
文件中添加依赖:
dependencies:
google_places_for_flutter_3: ^1.0.4
或者直接运行以下命令:
flutter pub add google_places_for_flutter_3
使用方法
基本用法
下面是一个简单的示例,展示了如何使用 SearchGooglePlacesWidget
来实现地点搜索功能:
import 'package:flutter/material.dart';
import 'package:google_places_for_flutter_3/google_places_for_flutter_3.dart';
class LocationSearchPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('地点搜索'),
),
body: Center(
child: SearchGooglePlacesWidget(
placeType: PlaceType.address, // 可以选择不同的类型如:PlaceType.cities, PlaceType.geocode, PlaceType.region 等
placeholder: '请输入地址',
apiKey: '你的Google Maps API密钥',
onSearch: (Place place) {},
onSelected: (Place place) async {
print('地址: ${place.description}');
},
),
),
);
}
}
高级用法
下面是一个更复杂的示例,展示了如何结合 GoogleMap
使用 SearchGooglePlacesWidget
,并在选择地点后自动移动地图视图:
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_places_for_flutter_3/google_places_for_flutter_3.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter 地点搜索示例'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Completer<GoogleMapController> _controller = Completer();
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Stack(
children: [
GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(
target: LatLng(39.9042, 116.4074), // 默认位置(北京)
zoom: 10,
),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
),
Positioned(
top: 10,
left: 10,
right: 10,
child: SearchGooglePlacesWidget(
apiKey: '你的Google Maps API密钥',
language: 'zh', // 设置为中文语言
radius: 30000, // 搜索半径
onSelected: (Place place) async {
final geolocation = await place.geolocation;
// 动画移动地图到选定的位置
final GoogleMapController controller = await _controller.future;
controller.animateCamera(
CameraUpdate.newLatLng(geolocation!.coordinates),
);
controller.animateCamera(
CameraUpdate.newLatLngBounds(geolocation.bounds, 0),
);
},
onSearch: (Place place) {},
),
),
],
),
);
}
}
更多关于Flutter地点搜索插件google_places_for_flutter_3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地点搜索插件google_places_for_flutter_3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 google_places_for_flutter_3
插件在 Flutter 应用中实现地点搜索功能的代码示例。这个插件允许你通过 Google Places API 搜索地点,并获取相关的地点信息。
首先,你需要在 pubspec.yaml
文件中添加依赖项:
dependencies:
flutter:
sdk: flutter
google_places_for_flutter_3: ^x.y.z # 请替换为最新的版本号
然后运行 flutter pub get
来获取依赖项。
接下来,你需要在 Android 和 iOS 项目中配置 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
文件中添加一个键值对,虽然 google_places_for_flutter_3
插件主要使用 Android 和 Web 的 API 密钥配置方式,但确保你的 iOS 项目也有相应的 API 访问权限。
然后,在你的 Dart 代码中,你可以这样使用 google_places_for_flutter_3
插件:
import 'package:flutter/material.dart';
import 'package:google_places_for_flutter_3/google_places_for_flutter_3.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Google Places Search',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PlaceSearchScreen(),
);
}
}
class PlaceSearchScreen extends StatefulWidget {
@override
_PlaceSearchScreenState createState() => _PlaceSearchScreenState();
}
class _PlaceSearchScreenState extends State<PlaceSearchScreen> {
final PlacePickerController _picker = PlacePickerController();
String _searchResult = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Google Places Search'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
decoration: InputDecoration(
labelText: 'Search for a place',
suffixIcon: IconButton(
icon: Icon(Icons.search),
onPressed: () async {
final result = await _picker.pickPlace(
context,
apiKey: 'YOUR_API_KEY', // 在这里提供你的 API 密钥
mode: Mode.fullscreen,
);
if (result != null) {
setState(() {
_searchResult = result.name!;
});
}
},
),
),
),
SizedBox(height: 20),
Text(
'Selected Place: $_searchResult',
style: TextStyle(fontSize: 18),
),
],
),
),
);
}
@override
void dispose() {
_picker.dispose();
super.dispose();
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,它有一个文本字段用于输入搜索词,并且当用户点击搜索图标时,会打开一个全屏的地点选择器。用户选择一个地点后,该地点的名称会显示在屏幕上。
请注意,你需要将 'YOUR_API_KEY'
替换为你自己的 Google Places API 密钥。
这个示例展示了如何使用 google_places_for_flutter_3
插件进行基本的地点搜索。根据需求,你可以进一步自定义和扩展这个示例,比如添加更多的搜索选项、处理搜索结果的更多信息,或者改进用户界面。