flutter - 无法无条件访问属性 'latitude' ,因为接收者可以是 'null' 。尝试将访问设置为有条件的(使用 '?.' )

标签 flutter geolocation dart-null-safety

我在 Text 中面临空安全问题( "纬度:"+ currentPosition.latitude.toString(), )这一行。我不知道如何使 currentPosition.latitude 不为 null 帮助我解决这些问题。

它给了我这个属性“latitude”不能无条件访问,因为接收器可以为“null”。 尝试使访问成为有条件的(使用“?.”)或向目标添加空检查(“!”)。错误。

无法无条件访问属性“longitude”,因为接收者可能为“null”。 尝试使访问成为有条件的(使用“?.”)或向目标添加空检查(“!”)。错误

import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';

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

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

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

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

  @override
  State<HomeApp> createState() => _HomeAppState();
}

class _HomeAppState extends State<HomeApp> {
  String currentAddress = 'my address';
  Position? currentPosition;
  Future<Position?> _determinePosition() async {
    bool serviceEnabled;
    LocationPermission permission;
    serviceEnabled = await Geolocator.isLocationServiceEnabled();
    if (!serviceEnabled) {
      Fluttertoast.showToast(msg: 'Please keep your location on.');
    }
    permission = await Geolocator.requestPermission();
    if (permission == LocationPermission.denied) {
      permission = await Geolocator.requestPermission();
      if (permission == LocationPermission.denied) {
        Fluttertoast.showToast(msg: 'Location permission is denied.');
      }
    }
    if (permission == LocationPermission.deniedForever) {
      Fluttertoast.showToast(msg: 'Location permission is denies forever.');
    }
    Position position = await Geolocator.getCurrentPosition(
        desiredAccuracy: LocationAccuracy.high);
    try {
      List<Placemark> placemark =
          await placemarkFromCoordinates(position.latitude, position.longitude);
      Placemark place = placemark[0];
      setState(() {
        currentPosition = position;
        currentAddress =
            "${place.locality},${place.postalCode},${place.country}";
      });
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Location App'),
      ),
      body: Center(
        child: Column(
          children: [
            Text(
              currentAddress,
              style: TextStyle(
                fontSize: 20,
              ),
            ),
            (currentPosition != null)
                ? Text(
                    "Latitude: " + currentPosition.latitude.toString(),
                  )
                : Container(),
            (currentPosition != null)
                ? Text(
                    "Longitude: " + currentPosition.longitude.toString(),
                  )
                : Container(),
            TextButton(
              onPressed: () {
                _determinePosition();
              },
              child: Text('Locate Me'),
            ),
          ],
        ),
      ),
    );
  }
}

最佳答案

更改为:

 currentPosition!.latitude.toString()

由于您检查了 currentPosition 不为空,因此您可以使用 ! 来表示“我知道它可以为空,但我也知道此时它绝对不为空” ”。

关于flutter - 无法无条件访问属性 'latitude' ,因为接收者可以是 'null' 。尝试将访问设置为有条件的(使用 '?.' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71222771/

相关文章:

flutter_reactive_value : Getting an Error with just Importing the Package

java - 从 2 个或 3 个已知点到距离的点的坐标

android - 使用 --no-sound-null-safety Flutter 生成 App Bundle

android - 对于允许根据地理位置播放音乐的应用程序有什么用?

php - 使用 AJAX 将 lat 和 lng 变量发送到 PHP 以进行邻近度计算

flutter - 返回类型 'Future<bool?> Function()' 不是闭包上下文所要求的 'Future<bool>'

Flutter2 升级 : Why build_runner package is not null-safe

google-maps-api-3 - 来自地理编码 API 的响应

ios - flutter ios "Could not build the application for the simulator."

flutter - 如何获取 Flutter 应用的构建和版本号