最近項目要換架構特此學習Flutter,本教程適合像我一樣剛剛開始學習Flutter的小白倦西。
Flutter調(diào)用Android原生方法
理解
一.Android端
1.創(chuàng)建插件
2.確定插件中對應的渠道名稱
3.命名flag温技,以及flag對應的Android方法。
4.將插件在FlutterActivity中完成注冊
二.Flutter端
1.創(chuàng)建渠道
2.調(diào)用對應的flag
Android端創(chuàng)建渠道和方法完成注冊
一.Android端代碼
// 創(chuàng)建plugins
package io.flutter.plugins;
import android.content.Context;
import android.widget.Toast;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
public class MytestPlugins implements MethodChannel.MethodCallHandler {
private static final String CHANNEL = "channel_name";
private Context mContext;
private MytestPlugins(Context context, BinaryMessenger binaryMessenger) {
this.mContext = context;
new MethodChannel(binaryMessenger, CHANNEL).setMethodCallHandler(this);
}
public static void registerWith(FlutterActivity activity, BinaryMessenger binaryMessenger) {
new MytestPlugins(activity, binaryMessenger);
}
@Override
public void onMethodCall(MethodCall call, MethodChannel.Result result) {
String method = call.method;
switch (method) {
case "flag_name": //與Flutter中的invokeMethod傳參一一對應。
showAndroidToast();
break;
default:
result.notImplemented();
break;
}
}
private void showAndroidToast() {
Toast.makeText(mContext, "第一個Flutter invoke Native", Toast.LENGTH_LONG).show();
}
}
// 注冊plugins
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MytestPlugins.registerWith(this, getFlutterEngine().getDartExecutor().getBinaryMessenger());
}
}
二.Flutter端
import 'package:flutter/services.dart';
ElevatedButton(
child: Text('Flutter invoke Native'),
onPressed: () {
toNative(); // 按鈕點擊事件調(diào)用方法;
},
),
/// 遠程調(diào)用需要異步操作, 把這個方法生命成 async
static void toNative() async {
// 處理異常
try {
// channel_name這個時渠道的名稱必須與Android端保持一致
// flag_name與android端的MethodCall.method字符串一一對應;
await MethodChannel('channel_name').invokeMethod('flag_name');
} on PlatformException catch (e) {
}
}