如何通过按键转到当前位置?

问题描述 投票:0回答:1

我正在制作一个移动应用程序(flutter),并且已经添加了一个mapbox地图并在地图上显示了当前位置。如何添加一个按钮,单击后会将您带到当前位置?我在手机上启动该程序时也遇到问题,安装按钮在手机上可见,但单击它时没有任何反应。 如果您愿意,我可以显示我的 Mapbox 访问令牌和网址。

main.dart

import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:flutter_map_location_marker/flutter_map_location_marker.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(title: new Text('MapBox')),
        body: new FlutterMap(
          options: new MapOptions(
              initialCenter: new LatLng(56.946285, 24.105078),
              minZoom: 6,
              maxZoom: 20),
          children: [
            TileLayer(
              urlTemplate:
                  'url',
              // userAgentPackageName: 'com.example.app',
              additionalOptions: {
                'accessToken':
                    'token'
              },
            ),
            RichAttributionWidget(
              attributions: [
                TextSourceAttribution(
                  'OpenStreetMap contributors',
                  onTap: () => launchUrl(
                      Uri.parse('https://openstreetmap.org/copyright')),
                ),
              ],
            ),
            CurrentLocationLayer(
              followOnLocationUpdate: FollowOnLocationUpdate.always,
              turnOnHeadingUpdate: TurnOnHeadingUpdate.never,
              style: LocationMarkerStyle(
                marker: const DefaultLocationMarker(
                  // color: Colors.blue,
                  child: Icon(
                    Icons.navigation,
                    color: Colors.white,
                  ),
                ),
                markerSize: const Size(40, 40),
                markerDirection: MarkerDirection.heading,
              ),
            )
          ],
        ));
  }
}

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  flutter_map: ^6.0.1
  geolocator: ^10.1.0
  latlong2: ^0.9.0
  location: ^5.0.3
  url_launcher: ^6.2.1
  flutter_map_location_marker: ^8.0.2

添加一个按钮,单击该按钮会将您带到当前位置。

flutter dart location mapbox
1个回答
0
投票

要移动到当前位置,您需要使用MapController。

MapController mapController = MapController();

然后将此控制器分配给Flutter Map的mapController参数。

然后使用地理定位器获取用户的当前位置,然后使用mapController 导航到该位置。

          onPressed: () {
              Geolocator.getCurrentPosition(
                      desiredAccuracy: LocationAccuracy.high)
                  .then((pickedCurrentLocation) {
                setState(() {
                  currentLocation = pickedCurrentLocation;
                });
                mapController.move(
                    LatLng(currentLocation.latitude,
                        currentLocation.longitude),
                    6);
              });
            }

这应该将用户移动到当前位置。

完整代码示例如下:

class _MyHomePageState extends State<MyHomePage> {
  var currentLocation;

  MapController mapController = MapController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: const Text('MapBox')),
        body: FlutterMap(
          mapController: mapController,
          options: const MapOptions(
              initialCenter: LatLng(56.946285, 24.105078),
              minZoom: 6,
              maxZoom: 20),
          children: [
            TileLayer(
              urlTemplate:
                  'url',
              // userAgentPackageName: 'com.example.app',
              additionalOptions: {
                'accessToken':
                    'token'
              },
            ),
            RichAttributionWidget(
              attributions: [
                TextSourceAttribution(
                  'OpenStreetMap contributors',
                  onTap: () => launchUrl(
                      Uri.parse('https://openstreetmap.org/copyright')),
                ),
              ],
            ),
            CurrentLocationLayer(
              // followOnLocationUpdate: FollowOnLocationUpdate.always,
              turnOnHeadingUpdate: TurnOnHeadingUpdate.never,
              style: const LocationMarkerStyle(
                marker: DefaultLocationMarker(
                  // color: Colors.blue,
                  child: Icon(
                    Icons.navigation,
                    color: Colors.white,
                  ),
                ),
                markerSize: Size(40, 40),
                markerDirection: MarkerDirection.heading,
              ),
            ),
            TextButton(
                child: Text("Go home"),
                onPressed: () {
                  Geolocator.getCurrentPosition(
                          desiredAccuracy: LocationAccuracy.high)
                      .then((pickedCurrentLocation) {
                    setState(() {
                      currentLocation = pickedCurrentLocation;
                    });
                    mapController.move(
                        LatLng(currentLocation.latitude,
                            currentLocation.longitude),
                        6);
                  });
                })
          ],
        ));
  }
}

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.