주식회사 이웃사촌

MethodChannel native Api 호출하기 본문

Flutter

MethodChannel native Api 호출하기

(주)이웃사촌 2021. 8. 16. 12:22

1.Flutter 에서 호출하기

  static const platform = const MethodChannel('com.flutter.dev/info');

  static const platform3 = const MethodChannel('com.flutter.dev/dialog');

 

Future<void_getDeviceInfo() async {

    String deviceInfo;

    try {

      final String result = await platform.invokeMethod('getDeviceInfo');

      deviceInfo = 'Device Info : $result';

    } catch (e) {

      deviceInfo = 'Failed to get Device info : ${e.toString()}';

    }

 

    setState(() {

      _deviceInfo = deviceInfo;

    });

  }

 

2.android 에서 선언 처리하기

package com.example.native_example

 

import android.app.AlertDialog

import android.os.Build

 

import androidx.annotation.NonNull

import io.flutter.embedding.android.FlutterActivity

import io.flutter.embedding.engine.FlutterEngine

import io.flutter.plugin.common.MethodChannel

 

import android.util.Base64;

 

class MainActivity : FlutterActivity() {

    

    private val CHANNEL = "com.flutter.dev/info"

    private val CHANNEL2 = "com.flutter.dev/encrypto"

    private val CHANNEL3 = "com.flutter.dev/dialog"

 

    override fun configureFlutterEngine(@NonNull flutterEngineFlutterEngine) {

        super.configureFlutterEngine(flutterEngine)

 

        //###3.showDialog 처리

        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL3).setMethodCallHandler { call, result ->

            if (call.method == "showDialog") {

                AlertDialog.Builder(this).setTitle("Flutter").setMessage("네이티브에서 출력하는 창입니다").show()

            }

            

        }



        //###2.encrypt 처리 메서드

        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL2).setMethodCallHandler { call, result ->

            if (call.method == "getEncrypto"){

                val data= call.arguments.toString().toByteArray()

                val changeText= Base64.encodeToString(dataBase64.DEFAULT)

                result.success(changeText)

            }else if(call.method=="getDecode"){

                val data= call.arguments.toString()

                val changeText= Base64.decode(dataBase64.DEFAULT)

                result.success(String(changeText))

 

            }

        }



        //###1.핸드폰 종류를 반환하는 메서드 선언

        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->

            if (call.method == "getDeviceInfo") {

                val deviceInfo = getDeviceInfo()

                result.success(deviceInfo)

            }

        }

    }

 

    private fun getDeviceInfo(): String {

        val sb = StringBuilder()

        sb.append(Build.DEVICE + "\n")

        sb.append(Build.BRAND + "\n")

        //sb.append(Build.MODEL + "\n");

 

        return sb.toString()

 

    }

}

 

 

 

반응형
Comments