Доступ к объявлению объекта в Dart lambda - PullRequest
0 голосов
/ 11 июня 2019

Как мне получить доступ к объекту, который я объявляю, с помощью лямбды внутри лямбды? Э.Г.

final Marker marker = Marker(
  position: LatLng(
    center.latitude + sin(_markerIdCounter * pi / 6.0) / 20.0,
    center.longitude + cos(_markerIdCounter * pi / 6.0) / 20.0,
  ),
  onDragEnd: (LatLng newPosition) async {
    print('Old position: ${marker.position}');
  },
);

выдает ошибку: Local variable 'marker' can't be referenced before it is declared.

А

print('Old position: ${position}');

выдает ошибку: Undefined name 'position'.

1 Ответ

0 голосов
/ 12 июня 2019

Откровенно говоря, вы не можете этого сделать. Поскольку ошибка указывает на то, что вы не можете ссылаться на переменную marker до ее объявления. Это имеет смысл, поскольку вы пытаетесь сослаться на указатель на объект, который не был создан и поэтому не имеет указателя на него.

Я бы подумал, почему именно вам нужно ссылаться на переменную marker внутри одного из ее параметров конструктора. Возможно, вы пытаетесь работать против дизайна объекта, используя лямбду. Если вы решите, что вам действительно нужен доступ к данным маркера внутри лямбды, вы можете попробовать обернуть маркер на фабрике следующим образом:

class MarkerFactory {
  Marker _marker;
  Marker buildMarker() => _marker ??= Marker(
    position: LatLng(
      center.latitude + sin(_markerIdCounter * pi / 6.0) / 20.0,
      center.longitude + cos(_markerIdCounter * pi / 6.0) / 20.0,
    ),
    onDragEnd: (LatLng newPosition) async {
      print('Old position: ${marker.position}');
    },
  );
}

Дайте мне знать, если это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...