Flutter与原生通信

直接上代码:
dart:

class StreamView extends StatefulWidget {
  @override
  _StreamViewState createState() => _StreamViewState();
}

class _StreamViewState extends State<StreamView> {
  var getData;
  void sendChannel()async{
  
    final chanel = MethodChannel('example.send');
    var data = await chanel.invokeMethod('get',['who are you',123]);


    getData = data.toString();
    setState(() {});

  }
  @override
  Widget build(BuildContext context) {
    print('build');

    return Scaffold(
      body: Center(child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(getData??''),
          FlatButton(onPressed: ()=>sendChannel(), child: Text('send'))
        ],
      ),),
    );
  }
}

android >>>>MainActivity.java

public class MainActivity extends FlutterActivity {
    @Override
  public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {

    GeneratedPluginRegistrant.registerWith(flutterEngine);
//getFlutterView()已经被删除  ,使用flutterEngine.getDartExecutor().getBinaryMessenger()替换
        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(),
                "example.send").setMethodCallHandler(new MyChannel());
  }

}
class  MyChannel implements MethodChannel.MethodCallHandler{

    @Override
    public void onMethodCall(MethodCall call, MethodChannel.Result result) {
        if(call.method.equals("get")){
           result.success("Native Answer");
        }
        if(call.arguments!=null){
            if(call.arguments instanceof ArrayList){
                ArrayList list= (ArrayList) call.arguments;
                String a= (String) list.get(0);
                int b= (int) list.get(1);
                System.out.println(a); // who are you
                System.out.println(b); // 123
            }
        }

    }
}

ios>>> Runner > appdelegate.swift
没学过swift,仅供参考

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    //start
    let controller = window?.rootViewController as! FlutterViewController;
    let channel = FlutterMethodChannel(name: "example.send", binaryMessenger: controller.binaryMessenger);
    channel.setMethodCallHandler { (call, result) in
        if(call.method=="get"){
            result("Native Answer");
        }
    }
    //end
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

参考文档:Flutter官方 https://flutter.dev/docs/development/platform-integration/platform-channels
]

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Flutter和Native的通信是通过Channel来完成的。Flutter使用了一个灵活的系统,允许您调用特定...
    莫库施勒阅读 3,944评论 0 2
  • 文❤木子心士 2019年6月7日,收到一则来自“今日头条”的系统通知,方知入驻头条已经足足一年矣。慨叹光阴似箭日月...
    木子心士阅读 1,155评论 10 13
  • 既然注定,何不提前使用自己的权利 “如果注定三年后你是我的女朋友,我何不提前使用自己的权利”这是《何以笙箫默》中著...
    水星果冻阅读 1,361评论 0 0
  • 我们现在对事物,人物的喜爱,我们的每一个选择,生活状态,们我的每个行为思想,其实都与我的过去息息相关,只是我们还没...
    丶青衣素酒灬阅读 184评论 0 0
  • 七月最后三两天里 灌闷着满脑子的情绪 我排斥新月的到来 无比的排斥。 昨天下了整天雨 好像应景着的心...
    aiya_6f08阅读 289评论 0 0