【发布时间】:2020-06-14 23:31:14
【问题描述】:
我是 Flutter/Dart 的新手,我正在使用 flutter_bloc bloc/repository 模式。
我正在努力从存储库方法中获取值,但我在 bloc 方法中得到了 null。
bloc 部分工作正常,但我从存储库方法中获得的预期 LatLng 值为 null。
bloc 的值和 Event to State 方法:
LatLng locationStream;
Stream<MapState> _mapGetLocationStreamToState(
GetLocationStream event) async* {
print('_mapGetLocationStreamToState event received : $event');
locationStream = await _mapRepository.getLocationStream();
print('_mapGetLocationStreamToState() locationStream is: $locationStream ');
yield LocationStream(locationStream);
}
打印:
颤振:_mapGetLocationStreamToState() locationStream 为:null
flutter: 事务是转换 { currentState: LocationStream {location: null},事件:“GetLocationStream”实例,nextState: LocationStream {location: null} }
我尝试了 T 和 Future<T> 存储库方法的返回类型,从不同的范围返回值(请参阅注释掉的返回),但无论我从哪里返回值,我总是得到 null。
你能发现问题出在哪里吗?
它应该在getLocation() 方法中,对吗?
非常感谢您的宝贵时间和帮助。
T:
LatLng getLocationStream() {
print('getLocationStream() called');
LatLng location;
LocationOptions locationOptions = LocationOptions(
accuracy: LocationAccuracy.bestForNavigation, distanceFilter: 0);
try {
if (isTracking == true) {
_positionStreamSubsciption.cancel();
isTracking = !isTracking;
} else {
_positionStreamSubsciption = locationManager
.getPositionStream(locationOptions)
.listen((Position position) {
if (position != null) {
location = LatLng(position.latitude, position.longitude);
// return location; // stops the stream
}
isTracking = !isTracking;
print('getLocationStream() location is : $location');
// return location; // returns null
});
// return location; // returns null
}
// return location; // returns null
} catch (error) {
print('startTracking error: $error');
}
return location; // returns null
}
打印:
flutter: getLocationStream() 位置是:LatLng(latitude:37.33022, 经度:-122.023788)颤振:getLocationStream()位置是: LatLng(纬度:37.330219,经度:-122.023748)颤动: getLocationStream() 位置是:LatLng(latitude:37.330219, 经度:-122.023708)颤振:getLocationStream()位置是: LatLng(纬度:37.330221,经度:-122.023668)
未来:
Future<LatLng> getLocationStream() {
print('getLocationStream() called');
print('isTracking was : $isTracking');
Future<LatLng> location;
LocationOptions locationOptions = LocationOptions(
accuracy: LocationAccuracy.bestForNavigation, distanceFilter: 0);
try {
if (isTracking == true) {
_positionStreamSubsciption.cancel();
// isTracking = !isTracking;
// print('isTracking was ${!isTracking} and now is : $isTracking');
} else {
_positionStreamSubsciption = locationManager
.getPositionStream(locationOptions)
.listen((Position position) {
if (position != null) {
location =
LatLng(position.latitude, position.longitude) as Future<LatLng>;
// return location;
}
print('getLocationStream() location is : $location');
// return location;
});
// return location;
}
isTracking = !isTracking;
print('isTracking is : $isTracking');
// return location;
} catch (error) {
print('startTracking error: $error');
}
}
打印:
颤振:getLocationStream() 位置是:LatLng(latitude:37.324746, 经度:-122.021542)颤振:getLocationStream()位置是: LatLng(纬度:37.324746,经度:-122.021573)颤动: getLocationStream() 位置是:LatLng(latitude:37.324746, 经度:-122.021605)
【问题讨论】:
标签: flutter return return-value