由于单位项目中上传图片功能用的是华为云,flutter暂时好像还没有相关插件,所以只能想到去调用原生进行图片上传,上传成功后在返回URL给flutter
flutter代码如下:
static const platform = const MethodChannel('com.uploadImage');
void _getNativeMessage() async{
String result;
try {
// OC回调中对应的”约定” : getFlutterMessage,[1,2,3]:传递参数
result = await platform.invokeMethod('getFlutterMessage',[1,2,3]);
} on PlatformException catch (e) {
result = "error message $e";
}
}
其中 com.uploadImage
需要与iOS端一致
iOS端代码如下
新建文件.h文件如下:
#import <Foundation/Foundation.h>
#import <Flutter/Flutter.h>
NS_ASSUME_NONNULL_BEGIN
@interface UploadImagePlugin : NSObject<FlutterPlugin>
@end
新建文件.m文件如下:
#import "UploadImagePlugin.h"
#import <FluttertoastPlugin.h>
@interface UploadImagePlugin()
@property(nonatomic, retain) FlutterMethodChannel *channel;
@end
@implementation UploadImagePlugin
+ (void)registerWithRegistrar:(NSObject <FlutterPluginRegistrar> *)registrar {
FlutterMethodChannel *channel =
[FlutterMethodChannel methodChannelWithName:@"com.uploadImage" binaryMessenger:registrar.messenger];
[channel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult _Nonnull result) {
NSLog(@"222");
result(@"3333");
}];
}
其中result
为回调给flutter的函数,里面可以携带一些参数
iOS端还需在GeneratedPluginRegistrant
该文件中把刚刚新建的文件注册一下,代码如下:
[UploadImagePlugin registerWithRegistrar:[registry registrarForPlugin:@"UploadImage"]];
至此flutter与iOS的交互就结束了,我也是找了很多教程,都是新建文件写上注册flutter的通知之类的方法,最后都没有走通,最后用这个方式走通了,记录一下!!!