}

class MethodChannelDemo extends StatefulWidget {

@override

_MethodChannelDemoState createState() => _MethodChannelDemoState();

}

class _MethodChannelDemoState extends State {

var channel = MethodChannel(‘com.example.flutterios.MethodChannel’);

var _data;

@override

Widget build(BuildContext context) {

return MaterialApp(

home: Scaffold(

appBar: AppBar(title: Text(“IOS-MethodChannelDemo”)),

body: Column(

children: [

SizedBox(height: 50,),

RaisedButton(

child: Text(‘发送数据到原生’),

onPressed: () async {

var result = await channel

.invokeMethod(‘sendData’, {‘name’: ‘张三’, ‘age’: 18});

var name = result[‘name’];

var age = result[‘age’];

setState(() {

_data = ‘ n a m e , name, name,age’;

});

},

),

Text(‘原生返回数据:$_data’)

],

),

),

);

}

}

说明:com.example.flutterios.MethodChannel是iOS端MethodChannel全路径

2.2 创建IOS端MethodChannelDemo

import Flutter

import UIKit

public class MethodChannelDemo {

init(messenger: FlutterBinaryMessenger) {

let channel = FlutterMethodChannel(name: “com.example.flutterios.MethodChannel”, binaryMessenger: messenger)

channel.setMethodCallHandler { (call:FlutterMethodCall, result:@escaping FlutterResult) in

if (call.method == “sendData”) {

if let dict = call.arguments as? Dictionary<String, Any> {

let name:String = dict[“name”] as? String ?? “”

let age:Int = dict[“age”] as? Int ?? -1

result([“name”:“hello,(name)”,“age”:age])

}

}

}

}

}

2.3 在AppDelegate设置MethodChannelDemo

import UIKit

import Flutter

@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

MethodChannelDemo(messenger: controller.binaryMessenger)

GeneratedPluginRegistrant.register(with: self)

return super.application(application, didFinishLaunchingWithOptions: launchOptions)

}

}

2.4 效果图

三 iOS 端向Flutter主动发送数据-定时器


3.1 创建Flutter端MethodChannel

import ‘package:flutter/foundation.dart’;

import ‘package:flutter/material.dart’;

import ‘package:flutter/services.dart’;

void main() {

runApp(MethodChannelDemo());

}

class MethodChannelDemo extends StatefulWidget {

@override

_MethodChannelDemoState createState() => _MethodChannelDemoState();

}

class _MethodChannelDemoState extends State {

var channel = MethodChannel(‘com.example.flutterios.MethodChannel’);

var _data;

var _nativeData;

@override

void initState() {

channel.setMethodCallHandler((call)async{

setState(() {

_nativeData = call.arguments[‘count’];

});

});

}

@override

Widget build(BuildContext context) {

return MaterialApp(

home: Scaffold(

appBar: AppBar(title: Text(“IOS-MethodChannelDemo”)),

body: Column(

children: [

SizedBox(height: 50,),

RaisedButton(

child: Text(‘发送数据到原生’),

onPressed: () async {

var result = await channel

.invokeMethod(‘sendData’, {‘name’: ‘张三’, ‘age’: 18});

var name = result[‘name’];

var age = result[‘age’];

setState(() {

_data = ‘ n a m e , name, name,age’;

});

},

),

Text(‘原生返回数据:$_data’),

Text(‘原生主动发送数据:$_nativeData’)

],

),

),

);

}

}

3.2 创建IOS端MethodChannelDemo

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试

  • 技能

  • 面试技巧+面试题

    《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
    题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
    Android希望=技能+面试

  • 技能
    [外链图片转存中…(img-p8cU7cyZ-1715064234990)]

  • 面试技巧+面试题
    [外链图片转存中…(img-rwGiRyCC-1715064234991)]
    《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐