最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Flutter 調(diào)用 Android Native 的方法

 更新時(shí)間:2021年01月22日 11:43:16   作者:zzzyplove  
這篇文章主要介紹了詳解Flutter 調(diào)用 Android Native 的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Flutter 調(diào)用 Android Native 的方法,是通過MethodChannel的方式來實(shí)現(xiàn)的:

在Android端:

  • 創(chuàng)建一個(gè)Class,實(shí)現(xiàn)FlutterPlugin和MethodCallHandler接口
  • 重寫onAttachedToEngine(),onDetachedFromEngine(),onMethodCall()
  • onAttachedToEngine()中,根據(jù)自定義的CHANNEL_NAME創(chuàng)建MethodChannel, onDetachedFromEngine中,釋放MethodChannel
  • onMethodCall中,通過自定義的METHOD_NAME,來響應(yīng)Flutter中,invokeMethod對(duì)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 的方法的過程,有時(shí)間再分析下他們的實(shí)現(xiàn)原理
待續(xù)....
附,我當(dāng)前的Flutter版本是 :
Flutter 1.22.3 • channel stable • https://github.com/flutter/flutter
Framework • revision 8874f21e79 (3 months ago) • 2020-10-29 14:14:35 -0700
Engine • revision a1440ca392
Tools • Dart 2.10.3

 到此這篇關(guān)于詳解Flutter 調(diào)用 Android Native 的方法的文章就介紹到這了,更多相關(guān)Flutter 調(diào)用Android Native內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何自己實(shí)現(xiàn)Android View Touch事件分發(fā)流程

    如何自己實(shí)現(xiàn)Android View Touch事件分發(fā)流程

    這篇文章主要介紹了如何自己實(shí)現(xiàn)Android View Touch事件分發(fā)流程,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-03-03
  • API處理Android安全距離詳情

    API處理Android安全距離詳情

    這篇文章主要介紹了API處理Android安全距離詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-06-06
  • 深入學(xué)習(xí)Android中的Intent

    深入學(xué)習(xí)Android中的Intent

    深入學(xué)習(xí)Android中的Intent,Intent提供了一種通用的消息系統(tǒng),它允許在你的應(yīng)用程序見傳遞Intent來執(zhí)行動(dòng)作和產(chǎn)生事件,對(duì)Intent感興趣的小伙伴們可以參考一下
    2015-12-12
  • android多媒體類VideoView使用方法詳解

    android多媒體類VideoView使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了android多媒體類VideoView使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Flutter異步操作實(shí)現(xiàn)流程詳解

    Flutter異步操作實(shí)現(xiàn)流程詳解

    在Flutter中,借助 FutureBuilder 組件和 StreamBuilder 組件,可以非常方便地完成異步操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • Android使用Kotlin API實(shí)踐WorkManager

    Android使用Kotlin API實(shí)踐WorkManager

    這篇文章主要介紹了Android使用Kotlin API實(shí)踐WorkManager的步驟,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-04-04
  • Android實(shí)現(xiàn)一個(gè)絲滑的自動(dòng)輪播控件實(shí)例代碼

    Android實(shí)現(xiàn)一個(gè)絲滑的自動(dòng)輪播控件實(shí)例代碼

    輪播圖對(duì)大家來說應(yīng)該再熟悉不過了,下面這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)一個(gè)絲滑的自動(dòng)輪播控件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Android利用Sensor實(shí)現(xiàn)傳感器功能

    Android利用Sensor實(shí)現(xiàn)傳感器功能

    這篇文章主要為大家詳細(xì)介紹了Android利用Sensor實(shí)現(xiàn)傳感器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Android使用TransitionDrawable漸變切換多張圖片

    Android使用TransitionDrawable漸變切換多張圖片

    這篇文章主要為大家詳細(xì)介紹了Android使用TransitionDrawable漸變切換多張圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android自定義View事件分發(fā)流程詳解

    Android自定義View事件分發(fā)流程詳解

    這篇文章主要為大家介紹了Android自定義View事件分發(fā)流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評(píng)論

古交市| 伊宁县| 木兰县| 贡山| 南皮县| 蕲春县| 南宫市| 龙州县| 文安县| 靖宇县| 林州市| 恩施市| 临高县| 石阡县| 嘉义县| 安福县| 甘洛县| 南漳县| 公安县| 绥宁县| 盖州市| 乌拉特中旗| 高密市| 治多县| 长沙县| 凌源市| 车致| 连南| 息烽县| 卢氏县| 读书| 宜昌市| 绍兴县| 天柱县| 遂溪县| 青浦区| 柳江县| 阜宁县| 琼海市| 雅江县| 廊坊市|