Flutter地点搜索与选择插件nova_places_api的使用

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

Flutter地点搜索与选择插件nova_places_api的使用

Nova Places API

Nova Places API 是一个用于通过各种类别搜索地点信息的包,包括企业、显著的兴趣点和地理位置。 您可以通过地理位置或文本字符串进行搜索。 地点搜索会返回包含每个地点摘要信息的列表。

此包使用了 Google Places API,并且需要 API 密钥。请访问以下链接获取您的 API 密钥:Google Places API

记得为您的 API 密钥启用 Places API。

示例代码

import 'package:nova_places_api/nova_places_api.dart';

void main(List<String> arguments) async {
  final placesApi = PlacesApi(apiKey: 'api-key')..setLanguage('en');

  // first
  print('Places autocomplete');
  final response1 = await placesApi.placeAutocomplete(
    input: 'amoeba',
    location: LatLngLiteral(lat: 37.76999, lng: -1122.44696),
    radius: 500,
    strictBounds: true,
    types: ['establishment'],
    // sessionToken: generateSessionToken()
  );

  if (!responsea.isSuccess) {
    print(responsea.errorMessage);
  } else {
    final predictions = responsea.predictions;
    predictions.map((p) =&gt; p.description).forEach(print);
  }

  // second
  print('\nQuery autocomplete');
  final response2 = await placesApi.queryAutocomplete(
    input: 'pizza near San Francisco',
  );
  if (!response2.isSuccess) {
    print(response2.errorMessage);
  } else {
    final predictions = response2.predictions;
    predictions.map((p) =&gt; p.description).forEach(print);
  }

  if (responsea.isSuccess &amp;&amp; responsea.predictions.isNotEmpty) {
    // third;
    print('\nQuery place detail');
    final response3 = await placesApi.getPlaceDetails(
      placeId: responsea.predictions.first.placeId!,
    );
    if (!response3.isSuccess) {
      print(response3.errorMessage);
    } else {
      print(response3.result!.formattedAddress);
      print(response3.result!.geometry!.location);
    }
  }

  placesApi.dispose();
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用nova_places_api插件来实现地点搜索与选择的代码示例。这个插件允许你集成Google Places API,从而提供地点搜索和自动完成功能。

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

dependencies:
  flutter:
    sdk: flutter
  nova_places_api: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤实现地点搜索与选择功能:

  1. 初始化插件

在你的主文件(例如main.dart)中,首先导入必要的包并初始化NovaPlacesApi

import 'package:flutter/material.dart';
import 'package:nova_places_api/nova_places_api.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Location Search',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SearchScreen(),
    );
  }
}

class SearchScreen extends StatefulWidget {
  @override
  _SearchScreenState createState() => _SearchScreenState();
}

class _SearchScreenState extends State<SearchScreen> {
  final NovaPlacesApi _placesApi = NovaPlacesApi(
    apiKey: 'YOUR_GOOGLE_PLACES_API_KEY', // 请替换为你的Google Places API密钥
    language: 'en',
  );

  // 其他状态变量和方法...
}
  1. 创建搜索界面

_SearchScreenState类中,创建一个简单的搜索界面,包括一个TextField用于输入搜索查询,以及一个ListView用于显示搜索结果。

class _SearchScreenState extends State<SearchScreen> {
  final NovaPlacesApi _placesApi = NovaPlacesApi(
    apiKey: 'YOUR_GOOGLE_PLACES_API_KEY',
    language: 'en',
  );

  TextEditingController _controller = TextEditingController();
  List<Prediction> _predictions = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Location Search'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: <Widget>[
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                prefixIcon: Icon(Icons.search),
                labelText: 'Search for a place',
                suffixIcon: IconButton(
                  icon: Icon(Icons.clear),
                  onPressed: () {
                    _controller.clear();
                    setState(() {
                      _predictions.clear();
                    });
                  },
                ),
              ),
              onChanged: (value) async {
                if (value.isNotEmpty) {
                  setState(() {
                    _predictions = await _placesApi.getAutocompletePredictions(value);
                  });
                } else {
                  setState(() {
                    _predictions.clear();
                  });
                }
              },
            ),
            Expanded(
              child: _predictions.isEmpty
                  ? Center(child: Text('No results found'))
                  : ListView.builder(
                      itemCount: _predictions.length,
                      itemBuilder: (context, index) {
                        return ListTile(
                          title: Text(_predictions[index].description!),
                          onTap: () async {
                            final PlaceDetails place =
                                await _placesApi.getPlaceDetails(_predictions[index].placeId!);
                            // 在这里处理选中的地点,例如显示详细信息或导航到该地点
                            print('Selected Place: ${place.name}');
                          },
                        );
                      },
                    ),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的搜索界面,其中包括一个TextField用于输入搜索查询。当用户输入文本时,onChanged回调会被触发,并调用_placesApi.getAutocompletePredictions方法来获取自动完成预测。预测结果会显示在一个ListView中,用户可以点击某个预测项来获取更多详细信息。

请注意,你需要替换'YOUR_GOOGLE_PLACES_API_KEY'为你的实际Google Places API密钥,并确保你的API密钥具有适当的权限来使用Places API。

这个示例提供了一个基础框架,你可以根据需要进行扩展和自定义,例如添加错误处理、优化UI设计或集成地图功能来显示选中的地点。

回到顶部