Flutter學(xué)習(xí)的問題記錄

1、dart與原生交互-MethodChannel

1.1、Android

MethodChannel的兩參構(gòu)造MethodChannel(BinaryMessenger messenger, String name)要求傳一個(gè)BinaryMessenger 類型的參數(shù),網(wǎng)上很多老版本方法例如用registrar.messenger()或FlutterActivity的flutterView屬性等都已經(jīng)過(guò)時(shí),目前1.17.5應(yīng)使用:

val methodChannel = MethodChannel(flutterEngine!!.dartExecutor.binaryMessenger, "Flutter_Demo_Method")

不知道后面版本還會(huì)不會(huì)改,使用一些老教材學(xué)習(xí)時(shí)用新的SDK真的很難受······
onMethodCall的處理好像沒變:

override fun onMethodCall(methodCall: MethodCall, channelResult: MethodChannel.Result) {
        when (methodCall.method) {
            "updateApp" -> {
                val str = methodCall.argument<String>("str")!!
                val num = methodCall.argument<Int>("num")!!
                val bool = methodCall.argument<Boolean>("bool")!!
                val json = methodCall.argument<String>("userInfo")!!
                val userInfo = Gson().fromJson<UserInfo>(json, UserInfo::class.java)

//                channelResult.success("failure")
                val hashMap = HashMap<String, Any?>()
                hashMap["resultCode"] = 200
                hashMap["resultMsg"] = "success"
                channelResult.success(hashMap)
            }
            else -> {
                channelResult.notImplemented()
            }
        }
    }

1.2、iOS

邏輯與Android差不多,就區(qū)別在語(yǔ)法上,特別是從FlutterMethodCall讀取入?yún)?,iOS這邊沒有argument,只有arguments,所以需要將參數(shù)列表轉(zhuǎn)為NSDictionary再去解析需要的參數(shù)值

        let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
        let methodChannel : FlutterMethodChannel = FlutterMethodChannel.init(name: "ECS_Personal_Method", binaryMessenger: controller.binaryMessenger)
        
        methodChannel.setMethodCallHandler({(call:FlutterMethodCall, result: FlutterResult) -> Void in
            let agrs = call.arguments as! NSDictionary
            switch call.method {
            case "updateApp" :
                let str= agrs["str"] as! String
                let num= agrs["num"] as! Int
                let json = agrs["userInfo"] as! NSDictionary
                result("")
            default:
                result(FlutterMethodNotImplemented)
            }
        })

2、webview_flutter插件

webview_flutter插件在iOS上使用時(shí)需要在Info.plist里加入

<key>io.flutter.embedded_views_preview</key>
<true/>

如果訪問http地址,還需要加

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

但是用xcode打開iOS項(xiàng)目去編輯,應(yīng)該是要這樣:


Info.plist

如果全部按照AS里的key去寫,最終沒有效果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容