Flutter外掛開發---》呼叫Android原生Toast
阿新 • • 發佈:2021-08-04
-
example中main.dart佈局
-
注意:FlutterPluginOne是在建立外掛時根據名字來進行建立的,如下圖:
具體內容如下:
class FlutterPluginOne { // 這裡的flutter_plugin_one字串沒有特殊要求,只需要和FlutterPluginOnePlugin.kt中的設定一樣即可,即第4步 static const MethodChannel _channel = const MethodChannel('flutter_plugin_one'); static Future<String?> get platformVersion async { final String? version = await _channel.invokeMethod('getPlatformVersion'); return version; } // 顯示Toast static Future<void> showToast() async { await _channel.invokeMethod("showToast"); } // 通過get static Future<void> get showToastByGet async { await _channel.invokeMethod("showToast"); } // 接受引數 static Future<void> showToastByMessage({String? message}) async { Map param = Map<String,String>(); param["message"] = message ?? "showToastByMessage"; await _channel.invokeMapMethod("showToastByMessage",param); } }
-
外掛專案下的android目錄下:
-
FlutterPluginOnePlugin.kt中的內容如下:
/** FlutterPluginOnePlugin */ class FlutterPluginOnePlugin() : FlutterPlugin, MethodCallHandler { private lateinit var context: Context /// The MethodChannel that will the communication between Flutter and native Android /// /// This local reference serves to register the plugin with the Flutter Engine and unregister it /// when the Flutter Engine is detached from the Activity private lateinit var methodChannel: MethodChannel private lateinit var eventChannel: EventChannel override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { methodChannel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter_plugin_one") methodChannel.setMethodCallHandler(this) context = flutterPluginBinding.applicationContext } override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { if (call.method == "getPlatformVersion") { result.success("Android ${android.os.Build.VERSION.RELEASE}") } else if (call.method == "showToast") { Toast.makeText(context, "來自Android SDK中的Toast", Toast.LENGTH_SHORT) .show() } else if (call.method == "showToastByMessage") { val arguments = call.arguments as Map<*, *> Toast.makeText(context, arguments["message"] as String, Toast.LENGTH_SHORT) .show() } else { result.notImplemented() } } override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { methodChannel.setMethodCallHandler(null) } }
-
當我們點選+按鈕時,就會彈出“來自Android SDK中的Toast”內容。