flutter 调用原生
  sX9JkgY3DY86 2023年11月13日 37 0

一、flutter调用原生方法

1.调用android

flutter端

class _MyHomePageState extends State<MyHomePage> {
static const MethodChannel methodChannel = MethodChannel("channel_test"); //
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: RaisedButton(
child: Text("a"),
onPressed: () {
() async {
String str = await methodChannel.invokeMethod('getRes');
print(str);
}();
},
),
),
);
}
}

 调用android端

package com.rockcheck.flutter_app1;

import android.os.Bundle;

import androidx.annotation.Nullable;

import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(getFlutterEngine());

new MethodChannel(getFlutterEngine().getDartExecutor().getBinaryMessenger(),"channel_test").setMethodCallHandler(
(call, result) -> {
if (call.method.equals("getRes")) {
result.success("aaa");
} else {
result.notImplemented();
}
}
);
}
}

2调用ios

 flutter端

class _MyHomePageState extends State<MyHomePage> {
static const MethodChannel methodChannel = MethodChannel("channel_test"); //
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: RaisedButton(
child: Text("a"),
onPressed: () {
() async {
await methodChannel.invokeMethod('set', 'bbb');
String str = await methodChannel.invokeMethod('get');
print(str);
}();
},
),
),
);
}
}

ios端

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)

let controller:FlutterViewController = window.rootViewController as! FlutterViewController
let userdefault = FlutterMethodChannel(name: "channel_test", binaryMessenger: controller.binaryMessenger)
userdefault.setMethodCallHandler { (call, result) in
//赋值给了ios端
if "set" == call.method{
self.setPlatString(result: result, str: call.arguments as! String)
}
//回传给了flutter
else if "get" == call.method{
self.getPlatString(result: result)
}
else{
result(FlutterMethodNotImplemented)
}
}

return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
fileprivate func getPlatString(result:FlutterResult){
let token:String = UserDefaults.standard.value(forKey: "v") as! String
result(token)
}
fileprivate func setPlatString(result:FlutterResult,str:String){
UserDefaults.standard.set(str, forKey: "v")
UserDefaults.standard.synchronize()
result(NSNumber(booleanLiteral: true))
}
}

 



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: flutter 国内镜像设置 下一篇: flutter signalr
  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  b1UHV4WKBb2S   2023年11月13日   31   0   0 ide抗锯齿
  b1UHV4WKBb2S   2023年11月13日   22   0   0 flutterDart
  zSWNgACtCQuP   2023年11月13日   27   0   0 ide
sX9JkgY3DY86