断言失败:'纬度!= null':不正确。我已经尝试了几件事
Posted
技术标签:
【中文标题】断言失败:\'纬度!= null\':不正确。我已经尝试了几件事【英文标题】:Failed assertion: 'latitude != null': is not true. I've tried several things断言失败:'纬度!= null':不正确。我已经尝试了几件事 【发布时间】:2020-11-14 18:23:47 【问题描述】:错误:
location.dart 断言失败:....'latitude != null': is not true.
显然,答案就在这里: Flutter - Google Maps doesn´t wait to Location
但是,这些都对我不起作用。
尝试:
当 lat 和 lng 为空时显示一个空的 Container()...
我不知道这到底是什么... ==??喜欢python?
纬度 == 空 || lng == 空 ?容器()
我的猜测是这个人想让我将 lat 和 lng 分配为 null 并将谷歌地图放入容器中。这里什么都没有:
var lat = null;
var lng = null;
我将我的 sizebox 转换为容器并更改了初始相机位置:
之前:
SizedBox(
height: 350,
child: GoogleMap(
markers: Set.from(markers),
initialCameraPosition: _myLocation,
myLocationEnabled: true,
compassEnabled: true,
myLocationButtonEnabled: true,
mapType: MapType.normal,
onMapCreated: (GoogleMapController controller)
controller.setMapStyle(Utils.mapStyles);
),
之后:
Container(
height: 350,
child: GoogleMap(
markers: Set.from(markers),
initialCameraPosition: CameraPosition(
target: LatLng(lat, lng),
zoom: 15.0),
myLocationEnabled: true,
compassEnabled: true,
myLocationButtonEnabled: true,
mapType: MapType.normal,
onMapCreated: (GoogleMapController controller)
controller.setMapStyle(Utils.mapStyles);
),
),
结果:
断言失败:“纬度!= null”:不正确。
程序现在甚至无法编译。戳了一下,我把目标改成了:target: LatLng(null, null),
同样的错误。什么都没有改变。
“你可以显示一个加载器,直到你得到你的位置”
没用。
这就是我从 Google 表格中调用我的经度和纬度点的方式。我正在尝试在按钮上绘制它们:
Future<void> _plotCurrent() async
Map<double,double> m = (await sheet.values.map.column(3, fromRow:2)).map((key, value)=>
MapEntry(double.parse(key), double.parse(value)));
Map<double,double> m2 = (await sheet.values.map.column(4, fromRow:2)).map((key, value)=>
MapEntry(double.parse(key), double.parse(value)));
Iterable _markers = Iterable.generate(10, (index)
LatLng latLngMarker = LatLng(m["test$index"], m2["test$index"]);
return Marker(markerId: MarkerId("test$index"),position: latLngMarker);
);
setState(()
markers = _markers;
);
我已经阅读了一些关于必须将我的 Widget 构建树更改为 Future 类型的内容。但是,我对 Dart 仍然很糟糕。我不知道该怎么做。这能行吗?这是我的小部件的开始:
@override
Widget build(BuildContext context)
return Scaffold(
key: _scaffoldKey,
resizeToAvoidBottomPadding: false,
appBar: AppBar(
title: Text(widget.title, style: TextStyle(fontSize: 11)),
centerTitle: true,
),
body:
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Form(
key: _formKey,
child: Padding(
padding: EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextFormField(
请帮忙。谢谢。
编辑:
这毫无意义.. 地理定位器是把这搞砸了还是什么?这是我现在拥有的:
@override
initState()
super.initState();
getLocation();
var lng, lat;
Future getLocation() async
Position position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
setState(()
lat = position.latitude;
lng = position.longitude;
print(lng);
);
@override
Widget build(BuildContext context)
if (lat == null || lng == null)
return Container();
Container(
height: 350,
child: GoogleMap(
markers: Set.from(markers),
initialCameraPosition: CameraPosition(
target: LatLng(lat, lng),
zoom: 15.0),
myLocationEnabled: true,
compassEnabled: true,
myLocationButtonEnabled: true,
mapType: MapType.normal,
onMapCreated: (GoogleMapController controller)
controller.setMapStyle(Utils.mapStyles);
),
);
return Scaffold(
key: _scaffoldKey,
resizeToAvoidBottomPadding: false,
appBar: AppBar(
title: Text(widget.title, style: TextStyle(fontSize: 11)),
centerTitle: true,
),
body:
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Form(
key: _formKey,
child: Padding(
第一个问题是,我的地图不再显示了。我可以打印坐标......所以,我不明白为什么错误仍然显示并且在我按下 plot 后一切都崩溃了。有人吗?
编辑 2:
这可能与我的错误有关:
相关的导致错误的小部件是:MyHomePage file:///C:/Users/xxx/Desktop/xxxxx/xxxx-xxx/lib/main.dart:92:13 什么时候 抛出异常,这是堆栈:
指向这个小部件:
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return MaterialApp(
title: 'xx',
theme: ThemeData(
primarySwatch: colorCustom,
hintColor: Colors.white,
canvasColor: colorCustom,
backgroundColor: Colors.red,
),
home: MyHomePage(title: 'xx'),
);
我没有足够的使用 Dart 的经验,不知道主页的标题与我的其他小部件分开有什么问题。这是一件坏事吗?
我将小部件移动到其他地方并应用了容器。我的应用程序不会以 lat == null || 开头lng == null 语句并抛出以下错误:
在构建 GoogleMap(state: _GoogleMapState#81111):未找到方向性小部件。
我认为问题是我加载了太多垃圾。我迷路了。
void main() => runApp(
RestartWidget(child: MyApp()),
);
class RestartWidget extends StatefulWidget
RestartWidget(this.child);
final Widget child;
static void restartApp(BuildContext context)
context.findAncestorStateOfType<_RestartWidgetState>().restartApp();
@override
_RestartWidgetState createState() => _RestartWidgetState();
class _RestartWidgetState extends State<RestartWidget>
Key key = UniqueKey();
void restartApp()
setState(()
key = UniqueKey();
);
@override
Widget build(BuildContext context)
return KeyedSubtree(
key: key,
child: widget.child,
);
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return MaterialApp(
title: 'xxxxxxx',
theme: ThemeData(
primarySwatch: colorCustom,
hintColor: Colors.white,
canvasColor: colorCustom,
backgroundColor: Colors.red,
),
home: MyHomePage(title: 'xxxxxxx'),
);
class MyHomePage extends StatefulWidget
MyHomePage(Key key, this.title) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
class _MyHomePageState extends State<MyHomePage>
final _formKey = GlobalKey<FormState>();
final _scaffoldKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context)
return Scaffold(
key: _scaffoldKey,
等等...我迷失在所有这些小部件中。有些东西导致我的位置为空。我不知道。有人吗?
【问题讨论】:
【参考方案1】:在处理异步数据加载时,您需要有一个占位符容器,直到您的数据被加载。在这种情况下,这是 lat 和 long 参数。
Widget methodReturningWidget()
// In case your data is not ready, return empty container
if (lat == null || long == null)
return Container();
// In case your data is present, return GoogleMap object
return Container(
height: 350,
child: GoogleMap(
markers: Set.from(markers),
initialCameraPosition: CameraPosition(
target: LatLng(lat, long),
zoom: 15.0),
myLocationEnabled: true,
compassEnabled: true,
myLocationButtonEnabled: true,
mapType: MapType.normal,
onMapCreated: (GoogleMapController controller)
controller.setMapStyle(Utils.mapStyles);
),
);
导致您的应用程序崩溃的部分代码是这里的LatLng(lat, long)
,它试图创建对象,但它的参数 lat 和 long 为空。
【讨论】:
LatLng 是否为 null 或以这种方式设置都没有关系: initialCameraPosition: _myLocation, myLocation 为静态 final CameraPosition _myLocation = CameraPosition(target: LatLng(33.3088364, -72.6965111), zoom: 7) ;在我按下按钮绘制坐标后,它仍然会崩溃。 :/ 还有其他想法吗? 哦,等一下。刚刚看到你做了一个容器。现在试试。 完全相同的错误。 :-/ 我设置了 var long, lat;顶上..我的地图加载得很好,但只要我按下按钮来绘制点......断言失败。 为什么我什至需要为此启用经纬度或位置。这太疯狂了。我只是想绘制点。我不明白为什么我的位置甚至必须启用才能执行此操作。几天来我一直在试图找出这些垃圾 没关系。我的地图甚至没有加载。我只是忘记将它从原始树中删除并将其移动到返回容器函数下。【参考方案2】:我没有一个大概的答案。不过,我相信我找到了原因。
Map<double, double> m = (await sheet.values.map.column(3, fromRow: 2)).map((
key, value) =>
MapEntry(double.parse(key), double.parse(value)));
Map<double, double> m2 = (await sheet.values.map.column(4, fromRow: 2))
.map((key, value) =>
MapEntry(double.parse(key), double.parse(value)));
print(_markers);
setState(()
Iterable _markers = Iterable.generate(10, (index)
LatLng latLngMarker = LatLng(m["test$index"], m2["test$index"]);
return Marker(markerId: MarkerId("test$index"), position: latLngMarker);
);
markers = _markers;
简而言之,我以某种方式不正确地调用了 lat 和 long,它引发了错误。我通过从当前位置绘制一个点来验证这一点。这样做没有任何问题。我将不得不研究如何正确调用我的列(坐标)。如果有人有任何见解,请告诉我。谢谢
编辑:我想我找到了问题。
我的 m 和 m2 正在打印键和值...!!钥匙把一切都搞砸了。
【讨论】:
以上是关于断言失败:'纬度!= null':不正确。我已经尝试了几件事的主要内容,如果未能解决你的问题,请参考以下文章
断言失败:第 24 行 pos 15:'color != null && color.alpha == 0xFF':不正确
断言失败:第 551 行 pos 12:'child.hasSize':不正确
断言失败:第 6075 行 pos 12:'child == _child':不正确
断言行 5120 pos 12 失败:'child = _child' 不正确
断言失败:在 Flutter 中使用 Navigator.popUntil() 时 !_debugLocked 不正确
Flutter - 断言失败:第 61 行第 12 行:'_route == ModalRoute.of(context)':不正确