Я очень плохо знаком с Flutter / Dart и использую шаблон flutter_blo c bloc / repository.
Я изо всех сил пытаюсь получить значение из метода репозитория, и я получаю нулевое значение в методе blo c.
Часть blo c работает нормально, но ожидаемое значение LatLng Я получаю метод хранилища форм нулевой.
blo c и метод 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);
}
печатает:
flutter: _mapGetLocationStreamToState () locationStream: null
flutter: Transaction is Transition {currentState: LocationStream {location: null}, событие: экземпляр GetLocationStream, nextState: LocationStream {location: null}}
Я пробовал оба T
и Future<T>
возвращают типы для метода репозитория, возвращая значение из разных областей (см. закомментированные результаты), но я всегда получаю нулевое значение независимо от того, откуда я возвращаю значение. Можете ли вы определить, где проблема? Должен быть в 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 (широта: 37.33022, долгота: -122.023788) flutter: getLocationStream () местоположение: LatLng (широта: 37.330219, долгота: -122.023748) flutter: getLocationStream () местоположение: LatLng (широта: 37.330219, долгота: -122.023708) flutter: 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');
}
}
отпечатков:
flutter: getLocationStream () расположение: LatLng (широта: 37.324746, долгота : -122.021542) flutter: getLocationStream () расположение: LatLng (широта: 37.324746, долгота: -122.021573) flutter: getLocationStream () расположение: LatLng (широта: 37.324746, долгота: -122.021605)