【问题标题】:Error: The method 'getPositionStream' isn't defined for the class 'Geolocator'错误:没有为“Geolocator”类定义方法“getPositionStream”
【发布时间】:2021-02-24 20:08:45
【问题描述】:

使用颤振,我尝试在地理定位器中使用 StreamSubscription 和 getPositionStream 检索当前位置。 但我不断收到错误消息:错误:没有为“Geolocator”类定义方法“getPostionStream”。

这是我的功能:

void getLocationUpdates(){
StreamSubscription<Position> homeTabPostionStream;

homeTabPostionStream = geoLocator.getPositionStream(locationOptions).listen((Position position){
  currentPosition = position;
});

我在这里创建了变量:

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

根据您的要求,我编写了整个代码以供参考。

这是完整的代码:

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;
    });

【问题讨论】:

    标签: firebase flutter dart geolocation dart-pub


    【解决方案1】:

    无需实例化GeolocatorgetPositionStream() 是一个像 Geolocator.getPositionStream() 这样调用的静态方法。传递给该方法的参数也是可选参数。不需要 locationOptions。

    更新

    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);
    

    【讨论】:

    • 我在最后一个版本
    • 更新答案。
    • 感谢帮助 :)
    • 我降级了,所以在我的 pubspec.yaml 中现在有 geolocator: 5.3.2+2 即使在免费软件中也可以向后兼容。
    【解决方案2】:

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

    void getLocationUpdates(){
      StreamSubscription<Position> homeTabPostionStream;
    
      homeTabPostionStream = geoLocator.getPositionStream().listen((Position position){
      currentPosition = position;
    });
    

    【讨论】:

    • 是的,当然是我的错误,但这并没有解决问题,我有同样的错误。
    • 好的,那你能分享一下页面的总数吗?
    • 你在哪里调用 getLocationUpdates() 方法?
    • 我将调用 GO ONLINE 按钮,它还没有实现,因为我卡在了这个按钮上。
    猜你喜欢
    • 2021-07-26
    • 2021-04-15
    • 2020-05-21
    • 2019-05-10
    • 1970-01-01
    • 2022-09-28
    • 2022-10-20
    • 1970-01-01
    • 2020-02-15
    相关资源
    最近更新 更多