Nin*_*udj 2 flutter flutter-futurebuilder
使用 FutureBuilder,我收到以下错误。
错误:参数类型“AsyncSnapshot”无法分配给参数类型“Position”。
指向线:return Map(snapshot);错误:必须返回非空值,因为返回类型“Widget”不允许为空。指向行:构建器:(上下文,快照)
主页.dart
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: FittedBox(
child: Text('something something'),
),
actions: <Widget>[
//irrelevant code for buttons etc
],
body: FutureBuilder <Position> (
future: _geolocatorService.getInitialLocation(),
builder: (BuildContext context, snapshot) {
if (snapshot.hasData) { //<- can confirm snapshot has data and can display it
// printed in terminal ex.: lat value, long,
// null,null
print(snapshot);
return Map(snapshot); //<-having trouble passing snapshot data as Position to
// this map
}
}
),
);
Run Code Online (Sandbox Code Playgroud)
geolocator_service.dart 文件:(导入到 home.dart):
class GeolocatorService {
Stream<Position> getCurrentLocation() {
return Geolocator.getPositionStream(desiredAccuracy: LocationAccuracy.best,distanceFilter: 10);
}
Future <Position> getInitialLocation() async {
return await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best);
}`
Run Code Online (Sandbox Code Playgroud)
Map.dart文件(导入必要的插件):
class Map extends StatefulWidget {
final Position initialPosition;
Map(this.initialPosition); // <- initialPosition doesnt like the snapshot value
@override
_MapState createState() => _MapState();
}
class _MapState extends State<Map> {
final GeolocatorService geolocatorService = GeolocatorService();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng( widget.initialPosition.latitude, widget.initialPosition.longitude),
zoom: 19),
mapType: MapType.normal,
) ,
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果我删除 if 条件:
body: FutureBuilder <Position> (
future: _geolocatorService.getInitialLocation(),
builder: (context, snapshot) {
return Map(snapshot.data!);
}
Run Code Online (Sandbox Code Playgroud)
它运行了,但我收到一个简短的红屏错误:
构建 FutureBuilder>>>> 时抛出以下 _CastError(脏,状态:_FutureBuilderState#55f91):对 null 值使用 Null 检查运算符
然后照常运行。也许是因为它正在等待数据进入?
您需要在其他条件下返回一个小部件。然后builder需要一个小部件,当您添加 if 条件时,它不会返回任何小部件,直到 if 条件获得 true 值并返回小部件。
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: FittedBox(child: Text('something something')),
body: FutureBuilder <Position> (
future: _geolocatorService.getInitialLocation(),
builder: (BuildContext context, snapshot) {
if (snapshot.hasData) {
//<- can confirm snapshot has data and can display it
// printed in terminal ex.: lat value, long,
// null,null
print(snapshot);
return Map(snapshot);
}else{
/// Display a loader untill data is not fetched from server
return CirclularProgressIndicator();
}
}
),
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8372 次 |
| 最近记录: |