map_controller는 마커, 선, 다각형과 같은 지도 요소를 관리하는 것을 간편하게 만드는 Flutter 패키지입니다. 지도 콘텐츠의 상호작용, 업데이트 및 상태 변경을 처리하기 위해 중앙 컨트롤러를 제공하여 코드 구조와 성능을 향상시킵니다. 동적 지도 시각화가 필요한 애플리케이션에 적합하며, Flutter의 지도 위젯과 원활하게 통합됩니다. 이 패키지는 'here'에서 유지보수되며 pub.dev를 통해 이용할 수 있습니다. 소스 코드는 GitHub에서 오픈되어 있어 투명성과 커뮤니티 기여를 가능하게 합니다.
사용 사례
다이나믹 마커 관리
실시간 경로 시각화
인터랙티브 다각형 오버레이
지도 데이터 동기화
위치 기반 UI 구성 요소
주요 기능
중앙 집중식 지도 상태 제어
마커, 선 및 다각형 지원
효율적인 업데이트 메커니즘
Flutter 지도와의 간편한 통합
오픈소스이며 지속적으로 유지 관리되고 있습니다
적합한 대상
인터랙티브 지도를 개발하는 개발자
실시간 위치 추적 기능이 있는 애플리케이션
복잡한 지도 레이어를 필요로 하는 프로젝트
클린하고 유지보수 가능한 코드를 우선시하는 팀
지리공간 데이터를 갖춘 Flutter 앱
고려 사항
호환되는 지도 위젯 구현이 필요합니다
제한된 플랫폼별 사용자 지정
내장된 지도 렌더링 없음(외부 지도 위젯에 의존)
고급 기능을 사용하려면 추가 종속성이 필요할 수 있습니다
문서가 더 자세해야 합니다
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
Map controller
Stateful map controller for Flutter Map. Manage markers, lines and polygons.
import'dart:async';
import'package:flutter/material.dart';
import'package:flutter_map/flutter_map.dart';
import'package:latlong/latlong.dart';
import'package:map_controller/map_controller.dart';
class_MapPageStateextendsState<MapPage> {
MapController mapController;
StatefulMapController statefulMapController;
StreamSubscription<StatefulMapControllerStateChange> sub;
@overridevoidinitState() {
// intialize the controllers
mapController = MapController();
statefulMapController = StatefulMapController(mapController: mapController);
// wait for the controller to be ready before using it
statefulMapController.onReady.then((_) => print("The map controller is ready")));
/// [Important] listen to the changefeed to rebuild the map on changes:/// this will rebuild the map when for example addMarker or any method /// that mutates the map assets is called
sub = statefulMapController.changeFeed.listen((change) => setState(() {}));
super.initState();
}
@overrideWidgetbuild(BuildContext context) {
returnScaffold(
body: SafeArea(
child: Stack(children: <Widget>[
FlutterMap(
mapController: mapController,
options: MapOptions(center: LatLng(48.853831, 2.348722), zoom: 11.0),
layers: [
MarkerLayerOptions(markers: statefulMapController.markers),
PolylineLayerOptions(polylines: statefulMapController.lines),
PolygonLayerOptions(polygons: statefulMapController.polygons)
],
),
// ...
])),
);
}
@overridevoiddispose() {
sub.cancel();
super.dispose();
}
}
classMapPageextendsStatefulWidget{
@override_MapPageStatecreateState() => _MapPageState();
}