我有一个具有流控制器的块,并且在该块的构造函数中,将流添加到该控制器。我等到流被添加,然后向它添加一个侦听器。但是then()永远不会被调用。我确信GeoLocator()代码能正常工作,因为我以前在有状态的小部件中使用过它,并且它像一个魅力一样起作用,但是我决定将业务逻辑移到一个整体上。
import 'dart:async';
import 'package:geolocator/geolocator.dart';
class LocationBloc {
final Geolocator _geolocator = Geolocator();
final LocationOptions _locationOptions = LocationOptions(accuracy: LocationAccuracy.high, distanceFilter: 10);
StreamController<Position> _positionStreamController = StreamController<Position>();
double _speed = 0;
double get speed => _speed;
LocationBloc() {
print('it gets here');
final Stream<Position> positionStream = _geolocator.getPositionStream(_locationOptions);
print('and here');
_positionStreamController.addStream(positionStream).then((value) {
print('it never gets here');
print(value);
_positionStreamController.stream.listen((Position position) {
this._speed = position == null ? 0 : position.speed;
});
});
}
void dispose() {
print('dispose location stream');
_positionStreamController.close();
_speed = 0;
}
}
[当处置小部件时我处置他的bloc提供者并在bloc中调用处置时,它会引发以下错误
Bad state: Cannot add event while adding a stream
无状态小部件
class DigitalSpeedMeter extends StatelessWidget {
static Widget create(BuildContext context) {
return Provider(
create: (_) => LocationBloc(),
child: DigitalSpeedMeter(),
dispose: (BuildContext context, LocationBloc bloc) => bloc.dispose(),
);
}
我最终使用了此
import 'dart:async';
import 'package:geolocator/geolocator.dart';
class LocationBloc {
final Geolocator _geolocator = Geolocator();
final LocationOptions _locationOptions = LocationOptions(accuracy: LocationAccuracy.high, distanceFilter: 10);
StreamController<double> _streamController = StreamController<double>();
Stream<double> get stream => _streamController.stream;
LocationBloc() {
_streamController.addStream(_geolocator.getPositionStream(_locationOptions).map((position) => position.speed ?? 0.0));
}
void dispose() {
_streamController.close();
}
}
带有流生成器小部件。