引发了另一个异常:NoSuchMethodError:在null上调用getter'latitude'

时间:2020-03-15 03:42:10

标签: flutter dart dart-pub

我正在尝试使用Flutter中的Location软件包,但是当我尝试在我的应用程序中显示纬度和经度时,我收到一条错误消息,指出“ getter'纬度'被调用为null。”我的设备上的位置服务是否有问题?当我在屏幕上单击时,还会提示我一个弹出窗口,提示“为了获得更好的体验,请打开使用Google位置服务的设备位置”,但是我已经在应用程序中启用了位置服务的权限。以下是我的代码

import 'package:flutter/material.dart'; 
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:provider/provider.dart';
import 'package:wasteagram/data/firestore_service.dart';
import 'package:location/location.dart'; 
import 'dart:async';
import 'package:wasteagram/model/user_location.dart'; 



class DetailPage extends StatefulWidget {

  final DocumentSnapshot post; 

  DetailPage({this.post}); 

  @override
  _DetailPageState createState() => _DetailPageState();
}

class _DetailPageState extends State<DetailPage> {

  LocationData locationData; 

  @override
  void initState() {
    super.initState(); 
    retrieveLocation(); 
  }

  void retrieveLocation() async {
    var locationService = Location(); 
    locationData = await locationService.getLocation(); 
    setState(() {

    });

  }

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.post.data["wastedate"])
      ), 
      body: Center(
        child: Container( 
          child: Column(
            children: <Widget> [
              Image.network(widget.post.data["image"]),
              Text(widget.post.data["wastedate"]), 
              Text(widget.post.data["wastenumber"]), 
              Text('Latitude: ${locationData.latitude}'),
              Text('Longitude: ${locationData.longitude}')

            ]
          )
        )
      ),
    );
  }
}

2 个答案:

答案 0 :(得分:0)

您正在尝试在异步调用结束之前访问纬度。您正在initState()上调用它,但是该方法可能在执行build()函数后结束,因此,当尝试构建Text('Latitude: ${locationData.latitude}')小部件时,locationData变量为{{1} }。一种快速的解决方法是在null上设置默认值,但是如果您要“等待”直到locationData方法结束,则可以:

retrieveLocation()

答案 1 :(得分:0)

尝试将将来的构建器用于异步方法回调,例如

FutureBuilder(
  future: retrieveLocation(),
  builder: (context, AsyncSnapshot snapshot) {
    if (snapshot.data == null) {
      return Center(child: CircularProgressIndicator());
    }
    return Center(
    child: Container( 
      child: Column(
        children: <Widget> [
          Image.network(widget.post.data["image"]),
          Text(widget.post.data["wastedate"]), 
          Text(widget.post.data["wastenumber"]), 
          Text('Latitude: ${locationData.latitude}'),
          Text('Longitude: ${locationData.longitude}')

        ]
      )
    )
  },
);

问题是在完全执行retrieveLocation()

之前调用了您的构建方法