摘要:Flutter版本号:1.12.13,Kotlin版本号:1.3.72
版本号不同,实现的方式不一样,所以特此标注下。
具体的实现原理,自行查阅。这里只写代码实现过程,主要原因是网上Kotlin的实现方式实在太少,特此记录。
Flutter:
import 'package:base_library/base_library.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class ChannelDemoPage extends StatefulWidget {
@override
_ChannelDemoPageState createState() => _ChannelDemoPageState();
}
class _ChannelDemoPageState extends State<ChannelDemoPage> {
static const _channel =
const MethodChannel('plugins.flutter.io/FlutterMessagePlugin');
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Row(
),
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
floatingActionButton: new FloatingActionButton(
backgroundColor: Colors.blueAccent,
onPressed: () {
this.getResult();
},
child: new Icon(Icons.adb),
),
);
}
void getResult() async {
try {
Map<String, Object> map = {"shareUrl": "https://www.baidu.com"};
var result = await _channel.invokeMethod("getRealUrl", map);
LogUtil.e("result->$result");
} catch (e) {
LogUtil.e("e->, $e");
}
}
}
Kotlin:
import android.content.Context
import android.util.Log
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.*
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
class FlutterMessagePlugin : FlutterPlugin, MethodCallHandler {
private var channel: MethodChannel? = null
private var context: Context? = null
override fun onMethodCall(call: MethodCall, result: Result) {
if (call.method == "getRealUrl") {
var shareUrl = call.argument<String>("shareUrl");
Log.v("shareUrl=", shareUrl)
result.success("处理完成")
} else {
result.notImplemented()
}
}
companion object {
var channelName = "plugins.flutter.io/FlutterMessagePlugin";
fun registerWith(registry: PluginRegistry.Registrar) {
var flutterPlugin = FlutterMessagePlugin();
flutterPlugin.channel = MethodChannel(registry.messenger(), channelName);
flutterPlugin.context = registry.context();
flutterPlugin.channel?.setMethodCallHandler(flutterPlugin);
}
}
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel = MethodChannel(binding.binaryMessenger, channelName)
context = binding.applicationContext
channel!!.setMethodCallHandler(this)
}
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel?.setMethodCallHandler(null)
channel = null;
}
}
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterActivity () {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
flutterEngine.getPlugins().add(FlutterMessagePlugin());
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}
显示结果:
V/shareUrl=: https://www.baidu.com
I/flutter: common_utils e result->处理完成
来源:oschina
链接:https://my.oschina.net/willdas/blog/4497784