Merge branch 'map_dev' into dev
# Conflicts: # ln_jq_app/android/app/src/main/AndroidManifest.xml # ln_jq_app/ios/Runner/Info.plist
@@ -1,13 +1,86 @@
|
||||
import Flutter
|
||||
import UIKit
|
||||
|
||||
///
|
||||
let kAMapKey = "3ac08e5e14df9d7a52e98d40e21a0189";
|
||||
|
||||
|
||||
@main
|
||||
@objc class AppDelegate: FlutterAppDelegate {
|
||||
override func application(
|
||||
_ application: UIApplication,
|
||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||
) -> Bool {
|
||||
GeneratedPluginRegistrant.register(with: self)
|
||||
|
||||
GeneratedPluginRegistrant.register(with: self)
|
||||
|
||||
AMapNavSDKManager.shared().config(withKey: kAMapKey)
|
||||
|
||||
// 注册平台视图工厂
|
||||
let registrar = self.registrar(forPlugin: "NativeFirstPagePlugin")
|
||||
|
||||
let controller = window?.rootViewController as! FlutterViewController
|
||||
let nativeViewFactory = NativeViewFactory(messenger: controller.binaryMessenger)
|
||||
|
||||
registrar?.register(
|
||||
nativeViewFactory,
|
||||
withId: "NativeFirstPage"
|
||||
)
|
||||
|
||||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 创建视图工厂
|
||||
class NativeViewFactory: NSObject, FlutterPlatformViewFactory {
|
||||
private var messenger: FlutterBinaryMessenger
|
||||
|
||||
init(messenger: FlutterBinaryMessenger) {
|
||||
self.messenger = messenger
|
||||
super.init()
|
||||
}
|
||||
|
||||
func create(
|
||||
withFrame frame: CGRect,
|
||||
viewIdentifier viewId: Int64,
|
||||
arguments args: Any?
|
||||
) -> FlutterPlatformView {
|
||||
return NativeFlutterView(frame: frame, viewId: viewId, args: args)
|
||||
}
|
||||
|
||||
func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
|
||||
return FlutterStandardMessageCodec.sharedInstance()
|
||||
}
|
||||
}
|
||||
|
||||
class NativeFlutterView: NSObject, FlutterPlatformView {
|
||||
private var _view: UIView
|
||||
private var _nativeVC: UIViewController
|
||||
|
||||
init(frame: CGRect, viewId: Int64, args: Any?) {
|
||||
// 创建原生的 ViewController 视图
|
||||
let nativeVC = AMapNavSDKManager.shared().targetVC;
|
||||
// let nativeVC = NativeFirstPage();
|
||||
|
||||
self._nativeVC = nativeVC
|
||||
|
||||
print("---frame: \(frame)");
|
||||
|
||||
_view = nativeVC.view
|
||||
_view.isUserInteractionEnabled = true
|
||||
_view.frame = CGRectMake(0, 0, CGRectGetWidth(frame), CGRectGetHeight(frame))
|
||||
super.init()
|
||||
}
|
||||
|
||||
func view() -> UIView {
|
||||
return _view
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"filename" : "Icon-App-29x29 1.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "1x",
|
||||
"size" : "29x29"
|
||||
@@ -31,25 +31,25 @@
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-80x80.jpg",
|
||||
"filename" : "Icon-App-80x80.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-120x120.jpg",
|
||||
"filename" : "Icon-App-120x120.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-120x120 1.jpg",
|
||||
"filename" : "Icon-App-120x120 1.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "60x60"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-180.jpg",
|
||||
"filename" : "Icon-App-180.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "60x60"
|
||||
@@ -61,19 +61,19 @@
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"filename" : "Icon-App-20x20@2x 1.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"filename" : "Icon-App-29x29.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"filename" : "Icon-App-29x29@2x 1.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "29x29"
|
||||
@@ -91,7 +91,7 @@
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-76x76@1x.png",
|
||||
"filename" : "Icon-App-76x76.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "76x76"
|
||||
|
||||
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 509 B After Width: | Height: | Size: 465 B |
|
After Width: | Height: | Size: 849 B |
|
Before Width: | Height: | Size: 848 B After Width: | Height: | Size: 849 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 613 B |
|
After Width: | Height: | Size: 613 B |
|
Before Width: | Height: | Size: 707 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 2.6 KiB |
@@ -2,8 +2,6 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key></key>
|
||||
<string></string>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
@@ -16,6 +14,11 @@
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleLocalizations</key>
|
||||
<array>
|
||||
<string>zh-Hans</string>
|
||||
<string>en</string>
|
||||
</array>
|
||||
<key>CFBundleName</key>
|
||||
<string>ln_jq_app</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
@@ -28,6 +31,10 @@
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>iosamap</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
@@ -44,6 +51,12 @@
|
||||
<string>需要访问您的相册以选择二维码图片进行识别</string>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
<string>fetch</string>
|
||||
<string>location</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
@@ -64,6 +77,7 @@
|
||||
<key>uses</key>
|
||||
<string></string>
|
||||
|
||||
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
@@ -82,5 +96,6 @@
|
||||
<key>LSSupportsOpeningDocumentsInPlace</key>
|
||||
<true/>
|
||||
|
||||
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
66
ln_jq_app/ios/Runner/NativeFirstPage.swift
Normal file
@@ -0,0 +1,66 @@
|
||||
//
|
||||
// NativeFirstPage.swift
|
||||
// Runner
|
||||
//
|
||||
// Created by admin on 2026/2/9.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class NativeFirstPage: UIViewController {
|
||||
var lable:UILabel!
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
// Do any additional setup after loading the view.
|
||||
view.backgroundColor = .white
|
||||
|
||||
// 创建原生UI
|
||||
let label = UILabel()
|
||||
label.text = "iOS 原生页面."
|
||||
label.font = UIFont.systemFont(ofSize: 24, weight: .bold)
|
||||
label.textAlignment = .center
|
||||
label.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
||||
let button = UIButton(type: .custom)
|
||||
button.setTitle("点击原生按钮", for: .normal)
|
||||
button.titleLabel?.font = UIFont.systemFont(ofSize: 18)
|
||||
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
|
||||
button.translatesAutoresizingMaskIntoConstraints = false
|
||||
button.backgroundColor = .blue
|
||||
|
||||
view.addSubview(label)
|
||||
view.addSubview(button)
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
|
||||
label.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: -50),
|
||||
|
||||
button.topAnchor.constraint(equalTo: label.bottomAnchor, constant: 30),
|
||||
button.centerXAnchor.constraint(equalTo: view.centerXAnchor)
|
||||
])
|
||||
|
||||
self.lable = label
|
||||
|
||||
}
|
||||
|
||||
@objc func buttonTapped() {
|
||||
self.lable.text = "click...";
|
||||
|
||||
// 原生按钮点击事件
|
||||
let alert = UIAlertController(
|
||||
title: "原生弹窗",
|
||||
message: "来自 iOS 原生的提示",
|
||||
preferredStyle: .alert
|
||||
)
|
||||
alert.addAction(UIAlertAction(title: "确定", style: .default))
|
||||
present(alert, animated: true)
|
||||
}
|
||||
|
||||
|
||||
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||
view.backgroundColor = .orange
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1 +1,2 @@
|
||||
#import "GeneratedPluginRegistrant.h"
|
||||
#import <AMapNavSDKManager.h>
|
||||
|
||||
@@ -4,5 +4,9 @@
|
||||
<dict>
|
||||
<key>aps-environment</key>
|
||||
<string>development</string>
|
||||
<key>com.apple.developer.background-tasks.continued-processing.gpu</key>
|
||||
<true/>
|
||||
<key>com.apple.developer.location.push</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||