Flutter地点搜索插件google_places_for_flutter_3的使用

发布于 1周前 作者 yibo5220 来自 Flutter

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

1 回复

更多关于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 插件进行基本的地点搜索。根据需求,你可以进一步自定义和扩展这个示例,比如添加更多的搜索选项、处理搜索结果的更多信息,或者改进用户界面。

回到顶部