Flutter與原生(Androidx)交互

Android端中MainActivity代碼

import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant; 

import io.flutter.plugin.common.EventChannel;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;


public class MainActivity extends FlutterActivity {
  private static final String METHOD_CHANNEL = "com.zhuandian.flutter/android";
  private static final String METHOD_NUMBER_ADD = "numberAdd"; //視頻
  private MethodChannel methodChannel;

  @Override
  public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);
    methodChannel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger() , METHOD_CHANNEL);
    //接受fltuter端傳遞過來的方法,並做出響應邏輯處理
    methodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
      @Override
      public void onMethodCall(MethodCall call, MethodChannel.Result result) {
        System.out.println(call.method);
        if (call.method.equals(METHOD_NUMBER_ADD)) {
          int number1 = call.argument("number1");
          int number2 = call.argument("number1");
          result.success(number1 + number2); //返回兩個數相加後的值
        }
      }
    });
  }
}

flutter端代碼

class _dadState extends State<dad> {

  static final String METHOD_CHANNEL = "com.zhuandian.flutter/android";
  static final String NATIVE_METHOD_ADD = "numberAdd"; //原生android平臺定義的供flutter端喚起的方法名
  static final MethodChannel _MethodChannel = MethodChannel(METHOD_CHANNEL); //平臺交互通道

  @override
  void initState() {
    super.initState();

    Future<String> path = getNumberResult(10,20);
    path.then((String num) {
      setState(() {});
      return num;
    });
  }

  ///調用安卓平臺方法
  Future<String> getNumberResult(int number1,int number2) async {
    Map<String, dynamic> map = {"number1": 13, "number2": 43};
    return await _MethodChannel.invokeMethod(NATIVE_METHOD_ADD, map);
  }


  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return null;
  }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章