提交 1aa33b92 authored 作者: mafanwei's avatar mafanwei

Make Share Image Support Uint8List

上级 b702de15
......@@ -22,6 +22,7 @@ public class WechatPluginKeys {
public static final String TITLE = "title";
public static final String IMAGE = "image";
public static final String IMAGE_DATA = "imageData";
public static final String THUMBNAIL = "thumbnail";
public static final String DESCRIPTION = "description";
......
......@@ -170,7 +170,7 @@ internal class FluwxShareHandler {
GlobalScope.launch(Dispatchers.Main, CoroutineStart.DEFAULT) {
val byteArray: ByteArray? = if (imagePath.isNullOrBlank()) {
byteArrayOf()
call.argument(WechatPluginKeys.IMAGE_DATA) ?: byteArrayOf()
} else {
getImageByteArrayCommon(registrar, imagePath)
}
......
......@@ -13,6 +13,7 @@ NSString *const fluwxKeyText = @"text";
NSString *const fluwxKeyTitle = @"title";
NSString *const fluwxKeyImage = @ "image";
NSString *const fluwxKeyImageData = @ "imageData";
NSString *const fluwxKeyThumbnail = @"thumbnail";
NSString *const fluwxKeyDescription = @"description";
......
......@@ -67,10 +67,12 @@ NSObject <FlutterPluginRegistrar> *_registrar;
result(@{fluwxKeyPlatform: fluwxKeyIOS, fluwxKeyResult: @(done)});
}
- (void)shareImage:(FlutterMethodCall *)call result:(FlutterResult)result {
NSString *imagePath = call.arguments[fluwxKeyImage];
if ([imagePath hasPrefix:SCHEMA_ASSETS]) {
if ([StringUtil isBlank:imagePath]) {
NSData *imageData = ((FlutterStandardTypedData)call.arguments[fluwxKeyImageData]).data;
[self shareMemoryImage:call result:result imageData:imageData];
} else if ([imagePath hasPrefix:SCHEMA_ASSETS]) {
[self shareAssetImage:call result:result imagePath:imagePath];
} else if ([imagePath hasPrefix:SCHEMA_FILE]) {
[self shareLocalImage:call result:result imagePath:imagePath];
......@@ -81,6 +83,45 @@ NSObject <FlutterPluginRegistrar> *_registrar;
}
- (void)shareMemoryImage:(FlutterMethodCall *)call result:(FlutterResult)result imageData:(NSData *)imageData {
NSString *thumbnail = call.arguments[fluwxKeyThumbnail];
if ([StringUtil isBlank:thumbnail]) {
thumbnail = imagePath;
}
dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
dispatch_async(globalQueue, ^{
NSURL *imageURL = [NSURL URLWithString:imagePath];
UIImage *thumbnailImage = [self getThumbnail:thumbnail size:32 * 1024];
dispatch_async(dispatch_get_main_queue(), ^{
NSString *scene = call.arguments[fluwxKeyScene];
BOOL done = [WXApiRequestHandler sendImageData:imageData
TagName:call.arguments[fluwxKeyMediaTagName]
MessageExt:call.arguments[fluwxKeyMessageExt]
Action:call.arguments[fluwxKeyMessageAction]
ThumbImage:thumbnailImage
InScene:[StringToWeChatScene toScene:scene]
title:call.arguments[fluwxKeyTitle]
description:call.arguments[fluwxKeyDescription]
];
result(@{fluwxKeyPlatform: fluwxKeyIOS, fluwxKeyResult: @(done)});
});
});
}
- (void)shareNetworkImage:(FlutterMethodCall *)call result:(FlutterResult)result imagePath:(NSString *)imagePath {
......
......@@ -14,6 +14,7 @@
* limitations under the License.
*/
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/foundation.dart';
......@@ -36,11 +37,7 @@ abstract class WeChatShareModel {
final String mediaTagName;
final WeChatScene scene;
WeChatShareModel(
{this.messageExt,
this.messageAction,
this.mediaTagName,
this.scene: WeChatScene.SESSION});
WeChatShareModel({this.messageExt, this.messageAction, this.mediaTagName, this.scene: WeChatScene.SESSION});
Map toMap();
}
......@@ -54,20 +51,10 @@ class WeChatShareTextModel extends WeChatShareModel {
final String transaction;
///transaction only works on Android.
WeChatShareTextModel(
{String text,
String transaction,
WeChatScene scene,
String messageExt,
String messageAction,
String mediaTagName})
WeChatShareTextModel({String text, String transaction, WeChatScene scene, String messageExt, String messageAction, String mediaTagName})
: this.text = text ?? "",
this.transaction = transaction ?? "text",
super(
mediaTagName: mediaTagName,
messageAction: messageAction,
messageExt: messageExt,
scene: scene);
super(mediaTagName: mediaTagName, messageAction: messageAction, messageExt: messageExt, scene: scene);
@override
Map toMap() {
......@@ -127,11 +114,7 @@ class WeChatShareMiniProgramModel extends WeChatShareModel {
assert(webPageUrl != null && webPageUrl.isNotEmpty),
assert(userName != null && userName.isNotEmpty),
assert(path != null && path.isNotEmpty),
super(
mediaTagName: mediaTagName,
messageAction: messageAction,
messageExt: messageExt,
scene: scene);
super(mediaTagName: mediaTagName, messageAction: messageAction, messageExt: messageExt, scene: scene);
@override
Map toMap() {
......@@ -159,9 +142,10 @@ class WeChatShareImageModel extends WeChatShareModel {
final String thumbnail;
final String title;
final String description;
final Uint8List imageData;
WeChatShareImageModel(
{String transaction,
WeChatShareImageModel({
String transaction,
@required this.image,
this.description,
String thumbnail,
......@@ -169,37 +153,44 @@ class WeChatShareImageModel extends WeChatShareModel {
String messageExt,
String messageAction,
String mediaTagName,
this.title})
: this.transaction = transaction ?? "text",
this.title,
}) : this.transaction = transaction ?? "text",
this.thumbnail = thumbnail ?? "",
assert(image != null),
super(
mediaTagName: mediaTagName,
messageAction: messageAction,
messageExt: messageExt,
scene: scene);
this.imageData = null,
super(mediaTagName: mediaTagName, messageAction: messageAction, messageExt: messageExt, scene: scene);
WeChatShareImageModel.fromFile(
File imageFile,
{String transaction,
File imageFile, {
String transaction,
this.description,
String thumbnail,
WeChatScene scene,
String messageExt,
String messageAction,
String mediaTagName,
this.title})
: this.image = "file://${imageFile.path}",
this.title,
}) : this.image = "file://${imageFile.path}",
this.transaction = transaction ?? "text",
this.thumbnail = thumbnail ?? "",
super(
mediaTagName: mediaTagName,
messageAction: messageAction,
messageExt: messageExt,
scene: scene);
this.imageData = null,
super(mediaTagName: mediaTagName, messageAction: messageAction, messageExt: messageExt, scene: scene);
WeChatShareImageModel.fromUint8List({
@required this.imageData,
String transaction,
this.description,
String thumbnail,
WeChatScene scene,
String messageExt,
String messageAction,
String mediaTagName,
this.title,
}) : this.transaction = transaction ?? "text",
this.thumbnail = thumbnail ?? "",
this.image = "",
assert(imageData != null),
super(mediaTagName: mediaTagName, messageAction: messageAction, messageExt: messageExt, scene: scene);
@override
Map toMap() {
......@@ -245,11 +236,7 @@ class WeChatShareMusicModel extends WeChatShareModel {
}) : this.transaction = transaction ?? "text",
this.thumbnail = thumbnail ?? "",
assert(musicUrl != null || musicLowBandUrl != null),
super(
mediaTagName: mediaTagName,
messageAction: messageAction,
messageExt: messageExt,
scene: scene);
super(mediaTagName: mediaTagName, messageAction: messageAction, messageExt: messageExt, scene: scene);
@override
Map toMap() {
......@@ -299,11 +286,7 @@ class WeChatShareVideoModel extends WeChatShareModel {
this.thumbnail = thumbnail ?? "",
assert(videoUrl != null || videoLowBandUrl != null),
assert(thumbnail != null),
super(
mediaTagName: mediaTagName,
messageAction: messageAction,
messageExt: messageExt,
scene: scene);
super(mediaTagName: mediaTagName, messageAction: messageAction, messageExt: messageExt, scene: scene);
@override
Map toMap() {
......@@ -342,11 +325,7 @@ class WeChatShareWebPageModel extends WeChatShareModel {
}) : this.transaction = transaction ?? "text",
assert(webPage != null),
assert(thumbnail != null),
super(
mediaTagName: mediaTagName,
messageAction: messageAction,
messageExt: messageExt,
scene: scene);
super(mediaTagName: mediaTagName, messageAction: messageAction, messageExt: messageExt, scene: scene);
@override
Map toMap() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论