添加文本分享

This commit is contained in:
v7lin
2019-12-26 22:04:04 +08:00
parent ef692827e8
commit 3a1a31a001
6 changed files with 96 additions and 41 deletions

View File

@ -15,49 +15,64 @@ def parse_KV_file(file, separator='=')
if !File.exists? file_abs_path
return [];
end
pods_ary = []
generated_key_values = {}
skip_line_start_symbols = ["#", "/"]
File.foreach(file_abs_path) { |line|
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
plugin = line.split(pattern=separator)
if plugin.length == 2
podname = plugin[0].strip()
path = plugin[1].strip()
podpath = File.expand_path("#{path}", file_abs_path)
pods_ary.push({:name => podname, :path => podpath});
else
puts "Invalid plugin specification: #{line}"
end
}
return pods_ary
File.foreach(file_abs_path) do |line|
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
plugin = line.split(pattern=separator)
if plugin.length == 2
podname = plugin[0].strip()
path = plugin[1].strip()
podpath = File.expand_path("#{path}", file_abs_path)
generated_key_values[podname] = podpath
else
puts "Invalid plugin specification: #{line}"
end
end
generated_key_values
end
target 'Runner' do
# Flutter Pod
copied_flutter_dir = File.join(__dir__, 'Flutter')
copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
# Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
# That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
# CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
unless File.exist?(generated_xcode_build_settings_path)
raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
unless File.exist?(copied_framework_path)
FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
end
unless File.exist?(copied_podspec_path)
FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
end
end
# Keep pod path relative so it can be checked into Podfile.lock.
pod 'Flutter', :path => 'Flutter'
# Plugin Pods
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
# referring to absolute paths on developers' machines.
system('rm -rf .symlinks')
system('mkdir -p .symlinks/plugins')
# Flutter Pods
generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig')
if generated_xcode_build_settings.empty?
puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first."
end
generated_xcode_build_settings.map { |p|
if p[:name] == 'FLUTTER_FRAMEWORK_DIR'
symlink = File.join('.symlinks', 'flutter')
File.symlink(File.dirname(p[:path]), symlink)
pod 'Flutter', :path => File.join(symlink, File.basename(p[:path]))
end
}
# Plugin Pods
plugin_pods = parse_KV_file('../.flutter-plugins')
plugin_pods.map { |p|
symlink = File.join('.symlinks', 'plugins', p[:name])
File.symlink(p[:path], symlink)
pod p[:name], :path => File.join(symlink, 'ios')
}
plugin_pods.each do |name, path|
symlink = File.join('.symlinks', 'plugins', name)
File.symlink(path, symlink)
pod name, :path => File.join(symlink, 'ios')
end
end
# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.

View File

@ -2,17 +2,17 @@ PODS:
- Flutter (1.0.0)
- path_provider (0.0.1):
- Flutter
- tencent_kit (1.0.2):
- tencent_kit (1.0.4):
- Flutter
DEPENDENCIES:
- Flutter (from `.symlinks/flutter/ios`)
- Flutter (from `Flutter`)
- path_provider (from `.symlinks/plugins/path_provider/ios`)
- tencent_kit (from `.symlinks/plugins/tencent_kit/ios`)
EXTERNAL SOURCES:
Flutter:
:path: ".symlinks/flutter/ios"
:path: Flutter
path_provider:
:path: ".symlinks/plugins/path_provider/ios"
tencent_kit:
@ -21,8 +21,8 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d
tencent_kit: b057e0ae9d0c9b5d02c893b3e3ac602200cb733d
tencent_kit: 0712377066f9a937c0de9ce468cbae18b3688f47
PODFILE CHECKSUM: 7fb83752f59ead6285236625b82473f90b1cb932
PODFILE CHECKSUM: 3dbe063e9c90a5d7c9e4e76e70a821b9e2c1d271
COCOAPODS: 1.8.4

View File

@ -127,7 +127,7 @@ class _HomeState extends State<Home> {
},
),
ListTile(
title: const Text('分享文字'),
title: const Text('分享说说'),
onTap: () {
_tencent.shareMood(
scene: TencentScene.SCENE_QZONE,
@ -135,6 +135,15 @@ class _HomeState extends State<Home> {
);
},
),
ListTile(
title: const Text('文本分享'),
onTap: () {
_tencent.shareText(
scene: TencentScene.SCENE_QZONE,
summary: '分享测试',
);
},
),
ListTile(
title: const Text('图片分享'),
onTap: () async {
@ -166,7 +175,7 @@ class _HomeState extends State<Home> {
},
),
ListTile(
title: const Text('分享链接'),
title: const Text('网页分享'),
onTap: () {
_tencent.shareWebpage(
scene: TencentScene.SCENE_QQ,

View File

@ -1,5 +1,6 @@
name: tencent_kit_example
description: Demonstrates how to use the tencent_kit plugin.
version: 1.0.0+1000
publish_to: 'none'
environment:

View File

@ -41,6 +41,7 @@ static NSString *const METHOD_ISINSTALLED = @"isInstalled";
static NSString *const METHOD_LOGIN = @"login";
static NSString *const METHOD_LOGOUT = @"logout";
static NSString *const METHOD_SHAREMOOD = @"shareMood";
static NSString *const METHOD_SHARETEXT = @"shareText";
static NSString *const METHOD_SHAREIMAGE = @"shareImage";
static NSString *const METHOD_SHAREMUSIC = @"shareMusic";
static NSString *const METHOD_SHAREWEBPAGE = @"shareWebpage";
@ -102,6 +103,8 @@ static NSString *const SCHEME_FILE = @"file";
[self logout:call result:result];
} else if ([METHOD_SHAREMOOD isEqualToString:call.method]) {
[self shareMood:call result:result];
} else if ([METHOD_SHARETEXT isEqualToString:call.method]) {
[self shareText:call result:result];
} else if ([METHOD_SHAREIMAGE isEqualToString:call.method]) {
[self shareImage:call result:result];
} else if ([METHOD_SHAREMUSIC isEqualToString:call.method]) {
@ -163,6 +166,19 @@ static NSString *const SCHEME_FILE = @"file";
result(nil);
}
- (void)shareText:(FlutterMethodCall *)call result:(FlutterResult)result {
NSNumber *scene = call.arguments[ARGUMENT_KEY_SCENE];
NSString *summary = call.arguments[ARGUMENT_KEY_SUMMARY];
QQApiTextObject *object = [QQApiTextObject objectWithText:summary];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:object];
if (scene.intValue == SCENE_QQ) {
[QQApiInterface sendReq:req];
} else if (scene.intValue == SCENE_QZONE) {
[QQApiInterface SendReqToQZone:req];
}
result(nil);
}
- (void)shareImage:(FlutterMethodCall *)call result:(FlutterResult)result {
NSNumber *scene = call.arguments[ARGUMENT_KEY_SCENE];
if (scene.intValue == SCENE_QQ) {

View File

@ -22,6 +22,7 @@ class Tencent {
static const String _METHOD_LOGIN = 'login';
static const String _METHOD_LOGOUT = 'logout';
static const String _METHOD_SHAREMOOD = 'shareMood';
static const String _METHOD_SHARETEXT = 'shareText';
static const String _METHOD_SHAREIMAGE = 'shareImage';
static const String _METHOD_SHAREMUSIC = 'shareMusic';
static const String _METHOD_SHAREWEBPAGE = 'shareWebpage';
@ -217,6 +218,19 @@ class Tencent {
return _channel.invokeMethod(_METHOD_SHAREMOOD, arguments);
}
/// 分享 - 文本
Future<void> shareText({
@required int scene,
@required String summary,
}) {
assert(summary != null && summary.isNotEmpty);
final Map<String, dynamic> arguments = <String, dynamic>{
_ARGUMENT_KEY_SCENE: scene,
_ARGUMENT_KEY_SUMMARY: summary,
};
return _channel.invokeMethod(_METHOD_SHAREMOOD, arguments);
}
/// 分享 - 图片
Future<void> shareImage({
@required int scene,