1. 程式人生 > 其它 >Flutter外掛開發---》呼叫Android原生Toast

Flutter外掛開發---》呼叫Android原生Toast

  1. example中main.dart佈局

  2. 注意: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);
  }
}
  1. 外掛專案下的android目錄下:

  2. 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)
        }
    }
    
  3. 當我們點選+按鈕時,就會彈出“來自Android SDK中的Toast”內容。