Я использую Apple Map в Flutter, используя нативный Swift Code. < /p>
Я использую панель вкладок, а в панели вкладок у меня есть 1 экран карты, а другой - другой экран. < /p>
Так что в настоящее время проблема - это когда я открываю приложение, когда вкладка «Я» - это так, как я. Другое перетаскивание или нажимайте на карту только один раз после того, как карта будет освобожден. Таким образом, кто -нибудь использует карту Apple с Flutter в панели вкладок?void _onPageChanged() async {
final newPage = widget.pageController.page?.round();
if (newPage != null && newPage == 0) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
// Force map refresh for iOS
setState(() async {
// This will force the UiKitView to rebuild
const platform = MethodChannel('apple-map-view/channel');
try {
await platform.invokeMethod('refreshMap');
} catch (e) {
print('Error refreshing map: $e');
}
});
}
}
}
< /code>
В Swift Code < /p>
Файл делегата приложения имеет ниже код < /p>
@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
let registrar = self.registrar(forPlugin: "apple-map-view")
let factory = AppleMapViewFactory(messenger: registrar!.messenger())
registrar!.register(factory, withId: "apple-map-view")
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
< /code>
в ApplemapView есть ниже кода < /p>
class AppleMapView: NSObject, FlutterPlatformView, MKMapViewDelegate {
private var mapView: MKMapView
private var channel: FlutterMethodChannel
init(frame: CGRect, viewId: Int64, messenger: FlutterBinaryMessenger, args: Any?,) {
self.mapView = MKMapView(frame: frame)
self.channel = FlutterMethodChannel(name: "apple-map-view/channel", binaryMessenger: messenger)
super.init()
self.mapView.delegate = self
self.mapView.register(MKMarkerAnnotationView.self, forAnnotationViewWithReuseIdentifier: "cluster")
self.mapView.register(CustomAnnotationView.self, forAnnotationViewWithReuseIdentifier: "customMarker")
if #available(iOS 11.0, *) {
self.mapView.register(CustomClusterAnnotationView.self, forAnnotationViewWithReuseIdentifier: "clusterView")
}
// Initial setup for user interaction. They should be enabled by default.
self.mapView.isUserInteractionEnabled = true
self.mapView.isZoomEnabled = true
self.mapView.isScrollEnabled = true
self.mapView.isRotateEnabled = true
self.channel.setMethodCallHandler { [weak self] (call, result) in
guard let self = self else { return }
switch call.method {
case "setMarkers":
if let args = call.arguments as? [String: Any],
let markers = args["markers"] as? [[String: Any]] {
self.addMarkers(markers) // Use self.addMarkers
}
result(nil)
case "refreshMap":
self.refreshMap() // Call the updated refreshMap
result("Map refreshed")
case "clearMarkers":
self.mapView.removeAnnotations(self.mapView.annotations) // Use self.mapView
result(nil)
case "setMaxZoom":
if let args = call.arguments as? [String: Any],
let maxZoom = args["maxZoom"] as? Double {
self.maxZoomLevel = maxZoom
}
result(nil)
case "moveToLocation":
if let argss = call.arguments as? [String: Any],
let lat = argss["latitude"] as? CLLocationDegrees,
let lng = argss["longitude"] as? CLLocationDegrees,
let zoom = argss["zoom"] as? Double {
moveToLocation(latitude: lat, longitude: lng, zoom: zoom)
result(nil)
}
result(nil)
default:
result(FlutterMethodNotImplemented)
}
}
}
func refreshMap() {
// here what I need to do so map is working proper currently go to other tab and back to map screen or map tab then only one time I am able to click or drag map after map freez or not able to click.
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ative-code
Флаттер интегрирует карту Apple (нативный код) ⇐ IOS
Программируем под IOS
-
Anonymous
1749410978
Anonymous
Я использую Apple Map в Flutter, используя нативный Swift Code. < /p>
Я использую панель вкладок, а в панели вкладок у меня есть 1 экран карты, а другой - другой экран. < /p>
Так что в настоящее время проблема - это когда я открываю приложение, когда вкладка «Я» - это так, как я. Другое перетаскивание или нажимайте на карту только один раз после того, как карта будет освобожден. Таким образом, кто -нибудь использует карту Apple с Flutter в панели вкладок?void _onPageChanged() async {
final newPage = widget.pageController.page?.round();
if (newPage != null && newPage == 0) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
// Force map refresh for iOS
setState(() async {
// This will force the UiKitView to rebuild
const platform = MethodChannel('apple-map-view/channel');
try {
await platform.invokeMethod('refreshMap');
} catch (e) {
print('Error refreshing map: $e');
}
});
}
}
}
< /code>
В Swift Code < /p>
Файл делегата приложения имеет ниже код < /p>
@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
let registrar = self.registrar(forPlugin: "apple-map-view")
let factory = AppleMapViewFactory(messenger: registrar!.messenger())
registrar!.register(factory, withId: "apple-map-view")
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
< /code>
в ApplemapView есть ниже кода < /p>
class AppleMapView: NSObject, FlutterPlatformView, MKMapViewDelegate {
private var mapView: MKMapView
private var channel: FlutterMethodChannel
init(frame: CGRect, viewId: Int64, messenger: FlutterBinaryMessenger, args: Any?,) {
self.mapView = MKMapView(frame: frame)
self.channel = FlutterMethodChannel(name: "apple-map-view/channel", binaryMessenger: messenger)
super.init()
self.mapView.delegate = self
self.mapView.register(MKMarkerAnnotationView.self, forAnnotationViewWithReuseIdentifier: "cluster")
self.mapView.register(CustomAnnotationView.self, forAnnotationViewWithReuseIdentifier: "customMarker")
if #available(iOS 11.0, *) {
self.mapView.register(CustomClusterAnnotationView.self, forAnnotationViewWithReuseIdentifier: "clusterView")
}
// Initial setup for user interaction. They should be enabled by default.
self.mapView.isUserInteractionEnabled = true
self.mapView.isZoomEnabled = true
self.mapView.isScrollEnabled = true
self.mapView.isRotateEnabled = true
self.channel.setMethodCallHandler { [weak self] (call, result) in
guard let self = self else { return }
switch call.method {
case "setMarkers":
if let args = call.arguments as? [String: Any],
let markers = args["markers"] as? [[String: Any]] {
self.addMarkers(markers) // Use self.addMarkers
}
result(nil)
case "refreshMap":
self.refreshMap() // Call the updated refreshMap
result("Map refreshed")
case "clearMarkers":
self.mapView.removeAnnotations(self.mapView.annotations) // Use self.mapView
result(nil)
case "setMaxZoom":
if let args = call.arguments as? [String: Any],
let maxZoom = args["maxZoom"] as? Double {
self.maxZoomLevel = maxZoom
}
result(nil)
case "moveToLocation":
if let argss = call.arguments as? [String: Any],
let lat = argss["latitude"] as? CLLocationDegrees,
let lng = argss["longitude"] as? CLLocationDegrees,
let zoom = argss["zoom"] as? Double {
moveToLocation(latitude: lat, longitude: lng, zoom: zoom)
result(nil)
}
result(nil)
default:
result(FlutterMethodNotImplemented)
}
}
}
func refreshMap() {
// here what I need to do so map is working proper currently go to other tab and back to map screen or map tab then only one time I am able to click or drag map after map freez or not able to click.
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79655858/flutter-integrate-apple-map-native-code[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия