Маркеры отображаются с неправильным трепетанием номера

#loops #flutter #markers

#циклы #трепетание #маркеры

Вопрос:

В моем приложении я использую пакеты flutter_bloc и flutter_map.Когда я отслеживаю маршрут, я хочу отобразить порядок отслеживаемых точек, поэтому, когда я получаю состояние с отслеживаемым маршрутом, я добавляю маркер для каждой точки маршрута с помощью цикла (forEach или normal), и у него есть значок и номер, чтобы я мог видеть порядок маркеров. Проблема в том, что, хотя маркеры правильно размещены на карте и значок отображается правильно, отображаемое число неверно. Если я печатаю переменную, содержащую значение для отображения в цикле, она печатает правильно, например, от 1 до 7, но при присвоении маркеру она получает неправильное значение 8. Я не могу выяснить, откуда берется это 8..

Вы видите, что я здесь делаю не так?

Это код в полученном состоянии:

 
if (state is TrackedRoute) {
            route.clear();
            trackedPoints.clear();
            int num = 1;
            setState(() {
              route = state.trackedRoute;
            });
//              route.forEach((element) {
            for (int i = 0; i < route.length; i  ) {
              LatLng element = route[i];
              print('@@@@@  num is $num'); // TODO printed number is correct
              LatLng point = LatLng(element.latitude, element.longitude);
              Marker trackedPoint = Marker(
                point: point,
                height: 30,
                width: 30,
                builder: (context) => Stack(
                  alignment: Alignment.topCenter,
                  children: [
                    // TODO Prints all 8s ???!!!

                    IconButton(
                      icon: Icon(Icons.add_location),
                      color: Colors.greenAccent,
                      iconSize: 30,
                      onPressed: () {},
                    ),
                    Text(
                      num.toString(),
                      style: TextStyle(color: Colors.red, fontSize: 25),
                    ), // TODO :  Displayed number is wrong
                  ],
                ),
              );
              trackedPoints.add(trackedPoint);
              num  ;
            }

//              });

          }
 

это консольная печать:

 I/flutter (24597): @@@@@  num is 2
I/flutter (24597): @@@@@  num is 3
I/flutter (24597): @@@@@  num is 4
I/flutter (24597): @@@@@  num is 5
I/flutter (24597): @@@@@  num is 6
I/flutter (24597): @@@@@  num is 7
 

и это результирующий отображаемый маршрут с маркерами, отображающими число 8:
введите описание изображения здесь

Ответ №1:

Это происходит потому builder , что метод the Marker вызывается только тогда, когда MarkerLayer он отображается на экране. Поэтому ваша num переменная достигнет своего максимума до вызова метода builder, следовательно, все маркеры будут одинаковыми num .

Я не думаю, что есть хороший способ добиться того, чего вы хотите, с текущим flutter_map пакетом. MarkerLayer Единственный вызов builder с контекстом, поэтому для достижения этой цели вам нужны какие-то другие средства. Проблема в том, что конструктор маркеров не имеет возможности получить доступ к связанным данным маркера.

Возможно, решение кроется в этом комментарии к проблеме на Github. Однако это решение перестраивает всю карту при смене маркеров. В противном случае, возможно, было бы лучше открыть проблему в репозитории flutter_map Github самостоятельно.

Комментарии:

1. действительно. Похоже, мне придется создать пользовательский виджет, как я делал это для других маркеров. Приветствия.

2. Если у вас есть решение вашего вопроса, пожалуйста, добавьте его в качестве ответа самостоятельно (или отредактируйте мой), чтобы другие, столкнувшиеся с той же проблемой, могли извлечь выгоду.

3. Конечно .. как только у меня будет код для загрузки в качестве ответа, я, конечно, сделаю это.