Как изменить маркер, когда пользователь выбирает местоположение, используя флаттер - PullRequest
0 голосов
/ 22 марта 2020

Я хочу изменить маркер, когда пользователь выбирает место. когда я установил LatLng жестко, все нормально, но когда я пытаюсь изменить LatLng Программно, ошибка показывает необработанное исключение: недопустимый аргумент (ы): широта должна быть между -90 и 90 градусами, но была -119.0.

Я пытаюсь это пожалуйста, проверьте мой код и помогите мне. Вот мой код ---

LatLng latLng =new LatLng(43.761539, -123.1369);
  final menuButton = new PopupMenuButton<int>(
    onSelected: (int i) {},
    itemBuilder: (BuildContext ctx) {},
    child: new Icon(
      Icons.dashboard,
    ),
  );
  final _startPointController = TextEditingController();
  Set<Marker> markers = Set();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: Drawer(
        child: ListView(
          padding: EdgeInsets.zero,
          children: [
            DrawerHeader(
              child: Text("Header"),
            ),
            ListTile(
              title: Text("Home"),
            )
          ],
        ),
      ),
      appBar: AppBar(
        centerTitle: true,
        title: Text('Real State'),
        backgroundColor: Colors.red[700],
        actions: <Widget>[
          menuButton,
        ],
      ),
      body: Stack(
        children: <Widget>[
          FlutterMap(
            options: new MapOptions(
              center: latLng,
              zoom: 13.0,
            ),
            layers: [
              new TileLayerOptions(
                urlTemplate: "https://api.tiles.mapbox.com/v4/"
                    "{id}/{z}/{x}/{y}@2x.png?access_token={accessToken}",
                additionalOptions: {
                  'accessToken': 'pk.eyJ1Ijoic2FraWJ1bHJhc2VsIiwiYSI6ImNrODJrdWNueDBrd2Mzbm13Z2RtdGFkcHEifQ.gayvG_4Qk5uUDMaHZcyTzw',
                  'id': 'mapbox.streets',
                },
              ),
              new MarkerLayerOptions(
                markers: [
                  new Marker(
                    width: 80.0,
                    height: 80.0,
                    point: latLng,
                    builder: (ctx) =>
                    new Container(
                      child: IconButton(
                        icon: Icon(Icons.location_on),
                        color: Colors.blue,
                        iconSize: 45.0,
                        onPressed: () {
                          print('Marker tapped');
                        },
                      ),
                    ),
                  ),
                ],
              ),
            ],
          ),

          Positioned(
            top: 20.0,
            right: 15.0,
            left: 15.0,
            child: Container(
              height: 50.0,
              width: double.infinity,
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(3.0),
                color: Colors.white,
                boxShadow: [
                  BoxShadow(
                      color: Colors.grey,
                      offset: Offset(1.0, 5.0),
                      blurRadius: 10,
                      spreadRadius: 3)
                ],
              ),
              child: CustomTextField(
                      hintText: "Select starting point",
                      textController: _startPointController,
                      onTap: () {
                      Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => MapBoxAutoCompleteWidget(
                      apiKey: Tokens.MAPBOX_ACCESS_TOKEN,
                      hint: "Select starting point",
                      onSelect: (place) {
                         _startPointController.text = place.placeName;
                         setState(() {
                           latLng=new LatLng(place.geometry.coordinates.first,place.geometry.coordinates.last);
                         });
//                         markers.add(
//                           Marker(
//                             width: 80.0,
//                             height: 80.0,
//                             point: LatLng(place.geometry.coordinates.first,place.geometry.coordinates.last)
//                           )
//                         );
                    },
                      limit: 10,
                          country: 'CA',
                      ),),);},
                      enabled: true,
                      ),
            ),
          ),

1 Ответ

0 голосов
/ 23 марта 2020

Сообщение об ошибке сообщает вам, в чем именно проблема - число, которое вы вводите в качестве широты, недопустимо. Вы не указали номер строки, которая вызывает эту ошибку, но, посмотрев на ваш код, я могу предположить, что строка:

latLng=new LatLng(place.geometry.coordinates.first,place.geometry.coordinates.last);

несет ответственность. Вероятно, это тот случай, когда place.geometry.coordinates.first на самом деле является долготой, и аналогичным образом place.geometry.coordinates.last на самом деле является широтой. Конструктор LatLng, как указано его именем, ожидает широту, за которой следует долгота. Значения долготы находятся в диапазоне от -180 до 180, а значения широты находятся в диапазоне от -90 до 90. Таким образом, тот факт, что вы передаете значение -119.0, когда ожидается что-то между -90 и 90, указывает на передачу долготы на широту. параметр.

Короче, попробуйте изменить вышеупомянутую строку на:

latLng=new LatLng(place.geometry.coordinates.last,place.geometry.coordinates.first);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...