Firebase 错误:方法';getPositionStream';isn';t为类定义';地理定位器';

Firebase 错误:方法';getPositionStream';isn';t为类定义';地理定位器';,firebase,flutter,dart,geolocation,dart-pub,Firebase,Flutter,Dart,Geolocation,Dart Pub,使用flatter,我尝试在地理定位器中使用StreamSubscription和getPositionStream检索当前位置。 但是我一直得到一个错误:错误:没有为类“Geolocator”定义方法“getPostionStream” 以下是我的功能: void getLocationUpdates(){ StreamSubscription<Position> homeTabPostionStream; homeTabPostionStream = geoLocator.ge

使用flatter,我尝试在地理定位器中使用StreamSubscription和getPositionStream检索当前位置。 但是我一直得到一个错误:错误:没有为类“Geolocator”定义方法“getPostionStream”

以下是我的功能:

void getLocationUpdates(){
StreamSubscription<Position> homeTabPostionStream;

homeTabPostionStream = geoLocator.getPositionStream(locationOptions).listen((Position position){
  currentPosition = position;
});
按照您的要求,我编写了整个代码以供参考

以下是完整的代码:

class HomeTab extends StatefulWidget {
  @override
  _HomeTabState createState() => _HomeTabState();
}

class _HomeTabState extends State<HomeTab> {

  GoogleMapController mapController;
  Completer<GoogleMapController> _controller = Completer();

  Position currentPosition;

  DatabaseReference tripRequestRef;

  var geoLocator = Geolocator();
  var locationOptions = LocationOptions(accuracy: LocationAccuracy.bestForNavigation, distanceFilter: 4);


  void getCurrentPosition() async{

    Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.bestForNavigation);
    currentPosition = position;
    LatLng pos = LatLng(position.latitude, position.longitude);
    mapController.animateCamera(CameraUpdate.newLatLng(pos));

  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        GoogleMap(
          padding: EdgeInsets.only(top: 135),
          myLocationEnabled: true,
          myLocationButtonEnabled: true,
          mapType: MapType.normal,
          initialCameraPosition: googlePlex,
          onMapCreated: (GoogleMapController controller){
            _controller.complete(controller);
            mapController = controller;

            getCurrentPosition();
          },
        ),
        Container(
          height: 135,
          width: double.infinity,
          color: BrandColors.colorPrimary,
        ),

        Positioned(
          top: 60,
          left: 0,
          right: 0,
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              AvailabilityButton(
                title: 'GO ONLINE',
                color: BrandColors.colorOrange,
                onPressed: (){

                  GoOnline();

                },
              ),
            ],
          ),
        ),

      ],
    );
  }

  void GoOnline(){
    Geofire.initialize('driversAvailable');
    Geofire.setLocation(currentFirebaseUser.uid, currentPosition.latitude, currentPosition.longitude);

    tripRequestRef = FirebaseDatabase.instance.reference().child('drivers/${currentFirebaseUser.uid}/newtrip');
    tripRequestRef.set('waiting');
    
    tripRequestRef.onValue.listen((event) {



    });

  }

  void getLocationUpdates(){
    StreamSubscription<Position> homeTabPostionStream;

    homeTabPostionStream = geoLocator.getPositionStream(locationOptions).listen((Position position){
      currentPosition = position;
    });
class HomeTab扩展StatefulWidget{
@凌驾
_HomeTabState createState()=>\u HomeTabState();
}
类_HomeTabState扩展状态{
谷歌地图控制器;
Completer _controller=Completer();
位置当前位置;
数据库引用tripRequestRef;
var geologitor=geologitor();
var locationOptions=locationOptions(精度:LocationAccurance.bestForNavigation,距离过滤器:4);
void getCurrentPosition()异步{
位置=等待地理定位器。getCurrentPosition(期望精度:定位精度。最佳导航);
当前位置=位置;
LatLng pos=LatLng(位置、纬度、位置、经度);
mapController.animateCamera(CameraUpdate.newLatLng(pos));
}
@凌驾
小部件构建(构建上下文){
返回堆栈(
儿童:[
谷歌地图(
填充:仅限边缘设置(顶部:135),
myLocationEnabled:对,
myLocationButtonEnabled:正确,
mapType:mapType.normal,
initialCameraPosition:googlePlex,
onMapCreated:(谷歌地图控制器){
_控制器。完成(控制器);
mapController=控制器;
getCurrentPosition();
},
),
容器(
身高:135,
宽度:double.infinity,
颜色:BrandColors.colorPrimary,
),
定位(
排名:60,
左:0,,
右:0,,
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
可用性按钮(
标题:"上网",,
颜色:BrandColors.colorOrange,
已按下:(){
GoOnline();
},
),
],
),
),
],
);
}
void GoOnline(){
初始化('driversAvailable');
Geofire.setLocation(currentFirebaseUser.uid、currentPosition.latitude、currentPosition.longitude);
tripRequestRef=FirebaseDatabase.instance.reference().child('drivers/${currentFirebaseUser.uid}/newtrip');
tripRequestRef.set('waiting');
tripRequestRef.onValue.listen((事件){
});
}
void getLocationUpdates(){
StreamSubscription homeTabPostionStream;
homeTabPostionStream=geoLocator.getPositionStream(locationOptions)。侦听((位置){
当前位置=位置;
});

您的方法中似乎缺少一个字母(i):getPostionStream。它必须是这样的:

void getLocationUpdates(){
  StreamSubscription<Position> homeTabPostionStream;

  homeTabPostionStream = geoLocator.getPositionStream().listen((Position position){
  currentPosition = position;
});
void getLocationUpdates(){
StreamSubscription homeTabPostionStream;
homeTabPostionStream=geoLocator.getPositionStream().listen((位置){
当前位置=位置;
});

无需实例化
Geolocator
getPositionStream()
是一个静态方法,类似这样调用,
Geolocator.getPositionStream()
。传递给该方法的参数也都是可选参数。无需位置选项

更新

void getLocationUpdates(){
  StreamSubscription<Position> homeTabPostionStream;

  homeTabPostionStream = Geolocator.getPositionStream(
    desiredAccuracy: LocationAccuracy.bestForNavigation,
    distanceFilter: 4).listen((event) {
       ...
    });
}

是的,当然是我的错误,但这并没有解决问题,我也有同样的错误。好的,那么你能分享页面的总数吗?你在哪里调用getLocationUpdates()方法?我将调用GO ONLINE按钮,它还没有实现,因为我被困在这个问题上。我使用的是最新版本的更新答案。Thx帮助:)我降级了,所以在我的pubspec.yaml中现在有geolocator:5.3.2+2,即使在免费软件中也能有向后兼容性。
void getLocationUpdates(){
  StreamSubscription<Position> homeTabPostionStream;

  homeTabPostionStream = Geolocator.getPositionStream(
    desiredAccuracy: LocationAccuracy.bestForNavigation,
    distanceFilter: 4).listen((event) {
       ...
    });
}
var geoLocator = Geolocator();
var locationOptions = LocationOptions(accuracy: LocationAccuracy.bestForNavigation, distanceFilter: 4);