Flutter 的新手。我的代码运行但遇到
在构建 FutureBuilder(dirty, state: _FutureBuilderState#e1a6f): LateInitializationError: Field 'initialPosition' has not been initialized 时抛出了以下 LateError 错误。
该代码用于设置从设备获取初始位置的 GoogleMap 小部件。我收到带有该错误的红色屏幕,但几秒钟后坐标被接收并正常进行并正确显示地图和位置。也尝试过未来,但我遇到了其他错误。它应该在 FutureBuilder 下吗?在 wrapper.dart 或我的 main.dart 中?
家.dart:
import 'package:flutter/material.dart';
import 'package:something/services/auth.dart';
import 'screens/map.dart';
import 'package:something/services/geolocator_service.dart';
class LakoApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<LakoApp> {
final AuthService _auth = AuthService();
final _geolocatorService = GeolocatorService();
late var initialPosition;
// @override
Future getInitialPosition <Position>() async {
initialPosition = await _geolocatorService.getInitialLocation();
return initialPosition;
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: FittedBox(
child: Text('Something something'),
),
actions: <Widget>[
// irrelevant code
// .....
],
body:
FutureBuilder(
future: getInitialPosition(),
builder: (context, snapshot) {
return Map(initialPosition);
}
)
);
}
}
甚至在获取数据之前就已经构建了 Future Builders。所以,你应该检查它是否有数据。
if (snapshot.hasData) {
return Map(initialPosition); //Or snapshot.data.
}else{
return CircularProgressIndicator();
}
这里还有其他问题。我将展示一些进一步的代码来改进你自己的代码。
您的方法返回接收名为 Position 的泛型参数的任何类型的 Future。我认为您想使用一种名为 position 的数据类型,因为您<Position>
现在需要将其移动到这里,因为您编写它的方式对于您的特定示例毫无用处。
Future<Position> getInitialPosition () async {
initialPosition = await _geolocatorService.getInitialLocation();
return initialPosition;
}
FutureBuilder 可以是这样的。
FutureBuilder<Position>(
future: getInitialPosition(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Map(snapshot.data);
}else{
return CircularProgressIndicator();
//Display loading, you may adapt this widget to your interface or use some state management solution
}
}
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句