文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Flutter与原生IOS(swift)交互系列之一

2023-08-31 09:11

关注

先用Android Studio创建一个空的flutter工程作为演示

可以看到根目录下有一个名为ios的目录,这个就是ios的工程目录。

我们将它展开,发现下面有许多个文件

打开苹果电脑上的Xcode

选择ios目录下的Runner.xcworkspace打开

打开之后如下图所示,我们点击AppDelegate这个文件,这个是ios工程中注册插件的地方,我们写的所有功能的插件都需要在这里注册

可以看到首次打开右上角出现了一个红色的 No such module 'Flutter'

这时只要点击运行就行

可以看到工程正常运行没有问题,之前红色的报错也消失了

这时明明工程运行起来了,又出来了一个红色错误

Incorrect argument label in call (have 'with:', expected 'withRegistry:')

这个和上面那个错误一样,只要工程能正常运行,就不需要管。

现在我们可以写代码了,在刚才的AppDelegate类里写上如下的方法:

func testPlugin(messenger: FlutterBinaryMessenger) {    let channel = FlutterMethodChannel(name: "plugin_apple", binaryMessenger: messenger)    channel.setMethodCallHandler { (call:FlutterMethodCall, result:@escaping FlutterResult) in            if (call.method == "apple_one") {            result(["result":"success","code":200]);        }                if (call.method == "apple_two") {            result(["result":"success","code":404]);        }    }}

上面的代码里面只需关注三个地方:

第一个是:"plugin_apple" 这是通道名称,需要和Flutter端定义的相同

第一个是:"apple_one"和"apple_two"这是方法名称,方法可以定义多个,需要和Flutter端定义的相同

第一个是:result(...) 这是方法的返回值,可以直接返回一个字符串result("data"),也可以返回一个Map格式的返回值result(["a":1,"b":2,"c":3])

然后注册这个方法,如下所示:

 let messenger : FlutterBinaryMessenger = window?.rootViewController as! FlutterBinaryMessenger    testPlugin(messenger: messenger)

现在我们开始写Flutter端的调用代码

回到Android studio,在main.dart文件里面写如下方法

 Future appleOne() async {    MethodChannel _channel = const MethodChannel('plugin_apple');    final result = await _channel.invokeMethod('apple_one');    Map map = result as LinkedHashMap;    print("result: ${map["result"]}");    print("code: ${map["code"]}");  }
 Future appleTwo() async {    MethodChannel _channel = const MethodChannel('plugin_apple');    final result = await _channel.invokeMethod('apple_two');    Map map = result as LinkedHashMap;    print("result: ${map["result"]}");    print("code: ${map["code"]}");  }
 @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text(widget.title),      ),      body: Center(        child: Column(          mainAxisAlignment: MainAxisAlignment.center,          children: [            GestureDetector(                onTap: (){                  appleOne();                },                child: const Text('调用方法 appleOne')),            const SizedBox(height: 50),            GestureDetector(                onTap: (){                  appleTwo();                },                child: const Text('调用方法 appleTwo')),          ],        ),      ),    );  }

回到Xcode,点击这个黑色的三角图标启动项目

可以看到顺利的启动了项目~

依次点击两个按钮

查看控制台,可以看到顺利打印出了结果

Flutter与IOS基础交互就完成了~

关注WX公众号:大前端Pro 发送关键字 ios交互系列一 获取示例代码

来源地址:https://blog.csdn.net/u013474690/article/details/128782160

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯