【问题标题】:I have this problem when I do packages upgrade "location Service"我在升级“位置服务”时遇到这个问题
【发布时间】:2020-06-29 00:28:39
【问题描述】:

当我升级包时,我得到这个错误 " lib/location_helper.dart:43:23: 错误:'PermissionStatus' 类型的值不能分配给'bool' 类型的变量。 - “PermissionStatus”来自“package:location/location.dart”(“/D:/flutter/.pub-cache/hosted/pub.dartlang.org/location-2.5.3/lib/location.dart”)。 _permission = 等待 _locationService.requestPermission(); ^ 目标 kernel_snapshot 失败:异常:快照创建期间出错:null 构建失败。 "

location_helper

import 'package:location/location.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'dart:async';
import 'package:flutter/services.dart';

class LocationHelper {
  ///init as singleton
  static LocationHelper _locationHelper;

  static LocationHelper instance() {
    if (_locationHelper == null) {
      _locationHelper = LocationHelper._();
    }
    return _locationHelper;
  }

  LocationHelper._();

  LocationData _startLocation;
  LocationData _currentLocation;
  StreamSubscription<LocationData> _locationSubscription;
  Location _locationService = new Location();
  bool _permission = false;
  String error;
  Completer<GoogleMapController> _controller = Completer();
  static final CameraPosition _initialCamera = CameraPosition(
    target: LatLng(0, 0),
    zoom: 4,
  );

  CameraPosition _currentCameraPosition;

  Future<void> _initPlatformState() async {
    await _locationService.changeSettings(
        accuracy: LocationAccuracy.HIGH, interval: 1000);

    LocationData location;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      bool serviceStatus = await _locationService.serviceEnabled();
      print("Service status: $serviceStatus");
      if (serviceStatus) {
        _permission = await _locationService.requestPermission();
        print("Permission: $_permission");
        if (_permission) {
          location = await _locationService.getLocation();

          _locationSubscription = _locationService
              .onLocationChanged()
              .listen((LocationData result) async {
            _currentCameraPosition = CameraPosition(
                target: LatLng(result.latitude, result.longitude), zoom: 16);

            final GoogleMapController controller = await _controller.future;
            controller.animateCamera(
                CameraUpdate.newCameraPosition(_currentCameraPosition));

            _currentLocation = result;
          });
        }
      } else {
        bool serviceStatusResult = await _locationService.requestService();
        print("Service status activated after request: $serviceStatusResult");
        if (serviceStatusResult) {
          _initPlatformState();
        }
      }
    } on PlatformException catch (e) {
      print(e);
      if (e.code == 'PERMISSION_DENIED') {
        error = e.message;
      } else if (e.code == 'SERVICE_STATUS_ERROR') {
        error = e.message;
      }
      location = null;
    }

    _startLocation = location;
  }

  Future<LocationData> getCoordinates() async {
    await _initPlatformState();

    return _startLocation;
  }

  Future<String> getCoordinatesAsString() async {
    await _initPlatformState();

    return '${_startLocation.latitude}' + ',' + '${_startLocation.longitude}';
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    我认为问题在于您的“bool _permission = false”。用 bool 来做是错误的。 我查了 Location 包,你应该像这样检查权限;

    PermissionStatus _permission;
    
    _permission = await location.hasPermission();
    if (_permission == PermissionStatus.DENIED) {
      _permission = await location.requestPermission();
      if (_permission != PermissionStatus.GRANTED) {
        return;
      }
    } // Then do you codes.
    

    【讨论】:

    • 我不能,因为它太长了 4482 个字符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    相关资源
    最近更新 更多