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

Make Share Image Support Uint8List

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