Неожиданное поведение программы зависит от последовательности методов - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь создать интерактивные маркеры, используя карты и трепетание Google:

void onMarkerTapped(String id) {
    Fluttertoast.showToast(msg: id);
    Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => StoryPlayerView()),
    );
  }

  Set<Marker> createMarkers() {
    List<dynamic> locations = widget.data['locations'];
    Set<Marker> markers = {};
    locations.forEach((e) => {
          markers.add(Marker(
              markerId: MarkerId("${e['id']}"),
              position: LatLng(e['coordinates']['x'], e['coordinates']['y']),
              onTap: () {
                print("marker ${e['id']} tapped");
                Fluttertoast.showToast(msg: e['id']);
                onMarkerTapped("1");
              }))
        });
    return markers;
  }

Я не могу понять и объяснить поведение этого кода, потому что фрагмент выше не запускает StoryPlayerView (); Но если я изменю последовательность вызова метода, я получу необходимый результат:

 onTap: () { 
            Fluttertoast.showToast(msg: e['id']);
            onMarkerTapped("1");
            print("marker ${e['id']} tapped");

           }))

Кто-нибудь знает, что происходит? Может быть, печатать блокирует виджет строителя темы?

...