diff --git a/example/pubspec.lock b/example/pubspec.lock index 447e2e2..9a7311e 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -348,14 +348,14 @@ packages: source: hosted version: "2.0.2" path: - dependency: transitive + dependency: "direct main" description: name: path url: "https://pub.flutter-io.cn" source: hosted version: "1.8.1" path_provider: - dependency: transitive + dependency: "direct main" description: name: path_provider url: "https://pub.flutter-io.cn" diff --git a/ios/Classes/WeiboKitPlugin.m b/ios/Classes/WeiboKitPlugin.m index 8a3eb41..707108a 100644 --- a/ios/Classes/WeiboKitPlugin.m +++ b/ios/Classes/WeiboKitPlugin.m @@ -35,13 +35,16 @@ result(nil); } else if ([@"isInstalled" isEqualToString:call.method]) { result([NSNumber numberWithBool:[WeiboSDK isWeiboAppInstalled]]); + } else if ([@"isSupportMultipleImage" isEqualToString:call.method]) { + result([NSNumber numberWithBool:YES]); } else if ([@"auth" isEqualToString:call.method]) { [self handleAuthCall:call result:result]; - } else if ([@"shareText" isEqualToString:call.method]) { - [self handleShareTextCall:call result:result]; - } else if ([@"shareImage" isEqualToString:call.method] || + } else if ([@"shareText" isEqualToString:call.method] || + [@"shareImage" isEqualToString:call.method] || + [@"shareMultiImage" isEqualToString:call.method] || + [@"shareVideo" isEqualToString:call.method] || [@"shareWebpage" isEqualToString:call.method]) { - [self handleShareMediaCall:call result:result]; + [self handleShareCall:call result:result]; } else { result(FlutterMethodNotImplemented); } @@ -60,22 +63,11 @@ result(nil); } -- (void)handleShareTextCall:(FlutterMethodCall *)call result:(FlutterResult)result { - WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest request]; +- (void)handleShareCall:(FlutterMethodCall *)call result:(FlutterResult)result { WBMessageObject *message = [WBMessageObject message]; - message.text = call.arguments[@"text"]; - request.message = message; - [WeiboSDK sendRequest:request - completion:^(BOOL success){ - // do nothing - }]; - result(nil); -} - -- (void)handleShareMediaCall:(FlutterMethodCall *)call result:(FlutterResult)result { - WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest request]; - WBMessageObject *message = [WBMessageObject message]; - if ([@"shareImage" isEqualToString:call.method]) { + if ([@"shareText" isEqualToString:call.method]) { + message.text = call.arguments[@"text"]; + } else if ([@"shareImage" isEqualToString:call.method]) { message.text = call.arguments[@"text"]; WBImageObject *object = [WBImageObject object]; FlutterStandardTypedData *imageData = call.arguments[@"imageData"]; @@ -87,6 +79,23 @@ object.imageData = [NSData dataWithContentsOfFile:imageUrl.path]; } message.imageObject = object; + } else if ([@"shareMultiImage" isEqualToString:call.method]) { + message.text = call.arguments[@"text"]; + WBImageObject *object = [WBImageObject object]; + NSArray *imageUris = call.arguments[@"imageUris"]; + NSMutableArray* images = [[NSMutableArray alloc] init]; + for (NSString *imageUri in imageUris) { + NSURL *imageUrl = [NSURL URLWithString:imageUri]; + [images addObject:[UIImage imageWithContentsOfFile:imageUrl.path]]; + } + [object addImages:images]; + message.imageObject = object; + } else if ([@"shareVideo" isEqualToString:call.method]) { + message.text = call.arguments[@"text"]; + WBNewVideoObject *object = [WBNewVideoObject object]; + NSString *videoUri = call.arguments[@"videoUri"]; + [object addVideo:[NSURL URLWithString:videoUri]]; + message.videoObject = object; } else if ([@"shareWebpage" isEqualToString:call.method]) { WBWebpageObject *object = [WBWebpageObject object]; object.objectID = [[NSUUID UUID].UUIDString stringByReplacingOccurrencesOfString:@"-" withString:@""]; @@ -99,6 +108,7 @@ object.webpageUrl = call.arguments[@"webpageUrl"]; message.mediaObject = object; } + WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest request]; request.message = message; [WeiboSDK sendRequest:request completion:^(BOOL success){ diff --git a/lib/src/weibo_kit_method_channel.dart b/lib/src/weibo_kit_method_channel.dart index c3ad252..e8716ef 100644 --- a/lib/src/weibo_kit_method_channel.dart +++ b/lib/src/weibo_kit_method_channel.dart @@ -118,7 +118,7 @@ class MethodChannelWeiboKit extends WeiboKitPlatform { bool clientOnly = false, }) { assert(text == null || text.length <= 1024); - assert(imageUris.isNotEmpty && imageUris.every((Uri element) => element.isScheme('file'))); + assert(imageUris.isNotEmpty && imageUris.every((Uri element) => element.isScheme('file')) && imageUris.map((Uri element) => File.fromUri(element).lengthSync()).reduce((int value, int element) => value + element) <= 30 * 1024 * 1024); return methodChannel.invokeMethod( 'shareMultiImage', { @@ -136,7 +136,7 @@ class MethodChannelWeiboKit extends WeiboKitPlatform { bool clientOnly = false, }) { assert(text == null || text.length <= 1024); - assert(videoUri.isScheme('file')); + assert(videoUri.isScheme('file') && File.fromUri(videoUri).lengthSync() <= 50 * 1024 * 1024); return methodChannel.invokeMethod( 'shareVideo', { diff --git a/lib/src/weibo_kit_platform_interface.dart b/lib/src/weibo_kit_platform_interface.dart index 226276c..1c68442 100644 --- a/lib/src/weibo_kit_platform_interface.dart +++ b/lib/src/weibo_kit_platform_interface.dart @@ -63,18 +63,18 @@ abstract class WeiboKitPlatform extends PlatformInterface { /// 分享 - 文本 Future shareText({ required String text, - bool clientOnly = false, + bool clientOnly = false/* Android Only */, }) { throw UnimplementedError('shareText({required text, clientOnly}) has not been implemented.'); } /// 分享 - 图片 - /// 图片文件分享用 shareMultiImage + /// Android 图片文件分享用 shareMultiImage Future shareImage({ String? text, Uint8List? imageData, Uri? imageUri, - bool clientOnly = false, + bool clientOnly = false/* Android Only */, }) { throw UnimplementedError('shareImage({text, imageData, imageUri, clientOnly}) has not been implemented.'); } @@ -83,7 +83,7 @@ abstract class WeiboKitPlatform extends PlatformInterface { Future shareMultiImage({ String? text, required List imageUris, - bool clientOnly = false, + bool clientOnly = false/* Android Only */, }) { throw UnimplementedError('shareMultiImage({text, required imageUris, clientOnly}) has not been implemented.'); } @@ -92,19 +92,18 @@ abstract class WeiboKitPlatform extends PlatformInterface { Future shareVideo({ String? text, required Uri videoUri, - bool clientOnly = false, + bool clientOnly = false/* Android Only */, }) { throw UnimplementedError('shareVideo({text, required videoUri, clientOnly}) has not been implemented.'); } /// 分享 - 网页 - /// iOS:分享多媒体已经弃用 请不要用相关api Future shareWebpage({ required String title, required String description, required Uint8List thumbData, required String webpageUrl, - bool clientOnly = false, + bool clientOnly = false/* Android Only */, }) { throw UnimplementedError('shareWebpage({required title, required description, required thumbData, required webpageUrl, clientOnly}) has not been implemented.'); }