返回顶部
首页 > 资讯 > 移动开发 >Flutter与原生IOS(swift)交互系列之一
  • 781
分享到

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

flutteriosPoweredby金山文档 2023-08-31 09:08:32 781人浏览 薄情痞子
摘要

先用Android Studio创建一个空的Flutter工程作为演示 可以看到根目录下有一个名为iOS的目录,这个就是ios的工程目录。 我们将它展开,发现下面有许多个文件

先用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

--结束END--

本文标题: Flutter与原生IOS(swift)交互系列之一

本文链接: https://lsjlt.com/news/384986.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作