本篇文章給大家分享的是有關(guān)如何在Flutter中調(diào)用 Android中的Native方法,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

Flutter 調(diào)用 Android Native 的方法,是通過MethodChannel的方式來實現(xiàn)的:
在Android端:
創(chuàng)建一個Class,實現(xiàn)FlutterPlugin和MethodCallHandler接口
重寫onAttachedToEngine(),onDetachedFromEngine(),onMethodCall()
onAttachedToEngine()中,根據(jù)自定義的CHANNEL_NAME創(chuàng)建MethodChannel, onDetachedFromEngine中,釋放MethodChannel
onMethodCall中,通過自定義的METHOD_NAME,來響應(yīng)Flutter中,invokeMethod對Native的通信,代碼如下
class MethodChannelPlugin : FlutterPlugin, MethodChannel.MethodCallHandler {
private var methodChannel: MethodChannel? = null
private var mNoteForFlutterListener: NoteForFlutterListener? = null
companion object {
private const val CHANNEL_NAME = "method_channel"
private const val METHOD_NAME = "saveNote"
val instance: MethodChannelPlugin by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
MethodChannelPlugin()
}
}
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
methodChannel = MethodChannel(binding.binaryMessenger, CHANNEL_NAME)
methodChannel?.setMethodCallHandler(this)
}
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
methodChannel?.setMethodCallHandler(null)
methodChannel = null
}
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
if (call.method == METHOD_NAME) {
val content = call.argument<String>("content")
mNoteForFlutterListener?.sendData(content!!)
result.success("success")
} else {
result.notImplemented()
}
}
fun setListener(noteForFlutterListener: NoteForFlutterListener) {
mNoteForFlutterListener = noteForFlutterListener
}在Flutter端:
根據(jù)Native中定義的METHOD_NAME來創(chuàng)建MethodChannel
通過MethodChannel.invokeMethod(METHOD_NAME,params),參數(shù)METHOD_NAME為Native中定義的METHOD_NAME,params為傳遞的參數(shù),就可以和Native進(jìn)行通信了,在Native的onMethodCall方法中,通過call.method == METHOD_NAME來確定,F(xiàn)lutter是否調(diào)用的是Native中定義的METHOD_NAME的方法,代碼如下
class NoteMainFulState extends State<NoteMainFul> {
//flutter 和 native 通信
static const _methodMessageChannel = MethodChannel("method_channel");
TextField textField;
TextEditingController textEditingController;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
margin: EdgeInsets.fromLTRB(20.0, 60.0, 20.0, 20.0),
child: Column(
children: [
Container(
child: Column(
children: [
textField = TextField(
//去掉下劃線
decoration: InputDecoration(border: InputBorder.none),
enabled: true,
controller: textEditingController = NoteTextEditingController(),
keyboardType: TextInputType.multiline,
textInputAction: TextInputAction.newline,
maxLines: null,
),
RichText(
text: TextSpan(),
),
],
),
),
Container(
color: Colors.deepPurple,
height: 50,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
GestureDetector(
child: Icon(
Icons.forward,
),
onTap: clickOut,
)
],
),
)
],
),
),
);
}
void clickOut() async {
//調(diào)用native方法,返回首頁
var content = textEditingController.text;
Map<String, dynamic> map = {"content": content};
var result = await _methodMessageChannel.invokeMethod("saveNote", map);
print("result $result");
}以上就是如何在Flutter中調(diào)用 Android中的Native方法,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱:如何在Flutter中調(diào)用Android中的Native方法-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.chinadenli.net/article40/psceo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、標(biāo)簽優(yōu)化、云服務(wù)器、小程序開發(fā)、網(wǎng)頁設(shè)計公司、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容