繁体   English   中英

Flutter iOS 应用程序在询问位置时立即崩溃

[英]Flutter iOS App Crashes Immediately when asking for location

我只是试图使用位置酒吧 package 获取设备的当前位置,但是应用程序在运行时崩溃。 我确保对Info.plist的所有权限,即

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>...</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>...</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>...</string>
<key>UIBackgroundModes</key>
<string>location</string>

当我从 package 位置调用任何方法时,应用程序会立即崩溃。

这是我的实现(直接取自 package 示例):


// user_location.dart

import 'package:location/location.dart';

class UserLocation {
  Location location = Location();

  late bool _serviceIsEnabled;
  late PermissionStatus _permissionGranted;
  late LocationData _locationData;

  Future<LocationData?> getLocation() async {
    print("Getting location");
   
    _serviceIsEnabled = await location.serviceEnabled(); // crashes right here <-

    if (!_serviceIsEnabled) {
      _serviceIsEnabled = await location.requestService();
      if (!_serviceIsEnabled) return null;
    }

    _permissionGranted = await location.hasPermission();

    if (_permissionGranted == PermissionStatus.denied) {
      _permissionGranted = await location.requestPermission();
      if (_permissionGranted != PermissionStatus.granted) {
        return null;
      }
    }

    _locationData = await location.getLocation();
    return _locationData;
  }
}

// main.dart

Future main() async {
  await dotenv.load();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  LocationData? _userLocation;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      setState(() async {
        final location = await UserLocation().getLocation();
        _userLocation = location;
      });
    });
  }

使用 flutter v3.0.5 和位置 ^4.4.0

这个帖子解决了

只需在 Xcode 的 Signing & Capabilities 中启用后台模式 > 位置更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM