Как получить доступ к контроллеру FlutterMap из другого класса - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь найти способ получить доступ к контроллеру flutter_map извне класса, идея в том, что у меня есть маркеры на экране карты. когда вы нажимаете на маркер, карта должна перемещаться так, чтобы маркер spicefi c находился посередине

Проблема в том, что класс маркера Initial находится в другом классе, поэтому я не могу сразу получить доступ к управлению картой

как заставить карту двигаться?

  ./screens/homeScreen.dart

  class HomeScreen extends StatefulWidget {
  static const routeName = '/home';
  @override
  _HomeScreenState createState() => _HomeScreenState();
  }

  class _HomeScreenState extends State<HomeScreen> {
  Widget build(BuildContext context) {
        return  Scaffold(
            body:FlutterMap(
                          mapController: _mapController,
                          MarkerClusterLayerOptions(
                            onMarkerTap: (_) {
                            },                           //  Cluster tab
                            markers:externalReports.items // get the markers list 
                            centerMarkerOnClick: true,    // Cluster center
                              ....),);}}




./externalReports.dart  // where The Items Initial

     _items.add(
          Marker(
              optionalDataContainer: data,
              width: 45.0,
              height: 45.0,
              point: LatLng(
                latitude,
                longitude,),
              builder: (context) => Container(
                        child: Container(
                          height: 45,
                          width: 45,
                          child: GestureDetector(
                            onTap: () {
 
                       // _mapController.move(LatLng(latitude,longitude), 15.0);

                            }))))

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Вы можете предоставить обратный вызов onClick для Marker

Примерно так:

class YourMarker extends StatelessWidget {
  final double latitude;
  final double longitude;
  final Function(double, double) onClick;
  YourMarker({
    this.latitude,
    this.longitude,
    this.onClick,
  });

  @override
  Widget build(BuildContext context) {
    return Marker(
      optionalDataContainer: data,
      width: 45.0,
      height: 45.0,
      point: LatLng(
        latitude,
        longitude,
      ),
      builder: (context) => Container(
        child: Container(
          height: 45,
          width: 45,
          child: GestureDetector(
            onTap: 
            () {
              onClick(latitude, longitude);
              // _mapController.move(LatLng(latitude,longitude), 15.0);
            },
          ),
        ),
      ),
    );
  }
}
0 голосов
/ 14 июля 2020

Самый простой вариант, который я вижу, - это преобразовать его в глобальный экземпляр. (или вы можете сделать это c).

Но я должен сказать, что эти параметры не очень "красивые" ...

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