域名解析到服务器ip然后服务器怎么弄才能跳转到那个网站,陕西交通建设集团蓝商分公司网站,centos 安装 wordpress,建设网银登录官方网站flutter插件开发是一个重要的技能#xff0c;拓展flutter与原生的通信#xff0c;将一些公用的东西封装#xff0c;给不同的项目使用。 阅读前置#xff1a; flutter基本通道调用 objective-c基础语法 ios项目基础知识 目录 1、创建一个插件项目2、项目结构3、编写原生代码… flutter插件开发是一个重要的技能拓展flutter与原生的通信将一些公用的东西封装给不同的项目使用。 阅读前置 flutter基本通道调用 objective-c基础语法 ios项目基础知识 目录 1、创建一个插件项目2、项目结构3、编写原生代码4、编写flutter端测试代码 1、创建一个插件项目
创建一个ios原生的插件项目指定平台为ios语言为objective-c也可以是android平台等等。
flutter create -t plugin --platformsios --ios-languageobjc add_helper2、项目结构
example是该项目内置的一个帮助测试我们开发的插件代码的dart项目 从pubspec.yaml文件中可看出依赖的就是即将开发的插件项目 lib中有三个文件
add_helper.dartadd_helper_method_channel.dartadd_helper_platform_interface.dart 这三个文件应该倒着理解看一下interface里面这就是一个抽象的通道平台接口里面定义与原生通道的方法里面就内置了一个官方的例子获取平台版本号的方法抽象。
FutureString? getPlatformVersion() {throw UnimplementedError(platformVersion() has not been implemented.);}///添加一个自定义的方法
Futureint? add(int a, int b) {throw UnimplementedError(add() has not been implemented.);}可以添加自定义的方法测试文件可能会报错点进去暴力注释掉就行method_channel就是platform_interface的实现
overrideFutureString? getPlatformVersion() async {final version await methodChannel.invokeMethodString(getPlatformVersion);return version;}overrideFutureint? add(int a, int b) async {final result await methodChannel.invokeMethodint(add, String, int{a: a,b: b,});return result;}最后这些方法在第一个文件统一通过一个类再封装方法给需要用到的地方的调用。
class AddHelper {FutureString? getPlatformVersion() {return AddHelperPlatform.instance.getPlatformVersion();}Futureint? add(int a, int b) {return AddHelperPlatform.instance.add(a, b);}
}3、编写原生代码 因为我们生成的是oc代码所以这里是这样子的接下来需要初始化ios项目进入example执行
flutter build ios成功后打开xcode打开example下的ios既然是编写原生插件就在原生项目中进行开发插件的代码是被集成在了pod里面的可以看到位置很深 添加原生处理代码只需要在获取版本的方法后面加一个case就行
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {if ([getPlatformVersion isEqualToString:call.method]) {result([iOS stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);} else if ([add isEqualToString:call.method]) {int a [call.arguments[a] intValue];int b [call.arguments[b] intValue];result((a b));} else {result(FlutterMethodNotImplemented);}
}4、编写flutter端测试代码
回到android studio/add_helper/example/lib/main.dart中编写
int totalCount 0;
///
overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: const Text(Plugin example app),),body: Center(child: Column(children: [Text(Running on: $_platformVersion\n),ElevatedButton(onPressed: () async {int? val await _addHelperPlugin.add(totalCount, 1);setState(() {totalCount val ?? -1;});},child: Text(totalCount: $totalCount),)],),),),);}运行项目 参考文档 Flutter插件开发指南01: 通道Channel的编写与实现 Writing custom platform-specific code