Текущее местоположение флаттера - PullRequest
1 голос
/ 16 мая 2019

Я использую флаттерную карту и пакет геолокации для получения текущего местоположения и отображения на карте, но я получаю ошибку, как показано ниже

Получатель 'latitude' был вызван для нуля.Получатель: null Пробный вызов: широта

Я прошел через эту проблему, но не помог https://github.com/johnpryan/flutter_map/issues/124

Я использовал его в виджете с состоянием

  LatLng _center ;
  Position currentLocation;

  Future<Position> locateUser() async {
    return Geolocator()
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
  }

  getUserLocation() async {
    currentLocation = await locateUser();
    setState(() {
      _center = LatLng(currentLocation.latitude, currentLocation.longitude);
    });
    print('center $_center');
  }

  @override
  void initState() {
    super.initState();
    getUserLocation();
  }

Этовиджет, куда я звоню getUserLocation ()

  Widget build(BuildContext context){
    return Scaffold(
      appBar: AppBar(
        title: Text('Plants Watch'),
        backgroundColor: Colors.green[700],
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.exit_to_app),
            onPressed: () {
              BlocProvider.of<AuthenticationBloc>(context).dispatch(
                LoggedOut(),
              );
            },
          )
        ],
      ),
      body: Stack(
        children: <Widget>[
          new FlutterMap(
                options: new MapOptions(
                  center: new LatLng(currentLocation.latitude, currentLocation.longitude),
                  maxZoom: 13.0,
                ),
                layers: [
                  new TileLayerOptions(
          urlTemplate: "https://api.tiles.mapbox.com/v4/"
              "{id}/{z}/{x}/{y}@2x.png?access_token={accessToken}",
          additionalOptions: {
            'accessToken': '<accessToken>',
            'id': 'mapbox.streets',
          },
        ),
        new MarkerLayerOptions(
          markers: [
            new Marker(
              width: 80.0,
              height: 80.0,
              point: LatLng(currentLocation.latitude, currentLocation.longitude),
              builder: (ctx) =>
              new Container(
                child: new IconButton(
                  icon: Icon(Icons.location_on),
                  color: Colors.green[700],
                  iconSize: 45.0,
                  onPressed: (){
                  print('Marker Tapped');
                  },
                ),
              ),
            ),
          ],
        ),
       ],
     ),
     Padding(
       padding: const EdgeInsets.all(16.0),
       child: Align(
         alignment: Alignment.bottomRight,
         child: FloatingActionButton(
           backgroundColor: Colors.green[700],
           child: Icon(Icons.add),
           onPressed: () {
             Navigator.push(context, MaterialPageRoute(builder: (context)=> PostPage()));
             },
             ),
            ),
          )
        ],
      )
    );
  }
}


I just want to remove the no such method error on building app.

1 Ответ

0 голосов
/ 21 мая 2019

Проблема в MarkerLayerOption, где я вызываю пользователя в текущем местоположении, что приводит к ошибке широты. Поэтому внесите изменения в LatLng как в функцию FlutterMap, так и MarkerLayerOption решит проблему.

new FlutterMap(
                options: new MapOptions(
                  center: new LatLng(12.9716, 77.5946),

                  maxZoom: 13.0,
                ),
                layers: [
                  new TileLayerOptions(
          urlTemplate: "https://api.tiles.mapbox.com/v4/"
              "{id}/{z}/{x}/{y}@2x.png?access_token={accessToken}",
          additionalOptions: {
            'accessToken': '<accessToken>',
            'id': 'mapbox.streets',
          },
        ),
        new MarkerLayerOptions(
          markers: [
            new Marker(
              width: 80.0,
              height: 80.0,
              point: LatLng(12.9716, 77.5946),

              builder: (ctx) =>
              new Container(
                child: new IconButton(
                  icon: Icon(Icons.location_on),
                  color: Colors.green[700],
                  iconSize: 45.0,
                  onPressed: (){
                  print('Marker Tapped');
                  },
                ),
              ),
            ),
          ],
        ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...