我正在尝试使用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}')
]
)
)
),
);
}
}
答案 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()