Commit ce8183bdcdde38301f7250a0e30f0592f5a99c4f

Authored by wdn127929
1 parent cedb188a

企业微信分享未完成

Showing 112 changed files with 3389 additions and 19 deletions
@@ -140,4 +140,9 @@ @@ -140,4 +140,9 @@
140 android:theme="@style/Theme.AppCompat.Light.NoActionBar"/> 140 android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
141 141
142 </application> 142 </application>
  143 +
  144 + <queries>
  145 + <package android:name="com.tencent.wework" />
  146 + <!-- // 指定企业微信包名 -->
  147 + </queries>
143 </manifest> 148 </manifest>
@@ -77,6 +77,8 @@ PODS: @@ -77,6 +77,8 @@ PODS:
77 - Flutter 77 - Flutter
78 - flutter_statusbarcolor_ns (0.0.1): 78 - flutter_statusbarcolor_ns (0.0.1):
79 - Flutter 79 - Flutter
  80 + - flutter_wxwork (0.0.1):
  81 + - Flutter
80 - fluttertoast (0.0.2): 82 - fluttertoast (0.0.2):
81 - Flutter 83 - Flutter
82 - Toast 84 - Toast
@@ -187,6 +189,7 @@ DEPENDENCIES: @@ -187,6 +189,7 @@ DEPENDENCIES:
187 - flutter_native_image (from `.symlinks/plugins/flutter_native_image/ios`) 189 - flutter_native_image (from `.symlinks/plugins/flutter_native_image/ios`)
188 - flutter_sms (from `.symlinks/plugins/flutter_sms/ios`) 190 - flutter_sms (from `.symlinks/plugins/flutter_sms/ios`)
189 - flutter_statusbarcolor_ns (from `.symlinks/plugins/flutter_statusbarcolor_ns/ios`) 191 - flutter_statusbarcolor_ns (from `.symlinks/plugins/flutter_statusbarcolor_ns/ios`)
  192 + - flutter_wxwork (from `.symlinks/plugins/flutter_wxwork/ios`)
190 - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) 193 - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
191 - fluwx (from `.symlinks/plugins/fluwx/ios`) 194 - fluwx (from `.symlinks/plugins/fluwx/ios`)
192 - foundation_fluttify (from `.symlinks/plugins/foundation_fluttify/ios`) 195 - foundation_fluttify (from `.symlinks/plugins/foundation_fluttify/ios`)
@@ -281,6 +284,8 @@ EXTERNAL SOURCES: @@ -281,6 +284,8 @@ EXTERNAL SOURCES:
281 :path: ".symlinks/plugins/flutter_sms/ios" 284 :path: ".symlinks/plugins/flutter_sms/ios"
282 flutter_statusbarcolor_ns: 285 flutter_statusbarcolor_ns:
283 :path: ".symlinks/plugins/flutter_statusbarcolor_ns/ios" 286 :path: ".symlinks/plugins/flutter_statusbarcolor_ns/ios"
  287 + flutter_wxwork:
  288 + :path: ".symlinks/plugins/flutter_wxwork/ios"
284 fluttertoast: 289 fluttertoast:
285 :path: ".symlinks/plugins/fluttertoast/ios" 290 :path: ".symlinks/plugins/fluttertoast/ios"
286 fluwx: 291 fluwx:
@@ -357,6 +362,7 @@ SPEC CHECKSUMS: @@ -357,6 +362,7 @@ SPEC CHECKSUMS:
357 flutter_native_image: 9c0b7451838484458e5b0fae007b86a4c2d4bdfe 362 flutter_native_image: 9c0b7451838484458e5b0fae007b86a4c2d4bdfe
358 flutter_sms: 91ce41530f55c85d6524d82307a5d555844c086a 363 flutter_sms: 91ce41530f55c85d6524d82307a5d555844c086a
359 flutter_statusbarcolor_ns: 68a360889d88d7915ae524e422aeab62e4063804 364 flutter_statusbarcolor_ns: 68a360889d88d7915ae524e422aeab62e4063804
  365 + flutter_wxwork: 98328a9eadf535ecc0f7cbdfc1ed3d438d4d7335
360 fluttertoast: 16fbe6039d06a763f3533670197d01fc73459037 366 fluttertoast: 16fbe6039d06a763f3533670197d01fc73459037
361 fluwx: e9e728cfdb80e82dac5f4ff974b1901a7939dcd0 367 fluwx: e9e728cfdb80e82dac5f4ff974b1901a7939dcd0
362 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a 368 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 archiveVersion = 1; 3 archiveVersion = 1;
4 classes = { 4 classes = {
5 }; 5 };
6 - objectVersion = 46; 6 + objectVersion = 50;
7 objects = { 7 objects = {
8 8
9 /* Begin PBXBuildFile section */ 9 /* Begin PBXBuildFile section */
@@ -353,6 +353,7 @@ @@ -353,6 +353,7 @@
353 "${BUILT_PRODUCTS_DIR}/flutter_native_image/flutter_native_image.framework", 353 "${BUILT_PRODUCTS_DIR}/flutter_native_image/flutter_native_image.framework",
354 "${BUILT_PRODUCTS_DIR}/flutter_sms/flutter_sms.framework", 354 "${BUILT_PRODUCTS_DIR}/flutter_sms/flutter_sms.framework",
355 "${BUILT_PRODUCTS_DIR}/flutter_statusbarcolor_ns/flutter_statusbarcolor_ns.framework", 355 "${BUILT_PRODUCTS_DIR}/flutter_statusbarcolor_ns/flutter_statusbarcolor_ns.framework",
  356 + "${BUILT_PRODUCTS_DIR}/flutter_wxwork/flutter_wxwork.framework",
356 "${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework", 357 "${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework",
357 "${BUILT_PRODUCTS_DIR}/image_cropper/image_cropper.framework", 358 "${BUILT_PRODUCTS_DIR}/image_cropper/image_cropper.framework",
358 "${BUILT_PRODUCTS_DIR}/image_gallery_saver/image_gallery_saver.framework", 359 "${BUILT_PRODUCTS_DIR}/image_gallery_saver/image_gallery_saver.framework",
@@ -401,6 +402,7 @@ @@ -401,6 +402,7 @@
401 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_native_image.framework", 402 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_native_image.framework",
402 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_sms.framework", 403 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_sms.framework",
403 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_statusbarcolor_ns.framework", 404 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_statusbarcolor_ns.framework",
  405 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_wxwork.framework",
404 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework", 406 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework",
405 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_cropper.framework", 407 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_cropper.framework",
406 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_gallery_saver.framework", 408 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_gallery_saver.framework",
@@ -556,7 +558,10 @@ @@ -556,7 +558,10 @@
556 ); 558 );
557 INFOPLIST_FILE = Runner/Info.plist; 559 INFOPLIST_FILE = Runner/Info.plist;
558 IPHONEOS_DEPLOYMENT_TARGET = 12.0; 560 IPHONEOS_DEPLOYMENT_TARGET = 12.0;
559 - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 561 + LD_RUNPATH_SEARCH_PATHS = (
  562 + "$(inherited)",
  563 + "@executable_path/Frameworks",
  564 + );
560 LIBRARY_SEARCH_PATHS = ( 565 LIBRARY_SEARCH_PATHS = (
561 "$(inherited)", 566 "$(inherited)",
562 "$(PROJECT_DIR)/Flutter", 567 "$(PROJECT_DIR)/Flutter",
@@ -697,14 +702,17 @@ @@ -697,14 +702,17 @@
697 CURRENT_PROJECT_VERSION = 521; 702 CURRENT_PROJECT_VERSION = 521;
698 DEVELOPMENT_TEAM = 8J59HM8B82; 703 DEVELOPMENT_TEAM = 8J59HM8B82;
699 ENABLE_BITCODE = NO; 704 ENABLE_BITCODE = NO;
700 - FLUTTER_BUILD_MODE = release; 705 + FLUTTER_BUILD_MODE = debug;
701 FRAMEWORK_SEARCH_PATHS = ( 706 FRAMEWORK_SEARCH_PATHS = (
702 "$(inherited)", 707 "$(inherited)",
703 "$(PROJECT_DIR)/Flutter", 708 "$(PROJECT_DIR)/Flutter",
704 ); 709 );
705 INFOPLIST_FILE = Runner/Info.plist; 710 INFOPLIST_FILE = Runner/Info.plist;
706 IPHONEOS_DEPLOYMENT_TARGET = 12.0; 711 IPHONEOS_DEPLOYMENT_TARGET = 12.0;
707 - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 712 + LD_RUNPATH_SEARCH_PATHS = (
  713 + "$(inherited)",
  714 + "@executable_path/Frameworks",
  715 + );
708 LIBRARY_SEARCH_PATHS = ( 716 LIBRARY_SEARCH_PATHS = (
709 "$(inherited)", 717 "$(inherited)",
710 "$(PROJECT_DIR)/Flutter", 718 "$(PROJECT_DIR)/Flutter",
@@ -740,7 +748,10 @@ @@ -740,7 +748,10 @@
740 ); 748 );
741 INFOPLIST_FILE = Runner/Info.plist; 749 INFOPLIST_FILE = Runner/Info.plist;
742 IPHONEOS_DEPLOYMENT_TARGET = 12.0; 750 IPHONEOS_DEPLOYMENT_TARGET = 12.0;
743 - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 751 + LD_RUNPATH_SEARCH_PATHS = (
  752 + "$(inherited)",
  753 + "@executable_path/Frameworks",
  754 + );
744 LIBRARY_SEARCH_PATHS = ( 755 LIBRARY_SEARCH_PATHS = (
745 "$(inherited)", 756 "$(inherited)",
746 "$(PROJECT_DIR)/Flutter", 757 "$(PROJECT_DIR)/Flutter",
@@ -31,6 +31,30 @@ @@ -31,6 +31,30 @@
31 <key>CFBundleURLTypes</key> 31 <key>CFBundleURLTypes</key>
32 <array> 32 <array>
33 <dict> 33 <dict>
  34 + <key>CFBundleURLSchemes</key>
  35 + <array>
  36 + <string>wwbdca186ec4257973</string>
  37 + </array>
  38 + <key>CFBundleURLName</key>
  39 + <string>corp</string>
  40 + </dict>
  41 + <dict>
  42 + <key>CFBundleURLSchemes</key>
  43 + <array>
  44 + <string>wwauthbdca186ec4257973000006</string>
  45 + </array>
  46 + <key>CFBundleURLName</key>
  47 + <string>scheme</string>
  48 + </dict>
  49 + <dict>
  50 + <key>CFBundleURLSchemes</key>
  51 + <array>
  52 + <string>wwauthbdca186ec4257973000006</string>
  53 + </array>
  54 + <key>CFBundleURLName</key>
  55 + <string>1000006</string>
  56 + </dict>
  57 + <dict>
34 <key>CFBundleTypeRole</key> 58 <key>CFBundleTypeRole</key>
35 <string>Editor</string> 59 <string>Editor</string>
36 <key>CFBundleURLName</key> 60 <key>CFBundleURLName</key>
@@ -59,7 +83,6 @@ @@ -59,7 +83,6 @@
59 <dict> 83 <dict>
60 <key>NSAllowsArbitraryLoads</key> 84 <key>NSAllowsArbitraryLoads</key>
61 <true/> 85 <true/>
62 -  
63 </dict> 86 </dict>
64 <key>NSAppleMusicUsageDescription</key> 87 <key>NSAppleMusicUsageDescription</key>
65 <string>需要您的同意,APP才能访问媒体资料库</string> 88 <string>需要您的同意,APP才能访问媒体资料库</string>
@@ -15,7 +15,7 @@ class App { @@ -15,7 +15,7 @@ class App {
15 static double bottomBarHeight; 15 static double bottomBarHeight;
16 // static GetIt getIt = GetIt.instance; 16 // static GetIt getIt = GetIt.instance;
17 static bool isInstallWx = false; 17 static bool isInstallWx = false;
18 - 18 + static bool isInstallWWork = false;
19 static final GlobalKey<NavigatorState> navigatorKey = 19 static final GlobalKey<NavigatorState> navigatorKey =
20 new GlobalKey<NavigatorState>(); 20 new GlobalKey<NavigatorState>();
21 21
@@ -51,6 +51,7 @@ import 'package:flutter/material.dart'; @@ -51,6 +51,7 @@ import 'package:flutter/material.dart';
51 import 'package:flutter/services.dart'; 51 import 'package:flutter/services.dart';
52 import 'package:permission_handler/permission_handler.dart'; 52 import 'package:permission_handler/permission_handler.dart';
53 import 'package:flutter_localizations/flutter_localizations.dart'; 53 import 'package:flutter_localizations/flutter_localizations.dart';
  54 +import 'package:flutter_wxwork/flutter_wxwork.dart';
54 55
55 // Future<bool> _requestPermissions() async { 56 // Future<bool> _requestPermissions() async {
56 // Map<Permission, PermissionStatus> permissions = await [ 57 // Map<Permission, PermissionStatus> permissions = await [
@@ -192,6 +193,22 @@ class MyAppState extends State<MyApp> { @@ -192,6 +193,22 @@ class MyAppState extends State<MyApp> {
192 LogUtil.v("is installed $result"); 193 LogUtil.v("is installed $result");
193 } 194 }
194 195
  196 + //初始化企业微信SDK
  197 + _initWWork() async {
  198 + FlutterWxwork flutterWxwork = FlutterWxwork();
  199 + bool sss = await flutterWxwork.registerApp(
  200 + 'wwauthbdca186ec4257973000006', 'wwbdca186ec4257973', '1000006');
  201 + print(sss);
  202 + var result = await flutterWxwork.isAppInstalled();
  203 + print(result);
  204 + // if (result != null && result) {
  205 + // App.isInstallWWork = true;
  206 + // } else {
  207 + // App.isInstallWWork = false;
  208 + // }
  209 + LogUtil.v("is installed $result");
  210 + }
  211 +
195 //初始化dio 212 //初始化dio
196 initDio() { 213 initDio() {
197 DioUtil.openDebug(); 214 DioUtil.openDebug();
@@ -227,6 +244,7 @@ class MyAppState extends State<MyApp> { @@ -227,6 +244,7 @@ class MyAppState extends State<MyApp> {
227 _ontherInit() async { 244 _ontherInit() async {
228 initDio(); 245 initDio();
229 await _initFluwx(); 246 await _initFluwx();
  247 + await _initWWork();
230 LogUtil.init(isDebug: true, tag: 'ONE_KEY'); 248 LogUtil.init(isDebug: true, tag: 'ONE_KEY');
231 Provider.debugCheckInvalidValueType = null; 249 Provider.debugCheckInvalidValueType = null;
232 await initializeDateFormatting(); 250 await initializeDateFormatting();
@@ -9,6 +9,7 @@ import 'package:flutter_easyrefresh/ball_pulse_footer.dart'; @@ -9,6 +9,7 @@ import 'package:flutter_easyrefresh/ball_pulse_footer.dart';
9 import 'package:flutter_easyrefresh/easy_refresh.dart'; 9 import 'package:flutter_easyrefresh/easy_refresh.dart';
10 import 'package:flutter_easyrefresh/material_header.dart'; 10 import 'package:flutter_easyrefresh/material_header.dart';
11 import 'package:flutter_screenutil/flutter_screenutil.dart'; 11 import 'package:flutter_screenutil/flutter_screenutil.dart';
  12 +import 'package:flutter_wxwork/flutter_wxwork.dart';
12 import 'package:fluwx/fluwx.dart'; 13 import 'package:fluwx/fluwx.dart';
13 import 'package:one_key/app.dart'; 14 import 'package:one_key/app.dart';
14 import 'package:one_key/res/colors.dart'; 15 import 'package:one_key/res/colors.dart';
@@ -43,6 +44,7 @@ class _FirstPageState extends State<FirstPage> { @@ -43,6 +44,7 @@ class _FirstPageState extends State<FirstPage> {
43 _ontherInit() async { 44 _ontherInit() async {
44 initDio(); 45 initDio();
45 await _initFluwx(); 46 await _initFluwx();
  47 + await _initWWork();
46 LogUtil.init(isDebug: true, tag: 'ONE_KEY'); 48 LogUtil.init(isDebug: true, tag: 'ONE_KEY');
47 Provider.debugCheckInvalidValueType = null; 49 Provider.debugCheckInvalidValueType = null;
48 await initializeDateFormatting(); 50 await initializeDateFormatting();
@@ -73,6 +75,20 @@ class _FirstPageState extends State<FirstPage> { @@ -73,6 +75,20 @@ class _FirstPageState extends State<FirstPage> {
73 LogUtil.v("is installed $result"); 75 LogUtil.v("is installed $result");
74 } 76 }
75 77
  78 + //初始化企业微信SDK
  79 + _initWWork() async {
  80 + FlutterWxwork flutterWxwork = FlutterWxwork();
  81 + bool sss = await flutterWxwork.registerApp(
  82 + 'wwauthbdca186ec4257973000006', 'wwbdca186ec4257973', '1000006');
  83 + var result = await flutterWxwork.isAppInstalled();
  84 + // if (result != null && result) {
  85 + // App.isInstallWWork = true;
  86 + // } else {
  87 + // App.isInstallWWork = false;
  88 + // }
  89 + LogUtil.v("is installed $result");
  90 + }
  91 +
76 //初始化dio 92 //初始化dio
77 initDio() { 93 initDio() {
78 DioUtil.openDebug(); 94 DioUtil.openDebug();
@@ -14,6 +14,7 @@ import 'package:flutter/cupertino.dart'; @@ -14,6 +14,7 @@ import 'package:flutter/cupertino.dart';
14 import 'package:flutter/material.dart'; 14 import 'package:flutter/material.dart';
15 // import 'package:flutter_statusbarcolor/flutter_statusbarcolor.dart'; 15 // import 'package:flutter_statusbarcolor/flutter_statusbarcolor.dart';
16 import 'package:flutter_statusbarcolor_ns/flutter_statusbarcolor_ns.dart'; 16 import 'package:flutter_statusbarcolor_ns/flutter_statusbarcolor_ns.dart';
  17 +import 'package:flutter_wxwork/flutter_wxwork.dart';
17 import 'package:fluttertoast/fluttertoast.dart'; 18 import 'package:fluttertoast/fluttertoast.dart';
18 import 'package:flutter/services.dart'; 19 import 'package:flutter/services.dart';
19 import 'package:fluwx/fluwx.dart'; 20 import 'package:fluwx/fluwx.dart';
@@ -1377,6 +1378,7 @@ class Utils { @@ -1377,6 +1378,7 @@ class Utils {
1377 String _description = "OneKey"; 1378 String _description = "OneKey";
1378 // Uint8List source = await testComporessList(context, _thumbnail); 1379 // Uint8List source = await testComporessList(context, _thumbnail);
1379 print(_path); 1380 print(_path);
  1381 +
1380 var model = new WeChatShareMiniProgramModel( 1382 var model = new WeChatShareMiniProgramModel(
1381 miniProgramType: Constant.wxMiniProgramType, 1383 miniProgramType: Constant.wxMiniProgramType,
1382 webPageUrl: _webPageUrl, 1384 webPageUrl: _webPageUrl,
@@ -2066,6 +2068,19 @@ class Utils { @@ -2066,6 +2068,19 @@ class Utils {
2066 // } 2068 // }
2067 String _description = "进入查看包间详情,转发同行好友,还可一键导航到饭店"; 2069 String _description = "进入查看包间详情,转发同行好友,还可一键导航到饭店";
2068 // Uint8List source = await testComporessList(context, _thumbnail); 2070 // Uint8List source = await testComporessList(context, _thumbnail);
  2071 + FlutterWxwork flutterWxwork = FlutterWxwork();
  2072 +
  2073 + bool sss = await flutterWxwork.registerApp('wwauthbdca186ec4257973000006',
  2074 + 'wwbdca186ec4257973', '1000006');
  2075 + print(sss);
  2076 + bool isSuccess = await flutterWxwork.shareMiniProgram(
  2077 + userName: 'gh_487873d353b3@app',
  2078 + path: _path,
  2079 + hdImageData: _thumbnail,
  2080 + title: _title);
  2081 + return isSuccess;
  2082 +
  2083 + /*** 注释一下下===========
2069 2084
2070 //跳转小程序 2085 //跳转小程序
2071 var model = new WeChatShareMiniProgramModel( 2086 var model = new WeChatShareMiniProgramModel(
@@ -2081,18 +2096,10 @@ class Utils { @@ -2081,18 +2096,10 @@ class Utils {
2081 thumbnail: WeChatImage.network(_thumbnail) 2096 thumbnail: WeChatImage.network(_thumbnail)
2082 // thumbnail: WeChatImage.binary(image) 2097 // thumbnail: WeChatImage.binary(image)
2083 ); 2098 );
2084 - //分享链接  
2085 - // var model = WeChatShareWebPageModel(  
2086 - // // 'https://xt04.colorcun.com/h5/index.html#/?id=$rid&hasInvitation=1',  
2087 - // 'https://xt04.colorcun.com/h5/index.html?id=$rid&hasInvitation=1&hasSellerShare=1',  
2088 - // title: _title,  
2089 - // description: _description,  
2090 - // thumbnail: WeChatImage.network(_thumbnail),  
2091 - // scene: WeChatScene.SESSION,  
2092 - // );  
2093 2099
2094 bool isSuccess = await shareToWeChat(model); 2100 bool isSuccess = await shareToWeChat(model);
2095 return isSuccess; 2101 return isSuccess;
  2102 + */
2096 } 2103 }
2097 2104
2098 //检查网络连接 2105 //检查网络连接
  1 +# Miscellaneous
  2 +*.class
  3 +*.log
  4 +*.pyc
  5 +*.swp
  6 +.DS_Store
  7 +.atom/
  8 +.buildlog/
  9 +.history
  10 +.svn/
  11 +migrate_working_dir/
  12 +
  13 +# IntelliJ related
  14 +*.iml
  15 +*.ipr
  16 +*.iws
  17 +.idea/
  18 +
  19 +# The .vscode folder contains launch configuration and tasks you configure in
  20 +# VS Code which you may wish to be included in version control, so this line
  21 +# is commented out by default.
  22 +#.vscode/
  23 +
  24 +# Flutter/Dart/Pub related
  25 +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
  26 +/pubspec.lock
  27 +**/doc/api/
  28 +.dart_tool/
  29 +.packages
  30 +build/
  1 +# This file tracks properties of this Flutter project.
  2 +# Used by Flutter tool to assess capabilities and perform upgrades etc.
  3 +#
  4 +# This file should be version controlled.
  5 +
  6 +version:
  7 + revision: eb6d86ee27deecba4a83536aa20f366a6044895c
  8 + channel: stable
  9 +
  10 +project_type: plugin
  11 +
  12 +# Tracks metadata for the flutter migrate command
  13 +migration:
  14 + platforms:
  15 + - platform: root
  16 + create_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
  17 + base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
  18 + - platform: android
  19 + create_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
  20 + base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
  21 + - platform: ios
  22 + create_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
  23 + base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
  24 +
  25 + # User provided section
  26 +
  27 + # List of Local paths (relative to this file) that should be
  28 + # ignored by the migrate tool.
  29 + #
  30 + # Files that are not part of the templates will be ignored by default.
  31 + unmanaged_files:
  32 + - 'lib/main.dart'
  33 + - 'ios/Runner.xcodeproj/project.pbxproj'
  1 +## 0.0.1
  2 +
  3 +* TODO: Describe initial release.
  1 +TODO: Add your license here.
  1 +# flutter_wxwork
  2 +
  3 +A new Flutter plugin project.
  4 +
  5 +## Getting Started
  6 +
  7 +This project is a starting point for a Flutter
  8 +[plug-in package](https://flutter.dev/developing-packages/),
  9 +a specialized package that includes platform-specific implementation code for
  10 +Android and/or iOS.
  11 +
  12 +For help getting started with Flutter development, view the
  13 +[online documentation](https://flutter.dev/docs), which offers tutorials,
  14 +samples, guidance on mobile development, and a full API reference.
  15 +
  1 +include: package:flutter_lints/flutter.yaml
  2 +
  3 +# Additional information about this file can be found at
  4 +# https://dart.dev/guides/language/analysis-options
  1 +*.iml
  2 +.gradle
  3 +/local.properties
  4 +/.idea/workspace.xml
  5 +/.idea/libraries
  6 +.DS_Store
  7 +/build
  8 +/captures
  9 +.cxx
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4 + <modelVersion>4.0.0</modelVersion>
  5 + <groupId>com.tecent</groupId>
  6 + <artifactId>sdk</artifactId>
  7 + <version>2.0.12</version>
  8 + <packaging>aar</packaging>
  9 +</project>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<metadata>
  3 + <groupId>com.tecent</groupId>
  4 + <artifactId>sdk</artifactId>
  5 + <versioning>
  6 + <release>2.0.12</release>
  7 + <versions>
  8 + <version>2.0.12</version>
  9 + </versions>
  10 + <lastUpdated>20230706035721</lastUpdated>
  11 + </versioning>
  12 +</metadata>
  1 +group 'com.wxwork.flutter_wxwork'
  2 +version '1.0'
  3 +
  4 +buildscript {
  5 + repositories {
  6 + google()
  7 + mavenCentral()
  8 + // maven {
  9 + // url uri('libs')
  10 + // }
  11 + }
  12 +
  13 + dependencies {
  14 + classpath 'com.android.tools.build:gradle:7.1.2'
  15 + }
  16 +}
  17 +
  18 +// 定义一个方法, 用于获取当前moudle的dir
  19 +def getCurrentProjectDir() {
  20 + String result = ""
  21 + rootProject.allprojects { project ->
  22 + if (project.properties.get("identityPath").toString() == ":flutter_wxwork") {
  23 + result = project.properties.get("projectDir").toString()
  24 + }
  25 + }
  26 + return result
  27 +}
  28 +
  29 +
  30 +rootProject.allprojects {
  31 + def dir = getCurrentProjectDir()
  32 + repositories {
  33 + google()
  34 + mavenCentral()
  35 + maven { // 添加这个指向本地的仓库目录
  36 + url "$dir/aar"
  37 + }
  38 + }
  39 +}
  40 +
  41 +apply plugin: 'com.android.library'
  42 +
  43 +android {
  44 + compileSdkVersion 31
  45 +
  46 + compileOptions {
  47 + sourceCompatibility JavaVersion.VERSION_1_8
  48 + targetCompatibility JavaVersion.VERSION_1_8
  49 + }
  50 +
  51 + defaultConfig {
  52 + minSdkVersion 16
  53 + }
  54 + dependencies {
  55 + testImplementation 'junit:junit:4.13.2'
  56 + testImplementation 'org.mockito:mockito-core:5.0.0'
  57 + implementation "com.tecent:sdk:2.0.12"
  58 + }
  59 +
  60 + testOptions {
  61 + unitTests.all {
  62 + testLogging {
  63 + events "passed", "skipped", "failed", "standardOut", "standardError"
  64 + outputs.upToDateWhen { false }
  65 + showStandardStreams = true
  66 + }
  67 + }
  68 + }
  69 +}
  70 +
  71 +
  72 +
  73 +
  74 +
  75 +// dependencies {
  76 +// implementation fileTree(include: ['*.aar'], dir: 'libs')
  77 +// }
  1 +rootProject.name = 'flutter_wxwork'
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.wxwork.flutter_wxwork">
  3 +</manifest>
  1 +package com.wxwork.flutter_wxwork;
  2 +
  3 +import androidx.annotation.NonNull;
  4 +
  5 +import io.flutter.embedding.engine.plugins.FlutterPlugin;
  6 +import io.flutter.plugin.common.MethodCall;
  7 +import io.flutter.plugin.common.MethodChannel;
  8 +import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
  9 +import io.flutter.plugin.common.MethodChannel.Result;
  10 +import com.tencent.wework.api.model.WWMediaText;
  11 +
  12 +package com.example.flutter_wxwork;
  13 +
  14 +import android.content.Context;
  15 +import android.util.Log;
  16 +import android.widget.Toast;
  17 +
  18 +
  19 +
  20 +import com.tencent.wework.api.IWWAPI;
  21 +import com.tencent.wework.api.IWWAPIEventHandler;
  22 +import com.tencent.wework.api.WWAPIFactory;
  23 +import com.tencent.wework.api.model.BaseMessage;
  24 +import com.tencent.wework.api.model.WWAuthMessage;
  25 +
  26 +import java.util.HashMap;
  27 +import java.util.Map;
  28 +
  29 +
  30 +
  31 +
  32 +
  33 +
  34 +/**
  35 + * FlutterWxworkPlugin
  36 + */
  37 +public class FlutterWxworkPlugin implements FlutterPlugin, MethodCallHandler {
  38 + /// The MethodChannel that will the communication between Flutter and native Android
  39 + ///
  40 + /// This local reference serves to register the plugin with the Flutter Engine and unregister it
  41 + /// when the Flutter Engine is detached from the Activity
  42 + private MethodChannel channel;
  43 +
  44 + private String APPID;
  45 + private String AGENTID;
  46 + private String SCHEMA;
  47 +
  48 + private IWWAPI iwwapi;
  49 +
  50 + private Context context;
  51 +
  52 + @Override
  53 + public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
  54 + channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "flutter_wxwork");
  55 + channel.setMethodCallHandler(this);
  56 + context = flutterPluginBinding.getApplicationContext();
  57 + iwwapi = WWAPIFactory.createWWAPI(context);
  58 + }
  59 +
  60 + @Override
  61 + public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
  62 + @SuppressWarnings("unchecked")
  63 + Map<String, String> arguments = (Map<String, String>) call.arguments;
  64 +
  65 + if (call.method.equals("isAppInstalled")) {
  66 + boolean installed = iwwapi.isWWAppInstalled();
  67 + if (installed) {
  68 + result.success("1");
  69 + } else {
  70 + result.success("0");
  71 + }
  72 + } else if (call.method.equals("register")) {
  73 + APPID = arguments.get("corpId");
  74 + SCHEMA = arguments.get("scheme");
  75 + AGENTID = arguments.get("agentId");
  76 + boolean hasRegister = iwwapi.registerApp(SCHEMA);
  77 + if (hasRegister) {
  78 + result.success("1");
  79 + } else {
  80 + result.success("0");
  81 + }
  82 + } else if (call.method.equals("auth")) {
  83 + String state = arguments.get("state");
  84 +
  85 + final WWAuthMessage.Req req = new WWAuthMessage.Req();
  86 + req.sch = SCHEMA;
  87 + req.appId = APPID;
  88 + req.agentId = AGENTID;
  89 + req.state = state;
  90 +
  91 +// Toast.makeText(context, "sch:" + req.sch,
  92 +// Toast.LENGTH_SHORT).show();
  93 +
  94 + iwwapi.sendMessage(req, new IWWAPIEventHandler() {
  95 + @Override
  96 + public void handleResp(BaseMessage resp) {
  97 + if (resp instanceof WWAuthMessage.Resp) {
  98 + WWAuthMessage.Resp rsp = (WWAuthMessage.Resp) resp;
  99 + Map<String, String> map = new HashMap<>();
  100 + map.put("code", rsp.code);
  101 + map.put("errCode", String.valueOf(rsp.errCode));
  102 + map.put("state", String.valueOf(rsp.state));
  103 + result.success(map);
  104 + }
  105 + }
  106 + });
  107 +
  108 + }
  109 + }
  110 +
  111 + @Override
  112 + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
  113 + channel.setMethodCallHandler(null);
  114 + }
  115 +}
  1 +# Miscellaneous
  2 +*.class
  3 +*.log
  4 +*.pyc
  5 +*.swp
  6 +.DS_Store
  7 +.atom/
  8 +.buildlog/
  9 +.history
  10 +.svn/
  11 +migrate_working_dir/
  12 +
  13 +# IntelliJ related
  14 +*.iml
  15 +*.ipr
  16 +*.iws
  17 +.idea/
  18 +
  19 +# The .vscode folder contains launch configuration and tasks you configure in
  20 +# VS Code which you may wish to be included in version control, so this line
  21 +# is commented out by default.
  22 +#.vscode/
  23 +
  24 +# Flutter/Dart/Pub related
  25 +**/doc/api/
  26 +**/ios/Flutter/.last_build_id
  27 +.dart_tool/
  28 +.flutter-plugins
  29 +.flutter-plugins-dependencies
  30 +.packages
  31 +.pub-cache/
  32 +.pub/
  33 +/build/
  34 +
  35 +# Symbolication related
  36 +app.*.symbols
  37 +
  38 +# Obfuscation related
  39 +app.*.map.json
  40 +
  41 +# Android Studio will place build artifacts here
  42 +/android/app/debug
  43 +/android/app/profile
  44 +/android/app/release
  1 +# flutter_wxwork_example
  2 +
  3 +Demonstrates how to use the flutter_wxwork plugin.
  4 +
  5 +## Getting Started
  6 +
  7 +This project is a starting point for a Flutter application.
  8 +
  9 +A few resources to get you started if this is your first Flutter project:
  10 +
  11 +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
  12 +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
  13 +
  14 +For help getting started with Flutter development, view the
  15 +[online documentation](https://docs.flutter.dev/), which offers tutorials,
  16 +samples, guidance on mobile development, and a full API reference.
  1 +# This file configures the analyzer, which statically analyzes Dart code to
  2 +# check for errors, warnings, and lints.
  3 +#
  4 +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
  5 +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
  6 +# invoked from the command line by running `flutter analyze`.
  7 +
  8 +# The following line activates a set of recommended lints for Flutter apps,
  9 +# packages, and plugins designed to encourage good coding practices.
  10 +include: package:flutter_lints/flutter.yaml
  11 +
  12 +linter:
  13 + # The lint rules applied to this project can be customized in the
  14 + # section below to disable rules from the `package:flutter_lints/flutter.yaml`
  15 + # included above or to enable additional rules. A list of all available lints
  16 + # and their documentation is published at
  17 + # https://dart-lang.github.io/linter/lints/index.html.
  18 + #
  19 + # Instead of disabling a lint rule for the entire project in the
  20 + # section below, it can also be suppressed for a single line of code
  21 + # or a specific dart file by using the `// ignore: name_of_lint` and
  22 + # `// ignore_for_file: name_of_lint` syntax on the line or in the file
  23 + # producing the lint.
  24 + rules:
  25 + # avoid_print: false # Uncomment to disable the `avoid_print` rule
  26 + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
  27 +
  28 +# Additional information about this file can be found at
  29 +# https://dart.dev/guides/language/analysis-options
  1 +gradle-wrapper.jar
  2 +/.gradle
  3 +/captures/
  4 +/gradlew
  5 +/gradlew.bat
  6 +/local.properties
  7 +GeneratedPluginRegistrant.java
  8 +
  9 +# Remember to never publicly share your keystore.
  10 +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
  11 +key.properties
  12 +**/*.keystore
  13 +**/*.jks
  1 +def localProperties = new Properties()
  2 +def localPropertiesFile = rootProject.file('local.properties')
  3 +if (localPropertiesFile.exists()) {
  4 + localPropertiesFile.withReader('UTF-8') { reader ->
  5 + localProperties.load(reader)
  6 + }
  7 +}
  8 +
  9 +def flutterRoot = localProperties.getProperty('flutter.sdk')
  10 +if (flutterRoot == null) {
  11 + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
  12 +}
  13 +
  14 +def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
  15 +if (flutterVersionCode == null) {
  16 + flutterVersionCode = '1'
  17 +}
  18 +
  19 +def flutterVersionName = localProperties.getProperty('flutter.versionName')
  20 +if (flutterVersionName == null) {
  21 + flutterVersionName = '1.0'
  22 +}
  23 +
  24 +apply plugin: 'com.android.application'
  25 +apply plugin: 'kotlin-android'
  26 +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
  27 +
  28 +android {
  29 + compileSdkVersion flutter.compileSdkVersion
  30 + ndkVersion flutter.ndkVersion
  31 +
  32 + compileOptions {
  33 + sourceCompatibility JavaVersion.VERSION_1_8
  34 + targetCompatibility JavaVersion.VERSION_1_8
  35 + }
  36 +
  37 + defaultConfig {
  38 + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
  39 + applicationId "com.wxwork.flutter_wxwork_example"
  40 + // You can update the following values to match your application needs.
  41 + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
  42 + minSdkVersion flutter.minSdkVersion
  43 + targetSdkVersion flutter.targetSdkVersion
  44 + versionCode flutterVersionCode.toInteger()
  45 + versionName flutterVersionName
  46 + }
  47 +
  48 + buildTypes {
  49 + release {
  50 + // TODO: Add your own signing config for the release build.
  51 + // Signing with the debug keys for now, so `flutter run --release` works.
  52 + signingConfig signingConfigs.debug
  53 + }
  54 + }
  55 +}
  56 +
  57 +flutter {
  58 + source '../..'
  59 +}
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.wxwork.flutter_wxwork_example">
  3 + <!-- The INTERNET permission is required for development. Specifically,
  4 + the Flutter tool needs it to communicate with the running application
  5 + to allow setting breakpoints, to provide hot reload, etc.
  6 + -->
  7 + <uses-permission android:name="android.permission.INTERNET"/>
  8 +</manifest>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.wxwork.flutter_wxwork_example">
  3 + <application
  4 + android:label="flutter_wxwork_example"
  5 + android:name="${applicationName}"
  6 + android:icon="@mipmap/ic_launcher">
  7 + <activity
  8 + android:name=".MainActivity"
  9 + android:exported="true"
  10 + android:launchMode="singleTop"
  11 + android:theme="@style/LaunchTheme"
  12 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
  13 + android:hardwareAccelerated="true"
  14 + android:windowSoftInputMode="adjustResize">
  15 + <!-- Specifies an Android theme to apply to this Activity as soon as
  16 + the Android process has started. This theme is visible to the user
  17 + while the Flutter UI initializes. After that, this theme continues
  18 + to determine the Window background behind the Flutter UI. -->
  19 + <meta-data
  20 + android:name="io.flutter.embedding.android.NormalTheme"
  21 + android:resource="@style/NormalTheme"
  22 + />
  23 + <intent-filter>
  24 + <action android:name="android.intent.action.MAIN"/>
  25 + <category android:name="android.intent.category.LAUNCHER"/>
  26 + </intent-filter>
  27 + </activity>
  28 + <!-- Don't delete the meta-data below.
  29 + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
  30 + <meta-data
  31 + android:name="flutterEmbedding"
  32 + android:value="2" />
  33 + </application>
  34 +</manifest>
  1 +package com.wxwork.flutter_wxwork_example;
  2 +
  3 +import io.flutter.embedding.android.FlutterActivity;
  4 +
  5 +public class MainActivity extends FlutterActivity {
  6 +}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="?android:colorBackground" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="@android:color/white" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + the Flutter engine draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + the Flutter engine draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.wxwork.flutter_wxwork_example">
  3 + <!-- The INTERNET permission is required for development. Specifically,
  4 + the Flutter tool needs it to communicate with the running application
  5 + to allow setting breakpoints, to provide hot reload, etc.
  6 + -->
  7 + <uses-permission android:name="android.permission.INTERNET"/>
  8 +</manifest>
  1 +buildscript {
  2 + ext.kotlin_version = '1.6.10'
  3 + repositories {
  4 + google()
  5 + mavenCentral()
  6 + }
  7 +
  8 + dependencies {
  9 + classpath 'com.android.tools.build:gradle:7.1.2'
  10 + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  11 + }
  12 +}
  13 +
  14 +allprojects {
  15 + repositories {
  16 + google()
  17 + mavenCentral()
  18 + }
  19 +}
  20 +
  21 +rootProject.buildDir = '../build'
  22 +subprojects {
  23 + project.buildDir = "${rootProject.buildDir}/${project.name}"
  24 +}
  25 +subprojects {
  26 + project.evaluationDependsOn(':app')
  27 +}
  28 +
  29 +task clean(type: Delete) {
  30 + delete rootProject.buildDir
  31 +}
  1 +org.gradle.jvmargs=-Xmx1536M
  2 +android.useAndroidX=true
  3 +android.enableJetifier=true
  1 +distributionBase=GRADLE_USER_HOME
  2 +distributionPath=wrapper/dists
  3 +zipStoreBase=GRADLE_USER_HOME
  4 +zipStorePath=wrapper/dists
  5 +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
  1 +include ':app'
  2 +
  3 +def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
  4 +def properties = new Properties()
  5 +
  6 +assert localPropertiesFile.exists()
  7 +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
  8 +
  9 +def flutterSdkPath = properties.getProperty("flutter.sdk")
  10 +assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
  11 +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
  1 +**/dgph
  2 +*.mode1v3
  3 +*.mode2v3
  4 +*.moved-aside
  5 +*.pbxuser
  6 +*.perspectivev3
  7 +**/*sync/
  8 +.sconsign.dblite
  9 +.tags*
  10 +**/.vagrant/
  11 +**/DerivedData/
  12 +Icon?
  13 +**/Pods/
  14 +**/.symlinks/
  15 +profile
  16 +xcuserdata
  17 +**/.generated/
  18 +Flutter/App.framework
  19 +Flutter/Flutter.framework
  20 +Flutter/Flutter.podspec
  21 +Flutter/Generated.xcconfig
  22 +Flutter/ephemeral/
  23 +Flutter/app.flx
  24 +Flutter/app.zip
  25 +Flutter/flutter_assets/
  26 +Flutter/flutter_export_environment.sh
  27 +ServiceDefinitions.json
  28 +Runner/GeneratedPluginRegistrant.*
  29 +
  30 +# Exceptions to above rules.
  31 +!default.mode1v3
  32 +!default.mode2v3
  33 +!default.pbxuser
  34 +!default.perspectivev3
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>App</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>io.flutter.flutter.app</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>App</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>1.0</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>1.0</string>
  23 + <key>MinimumOSVersion</key>
  24 + <string>11.0</string>
  25 +</dict>
  26 +</plist>
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +# Uncomment this line to define a global platform for your project
  2 +# platform :ios, '11.0'
  3 +
  4 +# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
  5 +ENV['COCOAPODS_DISABLE_STATS'] = 'true'
  6 +
  7 +project 'Runner', {
  8 + 'Debug' => :debug,
  9 + 'Profile' => :release,
  10 + 'Release' => :release,
  11 +}
  12 +
  13 +def flutter_root
  14 + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  15 + unless File.exist?(generated_xcode_build_settings_path)
  16 + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  17 + end
  18 +
  19 + File.foreach(generated_xcode_build_settings_path) do |line|
  20 + matches = line.match(/FLUTTER_ROOT\=(.*)/)
  21 + return matches[1].strip if matches
  22 + end
  23 + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
  24 +end
  25 +
  26 +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
  27 +
  28 +flutter_ios_podfile_setup
  29 +
  30 +target 'Runner' do
  31 + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
  32 +end
  33 +
  34 +post_install do |installer|
  35 + installer.pods_project.targets.each do |target|
  36 + flutter_additional_ios_build_settings(target)
  37 + end
  38 +end
  1 +PODS:
  2 + - Flutter (1.0.0)
  3 + - flutter_wxwork (0.0.1):
  4 + - Flutter
  5 +
  6 +DEPENDENCIES:
  7 + - Flutter (from `Flutter`)
  8 + - flutter_wxwork (from `.symlinks/plugins/flutter_wxwork/ios`)
  9 +
  10 +EXTERNAL SOURCES:
  11 + Flutter:
  12 + :path: Flutter
  13 + flutter_wxwork:
  14 + :path: ".symlinks/plugins/flutter_wxwork/ios"
  15 +
  16 +SPEC CHECKSUMS:
  17 + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
  18 + flutter_wxwork: 98328a9eadf535ecc0f7cbdfc1ed3d438d4d7335
  19 +
  20 +PODFILE CHECKSUM: 663715e941f9adb426e33bf9376914006f9ea95b
  21 +
  22 +COCOAPODS: 1.11.3
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 50;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
  11 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
  12 + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
  13 + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
  14 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
  15 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
  16 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
  17 + B28247ACABAF3D574B617C4D /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7276F50182CE37B742DDC5F5 /* libPods-Runner.a */; };
  18 +/* End PBXBuildFile section */
  19 +
  20 +/* Begin PBXCopyFilesBuildPhase section */
  21 + 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
  22 + isa = PBXCopyFilesBuildPhase;
  23 + buildActionMask = 2147483647;
  24 + dstPath = "";
  25 + dstSubfolderSpec = 10;
  26 + files = (
  27 + );
  28 + name = "Embed Frameworks";
  29 + runOnlyForDeploymentPostprocessing = 0;
  30 + };
  31 +/* End PBXCopyFilesBuildPhase section */
  32 +
  33 +/* Begin PBXFileReference section */
  34 + 0BBE969F27E27004C9AAFFF8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
  35 + 0D39D935427B8F068AD66D96 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
  36 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
  37 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
  38 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
  39 + 7276F50182CE37B742DDC5F5 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
  40 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
  41 + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
  42 + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
  43 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
  44 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
  45 + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
  46 + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
  47 + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
  48 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
  49 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  50 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  51 + AC602436DE30AD15B532CC56 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
  52 +/* End PBXFileReference section */
  53 +
  54 +/* Begin PBXFrameworksBuildPhase section */
  55 + 97C146EB1CF9000F007C117D /* Frameworks */ = {
  56 + isa = PBXFrameworksBuildPhase;
  57 + buildActionMask = 2147483647;
  58 + files = (
  59 + B28247ACABAF3D574B617C4D /* libPods-Runner.a in Frameworks */,
  60 + );
  61 + runOnlyForDeploymentPostprocessing = 0;
  62 + };
  63 +/* End PBXFrameworksBuildPhase section */
  64 +
  65 +/* Begin PBXGroup section */
  66 + 9740EEB11CF90186004384FC /* Flutter */ = {
  67 + isa = PBXGroup;
  68 + children = (
  69 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
  70 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  71 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  72 + 9740EEB31CF90195004384FC /* Generated.xcconfig */,
  73 + );
  74 + name = Flutter;
  75 + sourceTree = "<group>";
  76 + };
  77 + 97C146E51CF9000F007C117D = {
  78 + isa = PBXGroup;
  79 + children = (
  80 + 9740EEB11CF90186004384FC /* Flutter */,
  81 + 97C146F01CF9000F007C117D /* Runner */,
  82 + 97C146EF1CF9000F007C117D /* Products */,
  83 + F805F7336BA4B1118285AFF5 /* Pods */,
  84 + AE6633C814A73026273D945C /* Frameworks */,
  85 + );
  86 + sourceTree = "<group>";
  87 + };
  88 + 97C146EF1CF9000F007C117D /* Products */ = {
  89 + isa = PBXGroup;
  90 + children = (
  91 + 97C146EE1CF9000F007C117D /* Runner.app */,
  92 + );
  93 + name = Products;
  94 + sourceTree = "<group>";
  95 + };
  96 + 97C146F01CF9000F007C117D /* Runner */ = {
  97 + isa = PBXGroup;
  98 + children = (
  99 + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
  100 + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
  101 + 97C146FA1CF9000F007C117D /* Main.storyboard */,
  102 + 97C146FD1CF9000F007C117D /* Assets.xcassets */,
  103 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
  104 + 97C147021CF9000F007C117D /* Info.plist */,
  105 + 97C146F11CF9000F007C117D /* Supporting Files */,
  106 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
  107 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
  108 + );
  109 + path = Runner;
  110 + sourceTree = "<group>";
  111 + };
  112 + 97C146F11CF9000F007C117D /* Supporting Files */ = {
  113 + isa = PBXGroup;
  114 + children = (
  115 + 97C146F21CF9000F007C117D /* main.m */,
  116 + );
  117 + name = "Supporting Files";
  118 + sourceTree = "<group>";
  119 + };
  120 + AE6633C814A73026273D945C /* Frameworks */ = {
  121 + isa = PBXGroup;
  122 + children = (
  123 + 7276F50182CE37B742DDC5F5 /* libPods-Runner.a */,
  124 + );
  125 + name = Frameworks;
  126 + sourceTree = "<group>";
  127 + };
  128 + F805F7336BA4B1118285AFF5 /* Pods */ = {
  129 + isa = PBXGroup;
  130 + children = (
  131 + 0D39D935427B8F068AD66D96 /* Pods-Runner.debug.xcconfig */,
  132 + 0BBE969F27E27004C9AAFFF8 /* Pods-Runner.release.xcconfig */,
  133 + AC602436DE30AD15B532CC56 /* Pods-Runner.profile.xcconfig */,
  134 + );
  135 + name = Pods;
  136 + path = Pods;
  137 + sourceTree = "<group>";
  138 + };
  139 +/* End PBXGroup section */
  140 +
  141 +/* Begin PBXNativeTarget section */
  142 + 97C146ED1CF9000F007C117D /* Runner */ = {
  143 + isa = PBXNativeTarget;
  144 + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
  145 + buildPhases = (
  146 + 7DFD75DC2CE513B833AE4E1E /* [CP] Check Pods Manifest.lock */,
  147 + 9740EEB61CF901F6004384FC /* Run Script */,
  148 + 97C146EA1CF9000F007C117D /* Sources */,
  149 + 97C146EB1CF9000F007C117D /* Frameworks */,
  150 + 97C146EC1CF9000F007C117D /* Resources */,
  151 + 9705A1C41CF9048500538489 /* Embed Frameworks */,
  152 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
  153 + );
  154 + buildRules = (
  155 + );
  156 + dependencies = (
  157 + );
  158 + name = Runner;
  159 + productName = Runner;
  160 + productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
  161 + productType = "com.apple.product-type.application";
  162 + };
  163 +/* End PBXNativeTarget section */
  164 +
  165 +/* Begin PBXProject section */
  166 + 97C146E61CF9000F007C117D /* Project object */ = {
  167 + isa = PBXProject;
  168 + attributes = {
  169 + LastUpgradeCheck = 1300;
  170 + ORGANIZATIONNAME = "";
  171 + TargetAttributes = {
  172 + 97C146ED1CF9000F007C117D = {
  173 + CreatedOnToolsVersion = 7.3.1;
  174 + };
  175 + };
  176 + };
  177 + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
  178 + compatibilityVersion = "Xcode 9.3";
  179 + developmentRegion = en;
  180 + hasScannedForEncodings = 0;
  181 + knownRegions = (
  182 + en,
  183 + Base,
  184 + );
  185 + mainGroup = 97C146E51CF9000F007C117D;
  186 + productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
  187 + projectDirPath = "";
  188 + projectRoot = "";
  189 + targets = (
  190 + 97C146ED1CF9000F007C117D /* Runner */,
  191 + );
  192 + };
  193 +/* End PBXProject section */
  194 +
  195 +/* Begin PBXResourcesBuildPhase section */
  196 + 97C146EC1CF9000F007C117D /* Resources */ = {
  197 + isa = PBXResourcesBuildPhase;
  198 + buildActionMask = 2147483647;
  199 + files = (
  200 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
  201 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
  202 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
  203 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
  204 + );
  205 + runOnlyForDeploymentPostprocessing = 0;
  206 + };
  207 +/* End PBXResourcesBuildPhase section */
  208 +
  209 +/* Begin PBXShellScriptBuildPhase section */
  210 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
  211 + isa = PBXShellScriptBuildPhase;
  212 + buildActionMask = 2147483647;
  213 + files = (
  214 + );
  215 + inputPaths = (
  216 + );
  217 + name = "Thin Binary";
  218 + outputPaths = (
  219 + );
  220 + runOnlyForDeploymentPostprocessing = 0;
  221 + shellPath = /bin/sh;
  222 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
  223 + };
  224 + 7DFD75DC2CE513B833AE4E1E /* [CP] Check Pods Manifest.lock */ = {
  225 + isa = PBXShellScriptBuildPhase;
  226 + buildActionMask = 2147483647;
  227 + files = (
  228 + );
  229 + inputFileListPaths = (
  230 + );
  231 + inputPaths = (
  232 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
  233 + "${PODS_ROOT}/Manifest.lock",
  234 + );
  235 + name = "[CP] Check Pods Manifest.lock";
  236 + outputFileListPaths = (
  237 + );
  238 + outputPaths = (
  239 + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
  240 + );
  241 + runOnlyForDeploymentPostprocessing = 0;
  242 + shellPath = /bin/sh;
  243 + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
  244 + showEnvVarsInLog = 0;
  245 + };
  246 + 9740EEB61CF901F6004384FC /* Run Script */ = {
  247 + isa = PBXShellScriptBuildPhase;
  248 + buildActionMask = 2147483647;
  249 + files = (
  250 + );
  251 + inputPaths = (
  252 + );
  253 + name = "Run Script";
  254 + outputPaths = (
  255 + );
  256 + runOnlyForDeploymentPostprocessing = 0;
  257 + shellPath = /bin/sh;
  258 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
  259 + };
  260 +/* End PBXShellScriptBuildPhase section */
  261 +
  262 +/* Begin PBXSourcesBuildPhase section */
  263 + 97C146EA1CF9000F007C117D /* Sources */ = {
  264 + isa = PBXSourcesBuildPhase;
  265 + buildActionMask = 2147483647;
  266 + files = (
  267 + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
  268 + 97C146F31CF9000F007C117D /* main.m in Sources */,
  269 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
  270 + );
  271 + runOnlyForDeploymentPostprocessing = 0;
  272 + };
  273 +/* End PBXSourcesBuildPhase section */
  274 +
  275 +/* Begin PBXVariantGroup section */
  276 + 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
  277 + isa = PBXVariantGroup;
  278 + children = (
  279 + 97C146FB1CF9000F007C117D /* Base */,
  280 + );
  281 + name = Main.storyboard;
  282 + sourceTree = "<group>";
  283 + };
  284 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
  285 + isa = PBXVariantGroup;
  286 + children = (
  287 + 97C147001CF9000F007C117D /* Base */,
  288 + );
  289 + name = LaunchScreen.storyboard;
  290 + sourceTree = "<group>";
  291 + };
  292 +/* End PBXVariantGroup section */
  293 +
  294 +/* Begin XCBuildConfiguration section */
  295 + 249021D3217E4FDB00AE95B9 /* Profile */ = {
  296 + isa = XCBuildConfiguration;
  297 + buildSettings = {
  298 + ALWAYS_SEARCH_USER_PATHS = NO;
  299 + CLANG_ANALYZER_NONNULL = YES;
  300 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  301 + CLANG_CXX_LIBRARY = "libc++";
  302 + CLANG_ENABLE_MODULES = YES;
  303 + CLANG_ENABLE_OBJC_ARC = YES;
  304 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  305 + CLANG_WARN_BOOL_CONVERSION = YES;
  306 + CLANG_WARN_COMMA = YES;
  307 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  308 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  309 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  310 + CLANG_WARN_EMPTY_BODY = YES;
  311 + CLANG_WARN_ENUM_CONVERSION = YES;
  312 + CLANG_WARN_INFINITE_RECURSION = YES;
  313 + CLANG_WARN_INT_CONVERSION = YES;
  314 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  315 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  316 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  317 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  318 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  319 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  320 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  321 + CLANG_WARN_UNREACHABLE_CODE = YES;
  322 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  323 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  324 + COPY_PHASE_STRIP = NO;
  325 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  326 + ENABLE_NS_ASSERTIONS = NO;
  327 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  328 + GCC_C_LANGUAGE_STANDARD = gnu99;
  329 + GCC_NO_COMMON_BLOCKS = YES;
  330 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  331 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  332 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  333 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  334 + GCC_WARN_UNUSED_FUNCTION = YES;
  335 + GCC_WARN_UNUSED_VARIABLE = YES;
  336 + IPHONEOS_DEPLOYMENT_TARGET = 11.0;
  337 + MTL_ENABLE_DEBUG_INFO = NO;
  338 + SDKROOT = iphoneos;
  339 + SUPPORTED_PLATFORMS = iphoneos;
  340 + TARGETED_DEVICE_FAMILY = "1,2";
  341 + VALIDATE_PRODUCT = YES;
  342 + };
  343 + name = Profile;
  344 + };
  345 + 249021D4217E4FDB00AE95B9 /* Profile */ = {
  346 + isa = XCBuildConfiguration;
  347 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  348 + buildSettings = {
  349 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  350 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  351 + DEVELOPMENT_TEAM = 8J59HM8B82;
  352 + ENABLE_BITCODE = NO;
  353 + INFOPLIST_FILE = Runner/Info.plist;
  354 + LD_RUNPATH_SEARCH_PATHS = (
  355 + "$(inherited)",
  356 + "@executable_path/Frameworks",
  357 + );
  358 + PRODUCT_BUNDLE_IDENTIFIER = com.wxwork.flutterWxworkExample;
  359 + PRODUCT_NAME = "$(TARGET_NAME)";
  360 + VERSIONING_SYSTEM = "apple-generic";
  361 + };
  362 + name = Profile;
  363 + };
  364 + 97C147031CF9000F007C117D /* Debug */ = {
  365 + isa = XCBuildConfiguration;
  366 + buildSettings = {
  367 + ALWAYS_SEARCH_USER_PATHS = NO;
  368 + CLANG_ANALYZER_NONNULL = YES;
  369 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  370 + CLANG_CXX_LIBRARY = "libc++";
  371 + CLANG_ENABLE_MODULES = YES;
  372 + CLANG_ENABLE_OBJC_ARC = YES;
  373 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  374 + CLANG_WARN_BOOL_CONVERSION = YES;
  375 + CLANG_WARN_COMMA = YES;
  376 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  377 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  378 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  379 + CLANG_WARN_EMPTY_BODY = YES;
  380 + CLANG_WARN_ENUM_CONVERSION = YES;
  381 + CLANG_WARN_INFINITE_RECURSION = YES;
  382 + CLANG_WARN_INT_CONVERSION = YES;
  383 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  384 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  385 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  386 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  387 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  388 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  389 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  390 + CLANG_WARN_UNREACHABLE_CODE = YES;
  391 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  392 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  393 + COPY_PHASE_STRIP = NO;
  394 + DEBUG_INFORMATION_FORMAT = dwarf;
  395 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  396 + ENABLE_TESTABILITY = YES;
  397 + GCC_C_LANGUAGE_STANDARD = gnu99;
  398 + GCC_DYNAMIC_NO_PIC = NO;
  399 + GCC_NO_COMMON_BLOCKS = YES;
  400 + GCC_OPTIMIZATION_LEVEL = 0;
  401 + GCC_PREPROCESSOR_DEFINITIONS = (
  402 + "DEBUG=1",
  403 + "$(inherited)",
  404 + );
  405 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  406 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  407 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  408 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  409 + GCC_WARN_UNUSED_FUNCTION = YES;
  410 + GCC_WARN_UNUSED_VARIABLE = YES;
  411 + IPHONEOS_DEPLOYMENT_TARGET = 11.0;
  412 + MTL_ENABLE_DEBUG_INFO = YES;
  413 + ONLY_ACTIVE_ARCH = YES;
  414 + SDKROOT = iphoneos;
  415 + TARGETED_DEVICE_FAMILY = "1,2";
  416 + };
  417 + name = Debug;
  418 + };
  419 + 97C147041CF9000F007C117D /* Release */ = {
  420 + isa = XCBuildConfiguration;
  421 + buildSettings = {
  422 + ALWAYS_SEARCH_USER_PATHS = NO;
  423 + CLANG_ANALYZER_NONNULL = YES;
  424 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  425 + CLANG_CXX_LIBRARY = "libc++";
  426 + CLANG_ENABLE_MODULES = YES;
  427 + CLANG_ENABLE_OBJC_ARC = YES;
  428 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  429 + CLANG_WARN_BOOL_CONVERSION = YES;
  430 + CLANG_WARN_COMMA = YES;
  431 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  432 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  433 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  434 + CLANG_WARN_EMPTY_BODY = YES;
  435 + CLANG_WARN_ENUM_CONVERSION = YES;
  436 + CLANG_WARN_INFINITE_RECURSION = YES;
  437 + CLANG_WARN_INT_CONVERSION = YES;
  438 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  439 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  440 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  441 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  442 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  443 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  444 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  445 + CLANG_WARN_UNREACHABLE_CODE = YES;
  446 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  447 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  448 + COPY_PHASE_STRIP = NO;
  449 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  450 + ENABLE_NS_ASSERTIONS = NO;
  451 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  452 + GCC_C_LANGUAGE_STANDARD = gnu99;
  453 + GCC_NO_COMMON_BLOCKS = YES;
  454 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  455 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  456 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  457 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  458 + GCC_WARN_UNUSED_FUNCTION = YES;
  459 + GCC_WARN_UNUSED_VARIABLE = YES;
  460 + IPHONEOS_DEPLOYMENT_TARGET = 11.0;
  461 + MTL_ENABLE_DEBUG_INFO = NO;
  462 + SDKROOT = iphoneos;
  463 + SUPPORTED_PLATFORMS = iphoneos;
  464 + TARGETED_DEVICE_FAMILY = "1,2";
  465 + VALIDATE_PRODUCT = YES;
  466 + };
  467 + name = Release;
  468 + };
  469 + 97C147061CF9000F007C117D /* Debug */ = {
  470 + isa = XCBuildConfiguration;
  471 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  472 + buildSettings = {
  473 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  474 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  475 + DEVELOPMENT_TEAM = 8J59HM8B82;
  476 + ENABLE_BITCODE = NO;
  477 + INFOPLIST_FILE = Runner/Info.plist;
  478 + LD_RUNPATH_SEARCH_PATHS = (
  479 + "$(inherited)",
  480 + "@executable_path/Frameworks",
  481 + );
  482 + PRODUCT_BUNDLE_IDENTIFIER = com.wxwork.flutterWxworkExample;
  483 + PRODUCT_NAME = "$(TARGET_NAME)";
  484 + VERSIONING_SYSTEM = "apple-generic";
  485 + };
  486 + name = Debug;
  487 + };
  488 + 97C147071CF9000F007C117D /* Release */ = {
  489 + isa = XCBuildConfiguration;
  490 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  491 + buildSettings = {
  492 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  493 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  494 + DEVELOPMENT_TEAM = 8J59HM8B82;
  495 + ENABLE_BITCODE = NO;
  496 + INFOPLIST_FILE = Runner/Info.plist;
  497 + LD_RUNPATH_SEARCH_PATHS = (
  498 + "$(inherited)",
  499 + "@executable_path/Frameworks",
  500 + );
  501 + PRODUCT_BUNDLE_IDENTIFIER = com.wxwork.flutterWxworkExample;
  502 + PRODUCT_NAME = "$(TARGET_NAME)";
  503 + VERSIONING_SYSTEM = "apple-generic";
  504 + };
  505 + name = Release;
  506 + };
  507 +/* End XCBuildConfiguration section */
  508 +
  509 +/* Begin XCConfigurationList section */
  510 + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
  511 + isa = XCConfigurationList;
  512 + buildConfigurations = (
  513 + 97C147031CF9000F007C117D /* Debug */,
  514 + 97C147041CF9000F007C117D /* Release */,
  515 + 249021D3217E4FDB00AE95B9 /* Profile */,
  516 + );
  517 + defaultConfigurationIsVisible = 0;
  518 + defaultConfigurationName = Release;
  519 + };
  520 + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
  521 + isa = XCConfigurationList;
  522 + buildConfigurations = (
  523 + 97C147061CF9000F007C117D /* Debug */,
  524 + 97C147071CF9000F007C117D /* Release */,
  525 + 249021D4217E4FDB00AE95B9 /* Profile */,
  526 + );
  527 + defaultConfigurationIsVisible = 0;
  528 + defaultConfigurationName = Release;
  529 + };
  530 +/* End XCConfigurationList section */
  531 + };
  532 + rootObject = 97C146E61CF9000F007C117D /* Project object */;
  533 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "self:">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "1300"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  18 + BuildableName = "Runner.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <MacroExpansion>
  31 + <BuildableReference
  32 + BuildableIdentifier = "primary"
  33 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  34 + BuildableName = "Runner.app"
  35 + BlueprintName = "Runner"
  36 + ReferencedContainer = "container:Runner.xcodeproj">
  37 + </BuildableReference>
  38 + </MacroExpansion>
  39 + <Testables>
  40 + </Testables>
  41 + </TestAction>
  42 + <LaunchAction
  43 + buildConfiguration = "Debug"
  44 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  45 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  46 + launchStyle = "0"
  47 + useCustomWorkingDirectory = "NO"
  48 + ignoresPersistentStateOnLaunch = "NO"
  49 + debugDocumentVersioning = "YES"
  50 + debugServiceExtension = "internal"
  51 + allowLocationSimulation = "YES">
  52 + <BuildableProductRunnable
  53 + runnableDebuggingMode = "0">
  54 + <BuildableReference
  55 + BuildableIdentifier = "primary"
  56 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  57 + BuildableName = "Runner.app"
  58 + BlueprintName = "Runner"
  59 + ReferencedContainer = "container:Runner.xcodeproj">
  60 + </BuildableReference>
  61 + </BuildableProductRunnable>
  62 + </LaunchAction>
  63 + <ProfileAction
  64 + buildConfiguration = "Profile"
  65 + shouldUseLaunchSchemeArgsEnv = "YES"
  66 + savedToolIdentifier = ""
  67 + useCustomWorkingDirectory = "NO"
  68 + debugDocumentVersioning = "YES">
  69 + <BuildableProductRunnable
  70 + runnableDebuggingMode = "0">
  71 + <BuildableReference
  72 + BuildableIdentifier = "primary"
  73 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  74 + BuildableName = "Runner.app"
  75 + BlueprintName = "Runner"
  76 + ReferencedContainer = "container:Runner.xcodeproj">
  77 + </BuildableReference>
  78 + </BuildableProductRunnable>
  79 + </ProfileAction>
  80 + <AnalyzeAction
  81 + buildConfiguration = "Debug">
  82 + </AnalyzeAction>
  83 + <ArchiveAction
  84 + buildConfiguration = "Release"
  85 + revealArchiveInOrganizer = "YES">
  86 + </ArchiveAction>
  87 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 + <FileRef
  8 + location = "group:Pods/Pods.xcodeproj">
  9 + </FileRef>
  10 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +#import <Flutter/Flutter.h>
  2 +#import <UIKit/UIKit.h>
  3 +
  4 +@interface AppDelegate : FlutterAppDelegate
  5 +
  6 +@end
  1 +#import "AppDelegate.h"
  2 +#import "GeneratedPluginRegistrant.h"
  3 +
  4 +@implementation AppDelegate
  5 +
  6 +- (BOOL)application:(UIApplication *)application
  7 + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  8 + [GeneratedPluginRegistrant registerWithRegistry:self];
  9 + // Override point for customization after application launch.
  10 + return [super application:application didFinishLaunchingWithOptions:launchOptions];
  11 +}
  12 +
  13 +@end
  1 +{
  2 + "images" : [
  3 + {
  4 + "size" : "20x20",
  5 + "idiom" : "iphone",
  6 + "filename" : "Icon-App-20x20@2x.png",
  7 + "scale" : "2x"
  8 + },
  9 + {
  10 + "size" : "20x20",
  11 + "idiom" : "iphone",
  12 + "filename" : "Icon-App-20x20@3x.png",
  13 + "scale" : "3x"
  14 + },
  15 + {
  16 + "size" : "29x29",
  17 + "idiom" : "iphone",
  18 + "filename" : "Icon-App-29x29@1x.png",
  19 + "scale" : "1x"
  20 + },
  21 + {
  22 + "size" : "29x29",
  23 + "idiom" : "iphone",
  24 + "filename" : "Icon-App-29x29@2x.png",
  25 + "scale" : "2x"
  26 + },
  27 + {
  28 + "size" : "29x29",
  29 + "idiom" : "iphone",
  30 + "filename" : "Icon-App-29x29@3x.png",
  31 + "scale" : "3x"
  32 + },
  33 + {
  34 + "size" : "40x40",
  35 + "idiom" : "iphone",
  36 + "filename" : "Icon-App-40x40@2x.png",
  37 + "scale" : "2x"
  38 + },
  39 + {
  40 + "size" : "40x40",
  41 + "idiom" : "iphone",
  42 + "filename" : "Icon-App-40x40@3x.png",
  43 + "scale" : "3x"
  44 + },
  45 + {
  46 + "size" : "60x60",
  47 + "idiom" : "iphone",
  48 + "filename" : "Icon-App-60x60@2x.png",
  49 + "scale" : "2x"
  50 + },
  51 + {
  52 + "size" : "60x60",
  53 + "idiom" : "iphone",
  54 + "filename" : "Icon-App-60x60@3x.png",
  55 + "scale" : "3x"
  56 + },
  57 + {
  58 + "size" : "20x20",
  59 + "idiom" : "ipad",
  60 + "filename" : "Icon-App-20x20@1x.png",
  61 + "scale" : "1x"
  62 + },
  63 + {
  64 + "size" : "20x20",
  65 + "idiom" : "ipad",
  66 + "filename" : "Icon-App-20x20@2x.png",
  67 + "scale" : "2x"
  68 + },
  69 + {
  70 + "size" : "29x29",
  71 + "idiom" : "ipad",
  72 + "filename" : "Icon-App-29x29@1x.png",
  73 + "scale" : "1x"
  74 + },
  75 + {
  76 + "size" : "29x29",
  77 + "idiom" : "ipad",
  78 + "filename" : "Icon-App-29x29@2x.png",
  79 + "scale" : "2x"
  80 + },
  81 + {
  82 + "size" : "40x40",
  83 + "idiom" : "ipad",
  84 + "filename" : "Icon-App-40x40@1x.png",
  85 + "scale" : "1x"
  86 + },
  87 + {
  88 + "size" : "40x40",
  89 + "idiom" : "ipad",
  90 + "filename" : "Icon-App-40x40@2x.png",
  91 + "scale" : "2x"
  92 + },
  93 + {
  94 + "size" : "76x76",
  95 + "idiom" : "ipad",
  96 + "filename" : "Icon-App-76x76@1x.png",
  97 + "scale" : "1x"
  98 + },
  99 + {
  100 + "size" : "76x76",
  101 + "idiom" : "ipad",
  102 + "filename" : "Icon-App-76x76@2x.png",
  103 + "scale" : "2x"
  104 + },
  105 + {
  106 + "size" : "83.5x83.5",
  107 + "idiom" : "ipad",
  108 + "filename" : "Icon-App-83.5x83.5@2x.png",
  109 + "scale" : "2x"
  110 + },
  111 + {
  112 + "size" : "1024x1024",
  113 + "idiom" : "ios-marketing",
  114 + "filename" : "Icon-App-1024x1024@1x.png",
  115 + "scale" : "1x"
  116 + }
  117 + ],
  118 + "info" : {
  119 + "version" : 1,
  120 + "author" : "xcode"
  121 + }
  122 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "LaunchImage.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "filename" : "LaunchImage@2x.png",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "idiom" : "universal",
  15 + "filename" : "LaunchImage@3x.png",
  16 + "scale" : "3x"
  17 + }
  18 + ],
  19 + "info" : {
  20 + "version" : 1,
  21 + "author" : "xcode"
  22 + }
  23 +}
  1 +# Launch Screen Assets
  2 +
  3 +You can customize the launch screen with your own desired assets by replacing the image files in this directory.
  4 +
  5 +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--View Controller-->
  9 + <scene sceneID="EHf-IW-A2E">
  10 + <objects>
  11 + <viewController id="01J-lp-oVM" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
  14 + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
  17 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  18 + <subviews>
  19 + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
  20 + </imageView>
  21 + </subviews>
  22 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  23 + <constraints>
  24 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
  25 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
  26 + </constraints>
  27 + </view>
  28 + </viewController>
  29 + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
  30 + </objects>
  31 + <point key="canvasLocation" x="53" y="375"/>
  32 + </scene>
  33 + </scenes>
  34 + <resources>
  35 + <image name="LaunchImage" width="168" height="185"/>
  36 + </resources>
  37 +</document>
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--Flutter View Controller-->
  9 + <scene sceneID="tne-QT-ifu">
  10 + <objects>
  11 + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
  14 + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
  17 + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
  18 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  19 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  20 + </view>
  21 + </viewController>
  22 + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
  23 + </objects>
  24 + </scene>
  25 + </scenes>
  26 +</document>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleDisplayName</key>
  8 + <string>Flutter Wxwork</string>
  9 + <key>CFBundleExecutable</key>
  10 + <string>$(EXECUTABLE_NAME)</string>
  11 + <key>CFBundleIdentifier</key>
  12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  13 + <key>CFBundleInfoDictionaryVersion</key>
  14 + <string>6.0</string>
  15 + <key>CFBundleName</key>
  16 + <string>flutter_wxwork_example</string>
  17 + <key>CFBundlePackageType</key>
  18 + <string>APPL</string>
  19 + <key>CFBundleShortVersionString</key>
  20 + <string>$(FLUTTER_BUILD_NAME)</string>
  21 + <key>CFBundleSignature</key>
  22 + <string>????</string>
  23 + <key>CFBundleVersion</key>
  24 + <string>$(FLUTTER_BUILD_NUMBER)</string>
  25 + <key>LSRequiresIPhoneOS</key>
  26 + <true/>
  27 + <key>UILaunchStoryboardName</key>
  28 + <string>LaunchScreen</string>
  29 + <key>UIMainStoryboardFile</key>
  30 + <string>Main</string>
  31 + <key>UISupportedInterfaceOrientations</key>
  32 + <array>
  33 + <string>UIInterfaceOrientationPortrait</string>
  34 + <string>UIInterfaceOrientationLandscapeLeft</string>
  35 + <string>UIInterfaceOrientationLandscapeRight</string>
  36 + </array>
  37 + <key>UISupportedInterfaceOrientations~ipad</key>
  38 + <array>
  39 + <string>UIInterfaceOrientationPortrait</string>
  40 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
  41 + <string>UIInterfaceOrientationLandscapeLeft</string>
  42 + <string>UIInterfaceOrientationLandscapeRight</string>
  43 + </array>
  44 + <key>UIViewControllerBasedStatusBarAppearance</key>
  45 + <false/>
  46 + <key>CADisableMinimumFrameDurationOnPhone</key>
  47 + <true/>
  48 + <key>UIApplicationSupportsIndirectInputEvents</key>
  49 + <true/>
  50 +</dict>
  51 +</plist>
  1 +#import <Flutter/Flutter.h>
  2 +#import <UIKit/UIKit.h>
  3 +#import "AppDelegate.h"
  4 +
  5 +int main(int argc, char* argv[]) {
  6 + @autoreleasepool {
  7 + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  8 + }
  9 +}
  1 +import 'package:flutter/material.dart';
  2 +import 'dart:async';
  3 +
  4 +import 'package:flutter/services.dart';
  5 +import 'package:flutter_wxwork/flutter_wxwork.dart';
  6 +
  7 +void main() {
  8 + runApp(const MyApp());
  9 +}
  10 +
  11 +class MyApp extends StatefulWidget {
  12 + const MyApp({super.key});
  13 +
  14 + @override
  15 + State<MyApp> createState() => _MyAppState();
  16 +}
  17 +
  18 +class _MyAppState extends State<MyApp> {
  19 + String _platformVersion = 'Unknown';
  20 + final _flutterWxworkPlugin = FlutterWxwork();
  21 +
  22 + @override
  23 + void initState() {
  24 + super.initState();
  25 + initPlatformState();
  26 + }
  27 +
  28 + // Platform messages are asynchronous, so we initialize in an async method.
  29 + Future<void> initPlatformState() async {
  30 + String platformVersion;
  31 + // Platform messages may fail, so we use a try/catch PlatformException.
  32 + // We also handle the message potentially returning null.
  33 + try {
  34 + platformVersion =
  35 + await _flutterWxworkPlugin.getPlatformVersion() ?? 'Unknown platform version';
  36 + } on PlatformException {
  37 + platformVersion = 'Failed to get platform version.';
  38 + }
  39 +
  40 + // If the widget was removed from the tree while the asynchronous platform
  41 + // message was in flight, we want to discard the reply rather than calling
  42 + // setState to update our non-existent appearance.
  43 + if (!mounted) return;
  44 +
  45 + setState(() {
  46 + _platformVersion = platformVersion;
  47 + });
  48 + }
  49 +
  50 + @override
  51 + Widget build(BuildContext context) {
  52 + return MaterialApp(
  53 + home: Scaffold(
  54 + appBar: AppBar(
  55 + title: const Text('Plugin example app'),
  56 + ),
  57 + body: Center(
  58 + child: Text('Running on: $_platformVersion\n'),
  59 + ),
  60 + ),
  61 + );
  62 + }
  63 +}
  1 +# Generated by pub
  2 +# See https://dart.dev/tools/pub/glossary#lockfile
  3 +packages:
  4 + async:
  5 + dependency: transitive
  6 + description:
  7 + name: async
  8 + url: "https://pub.flutter-io.cn"
  9 + source: hosted
  10 + version: "2.9.0"
  11 + boolean_selector:
  12 + dependency: transitive
  13 + description:
  14 + name: boolean_selector
  15 + url: "https://pub.flutter-io.cn"
  16 + source: hosted
  17 + version: "2.1.0"
  18 + characters:
  19 + dependency: transitive
  20 + description:
  21 + name: characters
  22 + url: "https://pub.flutter-io.cn"
  23 + source: hosted
  24 + version: "1.2.1"
  25 + clock:
  26 + dependency: transitive
  27 + description:
  28 + name: clock
  29 + url: "https://pub.flutter-io.cn"
  30 + source: hosted
  31 + version: "1.1.1"
  32 + collection:
  33 + dependency: transitive
  34 + description:
  35 + name: collection
  36 + url: "https://pub.flutter-io.cn"
  37 + source: hosted
  38 + version: "1.16.0"
  39 + cupertino_icons:
  40 + dependency: "direct main"
  41 + description:
  42 + name: cupertino_icons
  43 + url: "https://pub.flutter-io.cn"
  44 + source: hosted
  45 + version: "1.0.5"
  46 + fake_async:
  47 + dependency: transitive
  48 + description:
  49 + name: fake_async
  50 + url: "https://pub.flutter-io.cn"
  51 + source: hosted
  52 + version: "1.3.1"
  53 + flutter:
  54 + dependency: "direct main"
  55 + description: flutter
  56 + source: sdk
  57 + version: "0.0.0"
  58 + flutter_lints:
  59 + dependency: "direct dev"
  60 + description:
  61 + name: flutter_lints
  62 + url: "https://pub.flutter-io.cn"
  63 + source: hosted
  64 + version: "2.0.2"
  65 + flutter_test:
  66 + dependency: "direct dev"
  67 + description: flutter
  68 + source: sdk
  69 + version: "0.0.0"
  70 + flutter_wxwork:
  71 + dependency: "direct main"
  72 + description:
  73 + path: ".."
  74 + relative: true
  75 + source: path
  76 + version: "0.0.1"
  77 + lints:
  78 + dependency: transitive
  79 + description:
  80 + name: lints
  81 + url: "https://pub.flutter-io.cn"
  82 + source: hosted
  83 + version: "2.0.1"
  84 + matcher:
  85 + dependency: transitive
  86 + description:
  87 + name: matcher
  88 + url: "https://pub.flutter-io.cn"
  89 + source: hosted
  90 + version: "0.12.12"
  91 + material_color_utilities:
  92 + dependency: transitive
  93 + description:
  94 + name: material_color_utilities
  95 + url: "https://pub.flutter-io.cn"
  96 + source: hosted
  97 + version: "0.1.5"
  98 + meta:
  99 + dependency: transitive
  100 + description:
  101 + name: meta
  102 + url: "https://pub.flutter-io.cn"
  103 + source: hosted
  104 + version: "1.8.0"
  105 + path:
  106 + dependency: transitive
  107 + description:
  108 + name: path
  109 + url: "https://pub.flutter-io.cn"
  110 + source: hosted
  111 + version: "1.8.2"
  112 + plugin_platform_interface:
  113 + dependency: transitive
  114 + description:
  115 + name: plugin_platform_interface
  116 + url: "https://pub.flutter-io.cn"
  117 + source: hosted
  118 + version: "2.1.5"
  119 + sky_engine:
  120 + dependency: transitive
  121 + description: flutter
  122 + source: sdk
  123 + version: "0.0.99"
  124 + source_span:
  125 + dependency: transitive
  126 + description:
  127 + name: source_span
  128 + url: "https://pub.flutter-io.cn"
  129 + source: hosted
  130 + version: "1.9.0"
  131 + stack_trace:
  132 + dependency: transitive
  133 + description:
  134 + name: stack_trace
  135 + url: "https://pub.flutter-io.cn"
  136 + source: hosted
  137 + version: "1.10.0"
  138 + stream_channel:
  139 + dependency: transitive
  140 + description:
  141 + name: stream_channel
  142 + url: "https://pub.flutter-io.cn"
  143 + source: hosted
  144 + version: "2.1.0"
  145 + string_scanner:
  146 + dependency: transitive
  147 + description:
  148 + name: string_scanner
  149 + url: "https://pub.flutter-io.cn"
  150 + source: hosted
  151 + version: "1.1.1"
  152 + term_glyph:
  153 + dependency: transitive
  154 + description:
  155 + name: term_glyph
  156 + url: "https://pub.flutter-io.cn"
  157 + source: hosted
  158 + version: "1.2.1"
  159 + test_api:
  160 + dependency: transitive
  161 + description:
  162 + name: test_api
  163 + url: "https://pub.flutter-io.cn"
  164 + source: hosted
  165 + version: "0.4.12"
  166 + vector_math:
  167 + dependency: transitive
  168 + description:
  169 + name: vector_math
  170 + url: "https://pub.flutter-io.cn"
  171 + source: hosted
  172 + version: "2.1.2"
  173 +sdks:
  174 + dart: ">=2.18.2 <3.0.0"
  175 + flutter: ">=2.5.0"
  1 +name: flutter_wxwork_example
  2 +description: Demonstrates how to use the flutter_wxwork plugin.
  3 +
  4 +# The following line prevents the package from being accidentally published to
  5 +# pub.dev using `flutter pub publish`. This is preferred for private packages.
  6 +publish_to: 'none' # Remove this line if you wish to publish to pub.dev
  7 +
  8 +environment:
  9 + sdk: '>=2.18.2 <3.0.0'
  10 +
  11 +# Dependencies specify other packages that your package needs in order to work.
  12 +# To automatically upgrade your package dependencies to the latest versions
  13 +# consider running `flutter pub upgrade --major-versions`. Alternatively,
  14 +# dependencies can be manually updated by changing the version numbers below to
  15 +# the latest version available on pub.dev. To see which dependencies have newer
  16 +# versions available, run `flutter pub outdated`.
  17 +dependencies:
  18 + flutter:
  19 + sdk: flutter
  20 +
  21 + flutter_wxwork:
  22 + # When depending on this package from a real application you should use:
  23 + # flutter_wxwork: ^x.y.z
  24 + # See https://dart.dev/tools/pub/dependencies#version-constraints
  25 + # The example app is bundled with the plugin so we use a path dependency on
  26 + # the parent directory to use the current plugin's version.
  27 + path: ../
  28 +
  29 + # The following adds the Cupertino Icons font to your application.
  30 + # Use with the CupertinoIcons class for iOS style icons.
  31 + cupertino_icons: ^1.0.2
  32 +
  33 +dev_dependencies:
  34 + flutter_test:
  35 + sdk: flutter
  36 +
  37 + # The "flutter_lints" package below contains a set of recommended lints to
  38 + # encourage good coding practices. The lint set provided by the package is
  39 + # activated in the `analysis_options.yaml` file located at the root of your
  40 + # package. See that file for information about deactivating specific lint
  41 + # rules and activating additional ones.
  42 + flutter_lints: ^2.0.0
  43 +
  44 +# For information on the generic Dart part of this file, see the
  45 +# following page: https://dart.dev/tools/pub/pubspec
  46 +
  47 +# The following section is specific to Flutter packages.
  48 +flutter:
  49 +
  50 + # The following line ensures that the Material Icons font is
  51 + # included with your application, so that you can use the icons in
  52 + # the material Icons class.
  53 + uses-material-design: true
  54 +
  55 + # To add assets to your application, add an assets section, like this:
  56 + # assets:
  57 + # - images/a_dot_burr.jpeg
  58 + # - images/a_dot_ham.jpeg
  59 +
  60 + # An image asset can refer to one or more resolution-specific "variants", see
  61 + # https://flutter.dev/assets-and-images/#resolution-aware
  62 +
  63 + # For details regarding adding assets from package dependencies, see
  64 + # https://flutter.dev/assets-and-images/#from-packages
  65 +
  66 + # To add custom fonts to your application, add a fonts section here,
  67 + # in this "flutter" section. Each entry in this list should have a
  68 + # "family" key with the font family name, and a "fonts" key with a
  69 + # list giving the asset and other descriptors for the font. For
  70 + # example:
  71 + # fonts:
  72 + # - family: Schyler
  73 + # fonts:
  74 + # - asset: fonts/Schyler-Regular.ttf
  75 + # - asset: fonts/Schyler-Italic.ttf
  76 + # style: italic
  77 + # - family: Trajan Pro
  78 + # fonts:
  79 + # - asset: fonts/TrajanPro.ttf
  80 + # - asset: fonts/TrajanPro_Bold.ttf
  81 + # weight: 700
  82 + #
  83 + # For details regarding fonts from package dependencies,
  84 + # see https://flutter.dev/custom-fonts/#from-packages
  1 +// This is a basic Flutter widget test.
  2 +//
  3 +// To perform an interaction with a widget in your test, use the WidgetTester
  4 +// utility in the flutter_test package. For example, you can send tap and scroll
  5 +// gestures. You can also use WidgetTester to find child widgets in the widget
  6 +// tree, read text, and verify that the values of widget properties are correct.
  7 +
  8 +import 'package:flutter/material.dart';
  9 +import 'package:flutter_test/flutter_test.dart';
  10 +
  11 +import 'package:flutter_wxwork_example/main.dart';
  12 +
  13 +void main() {
  14 + testWidgets('Verify Platform version', (WidgetTester tester) async {
  15 + // Build our app and trigger a frame.
  16 + await tester.pumpWidget(const MyApp());
  17 +
  18 + // Verify that platform version is retrieved.
  19 + expect(
  20 + find.byWidgetPredicate(
  21 + (Widget widget) => widget is Text &&
  22 + widget.data!.startsWith('Running on:'),
  23 + ),
  24 + findsOneWidget,
  25 + );
  26 + });
  27 +}
  1 +.idea/
  2 +.vagrant/
  3 +.sconsign.dblite
  4 +.svn/
  5 +
  6 +.DS_Store
  7 +*.swp
  8 +profile
  9 +
  10 +DerivedData/
  11 +build/
  12 +GeneratedPluginRegistrant.h
  13 +GeneratedPluginRegistrant.m
  14 +
  15 +.generated/
  16 +
  17 +*.pbxuser
  18 +*.mode1v3
  19 +*.mode2v3
  20 +*.perspectivev3
  21 +
  22 +!default.pbxuser
  23 +!default.mode1v3
  24 +!default.mode2v3
  25 +!default.perspectivev3
  26 +
  27 +xcuserdata
  28 +
  29 +*.moved-aside
  30 +
  31 +*.pyc
  32 +*sync/
  33 +Icon?
  34 +.tags*
  35 +
  36 +/Flutter/Generated.xcconfig
  37 +/Flutter/ephemeral/
  38 +/Flutter/flutter_export_environment.sh
  1 +#import <Flutter/Flutter.h>
  2 +#import "WWKApi.h"
  3 +
  4 +@interface FlutterWxworkPlugin : NSObject<FlutterPlugin,WWKApiDelegate>
  5 +@end
  1 +#import "FlutterWxworkPlugin.h"
  2 +
  3 +#import "WWKApiObject.h"
  4 +
  5 +@implementation FlutterWxworkPlugin
  6 +
  7 +FlutterResult authResult;
  8 +FlutterMethodChannel *channel;
  9 ++ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
  10 + channel = [FlutterMethodChannel
  11 + methodChannelWithName:@"flutter_wxwork"
  12 + binaryMessenger:[registrar messenger]];
  13 + FlutterWxworkPlugin* instance = [[FlutterWxworkPlugin alloc] init];
  14 + [registrar addMethodCallDelegate:instance channel:channel];
  15 +}
  16 +
  17 +
  18 +
  19 +- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
  20 + if([@"isAppInstalled" isEqualToString:call.method]){
  21 + NSString *str = [NSString stringWithFormat:@"%hhd",[WWKApi isAppInstalled]];
  22 + result(str);
  23 + }else if ([@"register" isEqualToString:call.method]) {
  24 + NSDictionary *dic = call.arguments;
  25 + NSString *scheme = dic[@"scheme"];
  26 + NSString *corpId = dic[@"corpId"];
  27 + NSString *agentId = dic[@"agentId"];
  28 + result([NSString stringWithFormat:@"%hhd",[WWKApi registerApp:scheme corpId:corpId agentId:agentId]]);
  29 + } else if ([@"auth" isEqualToString:call.method]){
  30 + WWKSSOReq *req = [[WWKSSOReq alloc] init];
  31 + // state参数为这次请求的唯一标示,客户端需要维护其唯一性。SSO回调时会原样返回
  32 + req.state = call.arguments[@"state"];
  33 + [WWKApi sendReq:req];
  34 + authResult = result;
  35 + }
  36 +
  37 + else if ([@"shareImage" isEqualToString:call.method]) {
  38 + [self shareImage:call result:result];
  39 + }
  40 +else if ([@"shareMiniProgram" isEqualToString:call.method]) {
  41 + [self shareMiniProgram:call result:result];
  42 + } else {
  43 + result(FlutterMethodNotImplemented);
  44 + }
  45 +}
  46 +
  47 +
  48 +
  49 +
  50 +- (void)shareImage:(FlutterMethodCall *)call result:(FlutterResult)result {
  51 +
  52 + WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
  53 + WWKMessageImageAttachment *attachment = [[WWKMessageImageAttachment alloc] init];
  54 + attachment.filename = @"test.gif";
  55 + attachment.path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"gif"];
  56 + req.attachment = attachment;
  57 + [WWKApi sendReq:req];
  58 +
  59 +}
  60 +
  61 +
  62 +- (void)shareMiniProgram:(FlutterMethodCall *)call result:(FlutterResult)result {
  63 +
  64 + WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
  65 + WWKMessageTextAttachment *attachment = [[WWKMessageTextAttachment alloc] init];
  66 + attachment.text = @"企业微信提供了通讯录管理、应用管理、消息推送、身份验证、移动端SDK、素材、OA数据接口、企业支付、电子发票等API,管理员可以使用这些API,为企业接入更多个性化的办公应用。";
  67 + req.attachment = attachment;
  68 + [WWKApi sendReq:req];
  69 +// WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
  70 +// WWKMessageMiniAppAttachment *attachment = [[WWKMessageMiniAppAttachment alloc] init];
  71 +// // 示例用小程序,请填写应用关联的小程序username、路径和图片以及标题
  72 +
  73 +// NSString *userName = call.arguments[@"userName"]; //必须是应用关联的小程序,注意要有@app后缀
  74 +// NSString *path = call.arguments[@"path"];
  75 +// NSString *hdImageData = call.arguments[@"hdImageData"];
  76 +// NSString *title = call.arguments[@"title"];
  77 +
  78 +// attachment.userName = userName; //必须是应用关联的小程序,注意要有@app后缀
  79 +// attachment.path = path;
  80 +// NSURL *imageURL = [NSURL URLWithString:hdImageData];
  81 +// //下载图片
  82 +// NSData *data= [NSData dataWithContentsOfURL:imageURL];
  83 +// attachment.hdImageData = data;
  84 +// // attachment.hdImageData = UIImageJPEGRepresentation([UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"]], 1.0f);
  85 +// attachment.title = @"分享标题";
  86 +// req.attachment = attachment;
  87 +// [WWKApi sendReq:req];
  88 +
  89 +}
  90 +
  91 +
  92 +
  93 +
  94 +// - (void)handleShare:(FlutterMethodCall *)call result:(FlutterResult)result {
  95 +// if ([@"shareText" isEqualToString:call.method]) {
  96 +// [self shareText:call result:result];
  97 +// } else if ([@"shareImage" isEqualToString:call.method]) {
  98 +// [self shareImage:call result:result];
  99 +// } else if ([@"shareWebPage" isEqualToString:call.method]) {
  100 +// [self shareWebPage:call result:result];
  101 +// } else if ([@"shareMusic" isEqualToString:call.method]) {
  102 +// [self shareMusic:call result:result];
  103 +// } else if ([@"shareVideo" isEqualToString:call.method]) {
  104 +// [self shareVideo:call result:result];
  105 +// } else if ([@"shareMiniProgram" isEqualToString:call.method]) {
  106 +// [self shareMiniProgram:call result:result];
  107 +// } else if ([@"shareFile" isEqualToString:call.method]) {
  108 +// [self shareFile:call result:result];
  109 +// }
  110 +// }
  111 +
  112 +- (void)checkWWorkInstallation:(FlutterMethodCall *)call result:(FlutterResult)result {
  113 + NSString *str = [NSString stringWithFormat:@"%hhd",[WWKApi isAppInstalled]];
  114 + result(str);
  115 +
  116 + // result(@([WWKApi isAppInstalled]));
  117 +}
  118 +
  119 +- (void)registerApp:(FlutterMethodCall *)call result:(FlutterResult)result {
  120 + // NSNumber* doOnIOS =call.arguments[@"iOS"];
  121 +
  122 + // if (![doOnIOS boolValue]) {
  123 + // result(@NO);
  124 + // return;
  125 + // }
  126 +
  127 + // NSString *appId = call.arguments[@"appId"];
  128 + // if ([FluwxStringUtil isBlank:appId]) {
  129 + // result([FlutterError errorWithCode:@"invalid app id" message:@"are you sure your app id is correct ? " details:appId]);
  130 + // return;
  131 + // }
  132 +
  133 + // NSString *universalLink = call.arguments[@"universalLink"];
  134 +
  135 + // if ([FluwxStringUtil isBlank:universalLink]) {
  136 + // result([FlutterError errorWithCode:@"invalid universal link" message:@"are you sure your universal link is correct ? " details:universalLink]);
  137 + // return;
  138 + // }
  139 +
  140 +
  141 + NSString *scheme = call.arguments[@"scheme"]; // 第三方App的Schema
  142 + NSString *corpId = call.arguments[@"corpId"]; // 第三方App所属企业的ID
  143 + NSString *agentId = call.arguments[@"agentId"]; // 第三方App在企业内部的ID
  144 + // BOOL isWeChatRegistered = [WXApi registerApp:appId universalLink:universalLink];
  145 + BOOL isWWKRegistered = [WWKApi registerApp:@"wwauthbdca186ec4257973000006" corpId:@"wwbdca186ec4257973" agentId:@"1000006"];
  146 + result(@(isWWKRegistered));
  147 + // result(@(isWeChatRegistered));
  148 +}
  149 +
  150 +#pragma mark - AppDelegate
  151 +
  152 +- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options{
  153 + return [WWKApi handleOpenURL:url delegate:self];
  154 +}
  155 +
  156 +- (BOOL)isBlankString:(NSString *)string{
  157 +
  158 + if (string == nil) {
  159 +
  160 + return YES;
  161 +
  162 + }
  163 +
  164 + if (string == NULL) {
  165 +
  166 + return YES;
  167 +
  168 + }
  169 +
  170 + if ([string isKindOfClass:[NSNull class]]) {
  171 +
  172 + return YES;
  173 +
  174 + }
  175 +
  176 + if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]==0) {
  177 +
  178 + return YES;
  179 +
  180 + }
  181 +
  182 + return NO;
  183 +
  184 +}
  185 +
  186 +- (void)onResp:(WWKBaseResp *)resp {
  187 + /*! @brief 所有通过sendReq发送的SDK请求的结果都在这个函数内部进行异步回调
  188 + * @param resp SDK处理请求后的返回结果 需要判断具体是哪项业务的回调
  189 + */
  190 + /* SSO的回调 */
  191 + if ([resp isKindOfClass:[WWKSSOResp class]]) {
  192 + WWKSSOResp *r = (WWKSSOResp *)resp;
  193 + NSMutableDictionary *mDic = [[NSMutableDictionary alloc]init];
  194 + if([self isBlankString:r.code]){
  195 + [mDic setObject:@"1" forKey:@"errCode"];
  196 + [mDic setObject:@"" forKey:@"code"];
  197 + }else{
  198 + [mDic setObject:@"0" forKey:@"errCode"];
  199 + [mDic setObject:r.code forKey:@"code"];
  200 + }
  201 + [mDic setObject:r.state forKey:@"state"];
  202 + authResult(mDic);
  203 + // [channel invokeMethod:@"auth" arguments:mDic];
  204 + }
  205 +
  206 +}
  207 +
  208 +
  209 +
  210 +@end
  1 +//
  2 +// WWKApi.h
  3 +// wxwork
  4 +//
  5 +// Created by WXWork on 16/5/25.
  6 +// Copyright © 2019年 Tencent. All rights reserved.
  7 +//
  8 +
  9 +#import <Foundation/Foundation.h>
  10 +#import <UIKit/UIKit.h>
  11 +#import "WWKApiObject.h"
  12 +
  13 +#pragma mark - WWKApiDelegate
  14 +/*! @brief 接收并处理来自企业微信终端程序的事件消息
  15 + *
  16 + * 接收并处理来自企业微信终端程序的事件消息,期间企业微信界面会切换到第三方应用程序。
  17 + * WWKApiDelegate 会在handleOpenURL:delegate:中使用并触发。
  18 + */
  19 +@protocol WWKApiDelegate <NSObject>
  20 +@optional
  21 +
  22 +// 企业微信展示对外名称.
  23 +typedef NS_ENUM(NSInteger, WWKDiplayNameType) {
  24 + WWKDefaultName = 0, // 企业微信
  25 + WWKLocalName = 1 // 政务微信
  26 +};
  27 +
  28 +/*! @brief 收到一个来自企业微信的请求,第三方应用程序处理完后调用sendResp向企业微信发送结果
  29 + *
  30 + * 收到一个来自企业微信的请求,异步处理完成后必须调用sendResp发送处理结果给企业微信。
  31 + * 目前并未使用。
  32 + * @param req 具体请求内容,是自动释放的
  33 + */
  34 +- (void)onReq:(WWKBaseReq *)req;
  35 +
  36 +/*! @brief 发送一个sendReq后,收到企业微信的回应
  37 + *
  38 + * 收到一个来自企业微信的处理结果。调用一次sendReq后会收到onResp。
  39 + * 可能收到的处理结果有WWKSendMessageResp等。
  40 + * @param resp 具体的回应内容,是自动释放的
  41 + */
  42 +- (void)onResp:(WWKBaseResp *)resp;
  43 +
  44 +/*! @brief SessionKey更新回调
  45 + *
  46 + * 需要设置updateSessionKeyIfNeeded:YES,并且满足企业微信sessionKey更新策略才会调用
  47 + * @param
  48 + */
  49 +- (void)onSessionKeyUpdate:(NSString *)newSessionKey;
  50 +@end
  51 +
  52 +
  53 +#pragma mark - WWKApi
  54 +
  55 +/*! @brief 企业微信Api接口函数类
  56 + *
  57 + * 该类封装了企业微信终端SDK的所有接口
  58 + */
  59 +@interface WWKApi : NSObject
  60 +
  61 +/*! @brief WWKApi的成员函数,向企业微信终端程序注册第三方应用。
  62 + *
  63 + * 需要在每次启动第三方应用程序时调用。第一次调用后,会在企业微信的可用应用列表中出现。
  64 + * iOS7及以上系统需要调起一次企业微信才会出现在企业微信的可用应用列表中。
  65 + * @attention 请保证在主线程中调用此函数
  66 + * @param appid 企业微信开发者ID
  67 + * @return 成功返回YES,失败返回NO。
  68 + */
  69 ++ (BOOL)registerApp:(NSString *)appid;
  70 +
  71 +/*! @brief WWKApi的成员函数,向企业微信终端程序注册第三方应用。
  72 + *
  73 + * 需要在每次启动第三方应用程序时调用。第一次调用后,会在企业微信的可用应用列表中出现。
  74 + * iOS7及以上系统需要调起一次企业微信才会出现在企业微信的可用应用列表中。
  75 + * @attention 请保证在主线程中调用此函数
  76 + * @param appid 第三方应用的appid
  77 + * @param scheme 当前app的scheme
  78 + * @return 成功返回YES,失败返回NO。
  79 + */
  80 ++ (BOOL)registerAppID:(NSString *)appid schema:(NSString *)schema;
  81 +
  82 +
  83 +
  84 +/*! @brief WWKApi的成员函数,向企业微信终端程序注册企业应用。
  85 + *
  86 + * 需要在每次启动第三方应用程序时调用。第一次调用后,会在企业微信的可用应用列表中出现。
  87 + * @see registerApp
  88 + * @param appid 企业微信开发者ID
  89 + * @param corpid 企业微信企业ID
  90 + * @param agentid 企业微信企业应用ID
  91 + * @return 成功返回YES,失败返回NO。
  92 + */
  93 ++ (BOOL)registerApp:(NSString *)appid corpId:(NSString *)corpid agentId:(NSString *)agentid;
  94 +
  95 +
  96 +/*! @brief 是否必要时更新sessionKey,默认为NO
  97 + *
  98 + * @param url 企业微信根据安全策略自动更新sessionKey,如果有更新,会触发onSessionKeyUpdate:回调
  99 + */
  100 ++ (void)updateSessionKeyIfNeeded:(BOOL)enable;
  101 +
  102 +/*! @brief 处理企业微信通过URL启动App时传递的数据
  103 + *
  104 + * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。
  105 + * @param url 企业微信启动第三方应用时传递过来的URL
  106 + * @param delegate WWKApiDelegate对象,用来接收企业微信触发的消息。
  107 + * @return 成功返回YES,失败返回NO。
  108 + */
  109 ++ (BOOL)handleOpenURL:(NSURL *)url delegate:(id<WWKApiDelegate>) delegate;
  110 +
  111 +
  112 +
  113 +/*! @brief 检查企业微信是否已被用户安装
  114 + *
  115 + * @return 企业微信已安装返回YES,未安装返回NO。
  116 + * @note 由于iOS系统的限制,在iOS9及以上系统检测企业微信是否安装,需要将企业微信的scheme"wxwork"(云端版本)及"wxworklocal"(本地部署版本)添加到工程的Info.plist中的LSApplicationQueriesSchemes白名单里,否则此方法总是会返回NO。
  117 + * 详情参考 https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl
  118 + */
  119 ++ (BOOL)isAppInstalled;
  120 +
  121 +
  122 +
  123 +/*! @brief 获取企业微信的itunes安装地址
  124 + *
  125 + * @return 企业微信的安装地址字符串。
  126 + */
  127 ++ (NSString *)getAppInstallUrl;
  128 +
  129 +
  130 +
  131 +/*! @brief 获取当前企业微信SDK的版本号
  132 + *
  133 + * @return 返回当前企业微信SDK的版本号
  134 + */
  135 ++ (NSString *)getApiVersion;
  136 +
  137 +
  138 +
  139 +/*! @brief 打开企业微信
  140 + *
  141 + * @return 成功返回YES,失败返回NO。
  142 + */
  143 ++ (BOOL)openApp;
  144 +
  145 +/*!
  146 + * @brief 启动登录流程。
  147 + * @param navigationController 当前页面的导航栏控制器
  148 + * @param state 第三方应用传入的值,登录成功后会透传给第三方应用
  149 + * @see WWKSSOReq
  150 + */
  151 ++ (void)startSSOLogin:(NSString *)state fromNavigationController:(UINavigationController *)navigationController;
  152 +
  153 +/*! @brief 发送请求到企业微信,等待企业微信返回onResp
  154 + *
  155 + * 函数调用后,会切换到企业微信的界面。第三方应用程序等待企业微信返回onResp。企业微信在异步处理完成后一定会调用onResp。支持以下类型
  156 + * WWKSendMessageReq等。
  157 + * @param req 具体的发送请求,在调用函数后,请自己释放。
  158 + * @return 成功返回YES,失败返回NO。
  159 + */
  160 ++ (BOOL)sendReq:(WWKBaseReq *)req;
  161 +
  162 +
  163 +
  164 +/*! @brief 收到企业微信onReq的请求,发送对应的应答给企业微信,并切换到企业微信界面
  165 + *
  166 + * 函数调用后,会切换到企业微信的界面。第三方应用程序收到企业微信onReq的请求,异步处理该请求,完成后必须调用该函数。
  167 + * 目前暂未使用
  168 + * @param resp 具体的应答内容,调用函数后,请自己释放
  169 + * @return 成功返回YES,失败返回NO。
  170 + */
  171 ++ (BOOL)sendResp:(WWKBaseResp *)resp;
  172 +
  173 +
  174 +/*! @brief 获取当前企业微信展示名称
  175 + *
  176 + * @return 返回当前企业微信展示名称
  177 + */
  178 ++ (WWKDiplayNameType)displayNameType;
  179 +
  180 +/*! @brief 设置登录态返回的sessionKey
  181 + *
  182 + */
  183 ++ (void)setSessionKey:(NSString *)sessionKey;
  184 +
  185 +/*! @brief 初始化OpenData
  186 +*
  187 +* @以block的形式返回成功或者失败
  188 +*/
  189 ++(void)initOpenData:(void (^)(BOOL isSucc))completion;
  190 +
  191 +/*! @brief 获取成员或者部门的详细信息
  192 +*
  193 +* @param 传入WWKOpenDataItem输入,SDK会获取部门或用户名并以block的形式返回
  194 +* 需要initOpenData返回成功后才能调用
  195 +* @see WWKOpenDataItem
  196 +*/
  197 ++(void)getOpenData:(NSArray<WWKOpenDataItem *> *)dataList completion:(void (^)(NSError *error,NSArray<WWKOpenDataItem *> *dataArray))completion;
  198 +@end
  1 +//
  2 +// WWKApiObject.h
  3 +// wxwork
  4 +//
  5 +// Created by WXWork on 16/5/25.
  6 +// Copyright © 2019年 Tencent. All rights reserved.
  7 +//
  8 +
  9 +#import <Foundation/Foundation.h>
  10 +
  11 +NS_ASSUME_NONNULL_BEGIN
  12 +
  13 +@class WWKBaseResp;
  14 +@protocol WWKApiSerializable <NSObject>
  15 +- (BOOL)deserializeWithDictionary:(NSDictionary *)dict;
  16 +@end
  17 +
  18 +@interface WWKBaseObject : NSObject
  19 +@property (nonatomic, copy) NSString *bundleID;
  20 +@property (nonatomic, copy) NSString *bundleName;
  21 +@property (nonatomic, assign) NSUInteger sequence;
  22 +@property (nonatomic, readonly, nullable) NSData *serializedData;
  23 +@property (nonatomic, readonly, nullable) NSMutableDictionary *serializedDict;
  24 ++ (instancetype)deserializeWithData:(NSData *)data appid:(NSString *)appid;
  25 +@end
  26 +
  27 +#pragma mark - WWKBaseReq
  28 +/*! @brief 该类为企业微信终端SDK所有请求类的基类
  29 + *
  30 + */
  31 +@interface WWKBaseReq : WWKBaseObject
  32 +- (WWKBaseResp *)respObj; // 对应返回的结构
  33 +@end
  34 +
  35 +
  36 +
  37 +#pragma mark - WWKBaseResp
  38 +
  39 +extern const int WWKBaseRespErrCodeOK; // 操作成功
  40 +extern const int WWKBaseRespErrCodeCancelled; // 操作被取消
  41 +extern const int WWKBaseRespErrCodeFailed; // 操作失败
  42 +extern const int WWKBaseRespErrCodeNotSupported; // 操作不支持(不能识别请求)
  43 +extern const int WWKBaseRespErrCodeLowAppVer; // 操作不支持(用户安装的App版本过低)
  44 +extern const int WWKBaseRespErrCodeNoPrivileges; // 没有此API的调用权限
  45 +extern const int WWKBaseRespErrCodeInvalidCall; // 调用出错(例如传入参数不正确)
  46 +extern const int WWKBaseRespErrCodeNetWork; // 网络出错(例如请求超时)
  47 +extern const int WWKBaseRespErrCodeSessonKeyTimeOut; // sessionkey超时
  48 +
  49 +/*! @brief 该类为企业微信终端SDK所有响应类的基类
  50 + *
  51 + */
  52 +@interface WWKBaseResp : WWKBaseObject
  53 +/** 错误码 */
  54 +@property (nonatomic, assign) int errCode;
  55 +/** 错误提示字符串 */
  56 +@property (nonatomic, retain, nullable) NSString *errStr;
  57 +@end
  58 +
  59 +#pragma mark - WWKSendMessageReq
  60 +
  61 +/*!
  62 + * @brief 带在 @c WWKSendMessageReq 中的消息对象基类。实际必须使用其子类
  63 + */
  64 +@interface WWKMessageAttachment : NSObject
  65 +@end
  66 +
  67 +/*!
  68 + * @brief 文本消息
  69 + */
  70 +@interface WWKMessageTextAttachment : WWKMessageAttachment
  71 +@property (nonatomic, copy) NSString *text;
  72 +@end
  73 +
  74 +/*!
  75 + * @brief 文件消息
  76 + */
  77 +@interface WWKMessageFileAttachment : WWKMessageAttachment
  78 +@property (nonatomic, copy) NSString *filename;
  79 +@property (nonatomic, copy, nullable) NSString *path;
  80 +@property (nonatomic, retain, nullable) NSData *data;
  81 +@end
  82 +
  83 +/*!
  84 + * @brief 图片消息
  85 + */
  86 +@interface WWKMessageImageAttachment : WWKMessageFileAttachment
  87 +@end
  88 +
  89 +/*!
  90 + * @brief 视频消息
  91 + */
  92 +@interface WWKMessageVideoAttachment : WWKMessageFileAttachment
  93 +@end
  94 +
  95 +/*!
  96 + * @brief 链接消息
  97 + */
  98 +@interface WWKMessageLinkAttachment : WWKMessageAttachment
  99 +@property (nonatomic, copy, nullable) NSString *title; // 不能超过512bytes
  100 +@property (nonatomic, copy, nullable) NSString *summary; // 不能超过1k
  101 +@property (nonatomic, copy, nullable) NSString *url;
  102 +@property (nonatomic, copy, nullable) NSString *iconurl;
  103 +@property (nonatomic, retain, nullable) NSData *icon; // 不能超过32K
  104 +// 是否使用带 shareTicket 的转发,只有注册了企业应用的agentid才有效;只能为单条转发,放在WWKMessageGroupAttachment中会被过滤
  105 +@property (nonatomic, assign) BOOL withShareTicket;
  106 +@property (nonatomic, copy, nullable) NSString *shareTicketState;
  107 +@end
  108 +
  109 +/*!
  110 + * @brief 小程序消息
  111 + */
  112 +@interface WWKMessageMiniAppAttachment : WWKMessageAttachment
  113 +@property (nonatomic, copy) NSString *userName; // 小程序username
  114 +@property (nonatomic, copy, nullable) NSString *path; // 小程序页面的路径
  115 +@property (nonatomic, strong, nullable) NSData *hdImageData; // 小程序预览图 不能超过128k
  116 +@property (nonatomic, copy, nullable) NSString *title; // 小程序 当前页title 不能超过512bytes
  117 +@end
  118 +
  119 +/*!
  120 + * @brief 位置消息
  121 + */
  122 +@interface WWKMessageLocationAttachment : WWKMessageAttachment
  123 +@property (nonatomic, copy, nullable) NSString *title;
  124 +@property (nonatomic, copy, nullable) NSString *address;
  125 +@property (nonatomic, assign) double lat;
  126 +@property (nonatomic, assign) double lng;
  127 +@property (nonatomic, assign) double zoom;
  128 +@end
  129 +
  130 +/*!
  131 + * @brief 单条聊天记录消息
  132 + */
  133 +@interface WWKMessageAttachmentWrapper : NSObject
  134 +@property (nonatomic, copy) NSString *name;
  135 +@property (nonatomic, copy) NSDate *date;
  136 +@property (nonatomic, copy, nullable) NSString *avatarUrl;
  137 +@property (nonatomic, copy, nullable) NSData *avatarData;
  138 +@property (nonatomic, retain) WWKMessageAttachment *attachment;
  139 +@end
  140 +
  141 +/*!
  142 + * @brief 聊天记录消息组
  143 + */
  144 +@interface WWKMessageGroupAttachment : WWKMessageAttachment
  145 +@property (nonatomic, copy) NSArray<WWKMessageAttachmentWrapper *> *contents;
  146 +@property (nonatomic, copy) NSString *title;
  147 +@end
  148 +
  149 +
  150 +typedef NS_ENUM(NSUInteger, WWKOpenIdType) {
  151 + WWKOpenIdTypeUnKnown = 0,
  152 + WWKOpenIdTypeUser, // 成员
  153 + WWKOpenIdTypeDepartment //部门
  154 +};
  155 +
  156 +@interface WWKOpenIdInfo : NSObject
  157 +@property (nonatomic, copy, nullable) NSString *openid;
  158 +@property (nonatomic, assign) WWKOpenIdType idType;
  159 +@end
  160 +
  161 +
  162 +/*! @brief 第三方程序发送消息至企业微信终端程序的消息结构体
  163 + *
  164 + * 第三方程序向企业微信发送信息需要传入WWKSendMessageReq结构体,信息类型包括文本消息和多媒体消息,
  165 + * 分别对应于text和message成员。调用该方法后,企业微信处理完信息会向第三方程序发送一个处理结果。
  166 + * @see WWKSendMessageResp
  167 + */
  168 +@interface WWKSendMessageReq : WWKBaseReq <WWKApiSerializable>
  169 +/** 发送消息的多媒体内容
  170 + * @see WWKMessageAttachment
  171 + */
  172 +@property (nonatomic, retain, nullable) WWKMessageAttachment *attachment;
  173 +
  174 +@end
  175 +
  176 +
  177 +
  178 +#pragma mark - WWKSendMessageResp
  179 +/*! @brief 企业微信终端向第三方程序返回的WWKSendMessageReq处理结果。
  180 + *
  181 + * 第三方程序向企业微信终端发送WWKSendMessageReq后,企业微信发送回来的处理结果,该结果用WWKSendMessageResp表示。
  182 + */
  183 +@interface WWKSendMessageResp : WWKBaseResp <WWKApiSerializable>
  184 +@end
  185 +
  186 +#pragma mark - WWKPickContactReq
  187 +/*! @brief 第三方程序从企业微信终端程序选人的消息结构体
  188 +*
  189 +* 本接口无需登录态,只能选择邮箱联系人。如果需要选择所有联系人,请使用WWKSelectContactReq接口
  190 +*
  191 +*
  192 +*/
  193 +@interface WWKPickContactReq : WWKBaseReq <WWKApiSerializable>
  194 +@property (nonatomic, copy) NSString *type;
  195 +@end
  196 +
  197 +#pragma mark - WWKPickContactResp
  198 +
  199 +@interface WWKContactInfo : NSObject
  200 +@property (nonatomic, copy) NSString *name;
  201 +@property (nonatomic, copy, nullable) NSString *email;
  202 +@end
  203 +
  204 +@interface WWKPickContactResp : WWKBaseResp <WWKApiSerializable>
  205 +@property (nonatomic, retain, nullable) NSArray<WWKContactInfo *> *contacts;
  206 +@end
  207 +
  208 +#pragma mark - WWKOpenConversationReq
  209 +
  210 +@interface WWKOpenConversationReq : WWKBaseReq <WWKApiSerializable>
  211 +@property (nonatomic, assign) uint64_t conversationType;
  212 +@property (nonatomic, assign) uint64_t conversationId;
  213 +@end
  214 +
  215 +#pragma mark - WWKOpenConversationResp
  216 +
  217 +@interface WWKOpenConversationResp : WWKBaseResp <WWKApiSerializable>
  218 +@end
  219 +
  220 +#pragma mark - WWKSSOReq
  221 +
  222 +@interface WWKSSOReq : WWKBaseReq <WWKApiSerializable>
  223 +@property (nonatomic, copy) NSString *state;
  224 +@end
  225 +
  226 +@interface WWKSSOResp : WWKBaseResp <WWKApiSerializable>
  227 +@property (nonatomic, retain, nullable) NSString *state;
  228 +@property (nonatomic, retain, nullable) NSString *code;
  229 +@end
  230 +
  231 +
  232 +
  233 +/*! @brief 第三方程序创建群聊并发送消息至企业微信终端程序的消息结构体(需登录态)
  234 + *
  235 + * 第三方程序向企业微信发送信息需要传入WWKSendMessageReq结构体,创建群聊成员的openid列表
  236 + * (只支持成员,不支持部门),当前登录态返回的openUserid,信息类型包括文本消息和多媒体消息,
  237 + * 分别对应于text和message成员。调用该方法后,企业微信处理完信息会向第三方程序发送一个处理结果。
  238 + * @see WWKOpenChatWithMessageResp
  239 + */
  240 +@interface WWKOpenChatWithMessageReq : WWKBaseReq <WWKApiSerializable>
  241 +/** 发送消息的多媒体内容
  242 + * @see WWKMessageAttachment
  243 + */
  244 +@property (nonatomic, retain, nullable) WWKMessageAttachment *attachment;
  245 +
  246 +/** 发送消息的到新创建的群聊
  247 +* 暂不支持传入部门信息
  248 +*/
  249 +@property (nonatomic, retain, nullable) NSArray<NSString *> *userOpenidList;
  250 +
  251 +/**
  252 +* 从后台登录获取的openUserid
  253 +*/
  254 +@property (nonatomic, retain, nullable) NSString *openUserid;
  255 +@end
  256 +
  257 +
  258 +
  259 +#pragma mark - WWKOpenChatWithMessageResp
  260 +/*! @brief 企业微信终端向第三方程序返回的WWKOpenChatWithMessageReq处理结果。
  261 + *
  262 + * 第三方程序向企业微信终端发送WWKOpenChatWithMessageReq后,企业微信发送回来的处理结果,该结果用WWKOpenChatWithMessageResp表示。
  263 + */
  264 +@interface WWKOpenChatWithMessageResp : WWKBaseResp <WWKApiSerializable>
  265 +@end
  266 +
  267 +
  268 +
  269 +
  270 +#pragma mark - WWKSelectContactReq
  271 +/*! @brief 第三方程序从企业微信终端程序选人的消息结构体(需登录态)
  272 +*
  273 +* 第三方程序向企业微信发送信息需要传入当前登录态返回的openUserid。调用该方法后,企业微信调起选人流程,结束后会向第三方程序发送一个处理结果。
  274 +* @see WWKSelectContactResp
  275 +*/
  276 +@interface WWKSelectContactReq : WWKBaseReq <WWKApiSerializable>
  277 +/**
  278 +* 从后台登录获取的openUserid,必须填写这个字段
  279 +*/
  280 +@property (nonatomic, retain) NSString *openUserid;
  281 +@end
  282 +
  283 +#pragma mark - WWKSelectContactResp
  284 +
  285 +/*! @brief 选人回包
  286 +*
  287 +* 从这个接口返回的数据不会带人名或部门名,需要调用getOpenData接口获取名字等详细信息
  288 +* 目前仅支持选择成员,暂不支持选择部门
  289 +*/
  290 +@interface WWKSelectContactResp : WWKBaseResp <WWKApiSerializable>
  291 +@property (nonatomic, retain, nullable) NSArray<WWKOpenIdInfo *> *openids;
  292 +@end
  293 +
  294 +/*! @brief getOpenData接口使用的结构
  295 +* @param openid 部门或成员openid信息
  296 +* @param type 需要查询的类型,目前仅支持userName(用户名称)、userDepartment(用户主部门名称)以及userGender(用户性别)、departmentName(部门名称),其中userName、userDepartment、userGender在openid为用成员时有效,departmentName在openid为部门时有效
  297 +* @param data 传入时不需要填写,getOpenData返回会填充该字段
  298 +*/
  299 +@interface WWKOpenDataItem : NSObject
  300 +@property (nonatomic, copy) NSString *openid;
  301 +@property (nonatomic, copy) NSString *type;
  302 +@property (nonatomic, copy, nullable) NSString *data;
  303 +@end
  304 +
  305 +
  306 +#pragma mark - WWKSelectPrivilegedContactReq
  307 +/*! @brief 第三方程序从企业微信终端程序选人的消息结构体(需登录态)
  308 +*
  309 +* 选择范围限定为企业通讯录
  310 +* 只支持成员,若勾选部门,则对应展开勾选部门下的成员。
  311 +* 与WWKSelectContactReq接口的区分是,返回的选择范围,需要经过第三方权限过滤。只返回在可见范围的列表,而完整的列表存在ticket给第三方,用于jsapi/api接口调用。
  312 +* @see WWKSelectPrivilegedContactResp
  313 +*/
  314 +@interface WWKSelectPrivilegedContactReq : WWKBaseReq <WWKApiSerializable>
  315 +/**
  316 +* 从后台登录获取的loginOpenUserid,必须填写这个字段
  317 +* selectedOpenUserIds 预选用户openUserId列表
  318 +* selectedTickets 预选ticket列表
  319 +*/
  320 +@property (nonatomic, copy) NSString *loginOpenUserid;
  321 +@property (nonatomic, copy) NSArray<NSString *> *selectedOpenUserIds;
  322 +@property (nonatomic, copy) NSArray<NSString *> *selectedTickets;
  323 +@end
  324 +
  325 +#pragma mark - WWKSelectPrivilegedContactResp
  326 +
  327 +/*! @brief 选人回包
  328 +*
  329 +* openUserIdList 返回openid的列表
  330 +* selectedTicket 选择的集合Ticket,用于对该选择集合操作的调用凭证。
  331 +* expiresIn selectedTicket的有效期,单位为秒
  332 +* selectedUserCount 选择的集合Ticket包含的用户数
  333 +*/
  334 +@interface WWKSelectPrivilegedContactResp : WWKBaseResp <WWKApiSerializable>
  335 +@property (nonatomic, copy) NSArray<NSString *> *openUserIdList;
  336 +@property (nonatomic, copy) NSString *selectedTicket;
  337 +@property (nonatomic, assign) uint32_t expiresIn;
  338 +@property (nonatomic, assign) uint32_t selectedUserCount;
  339 +
  340 +@end
  341 +
  342 +
  343 +
  344 +#pragma mark - WWKCreateChatWithMsgReq
  345 +/*! @brief 新建群聊发消息(需登录态)
  346 +*
  347 +* 选人范围包括企业通讯录和外部联系人。
  348 +* 支持用户传入openUserId,和selectedTicket
  349 +* @see WWKCreateChatWithMsgResp
  350 +*/
  351 +@interface WWKCreateChatWithMsgReq : WWKBaseReq <WWKApiSerializable>
  352 +/**
  353 +* loginOpenUserid 从后台登录获取的loginOpenUserid,必须填写这个字段
  354 +* selectedOpenUserIdList 创建会话的企业通讯录成员信息,格式为字符串,内容为成员的openid列表(可以从WWKSelectPrivilegedContactResp获取),限定必须为应用的可见范围内。列表最多2000项。
  355 +* selectedTicketList 已选择的成员集合凭证列表,(可以从WWKSelectPrivilegedContactResp获取)。列表最多10个。
  356 +* attachment 消息内容结构体,支持文本、文件、图片、视频、链接、聊天内容,参考WWKMessageAttachment
  357 +* chatName 群聊名称
  358 +* state 透传参数,最长256,用于回调第三方应用创建群聊事件
  359 +*
  360 +*/
  361 +
  362 +@property (nonatomic, copy) NSString *loginOpenUserid;
  363 +@property (nonatomic, copy) NSArray<NSString *> *selectedOpenUserIdList;
  364 +@property (nonatomic, copy) NSArray<NSString *> *selectedTicketList;
  365 +@property (nonatomic, retain) WWKMessageAttachment *attachment;
  366 +@property (nonatomic, copy, nullable) NSString *chatName;
  367 +@property (nonatomic, copy, nullable) NSString *state;
  368 +@end
  369 +
  370 +#pragma mark - WWKCreateChatWithMsgResp
  371 +
  372 +/*! @brief 新建群聊发消息回包
  373 +*
  374 +* errorCode 错误码
  375 +* errorMsg 错误码描述
  376 +* chatId 若创建群成功,返回群ID
  377 +*/
  378 +@interface WWKCreateChatWithMsgResp : WWKBaseResp <WWKApiSerializable>
  379 +@property (nonatomic, copy, nullable) NSString *chatId;
  380 +@end
  381 +
  382 +
  383 +
  384 +#pragma mark - WWKOpenExistedChatWithMsgReq
  385 +/*! @brief 打开群聊发消息(需登录态)
  386 +*/
  387 +@interface WWKOpenExistedChatWithMsgReq : WWKBaseReq <WWKApiSerializable>
  388 +/**
  389 +* loginOpenUserid 从后台登录获取的loginOpenUserid,必须填写这个字段
  390 +* attachment 消息内容结构体,支持文本、文件、图片、视频、链接、聊天内容,参考WWKMessageAttachment attachment为可选。若不传参数,则无消息发送确认行为。
  391 +* chatId 打开群聊ID,chatId必须是当前用户所在的群聊
  392 +*
  393 +*/
  394 +
  395 +@property (nonatomic, copy) NSString *loginOpenUserid;
  396 +@property (nonatomic, retain, nullable) WWKMessageAttachment *attachment;
  397 +@property (nonatomic, copy) NSString *chatId;
  398 +@end
  399 +
  400 +#pragma mark - WWKOpenExistedChatWithMsgResp
  401 +
  402 +/*! @brief 打开群聊发消息回包
  403 +*
  404 +* errorCode 错误码
  405 +* errorMsg 错误码描述
  406 +*/
  407 +@interface WWKOpenExistedChatWithMsgResp : WWKBaseResp <WWKApiSerializable>
  408 +@end
  409 +
  410 +
  411 +NS_ASSUME_NONNULL_END
  1 +#
  2 +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
  3 +# Run `pod lib lint flutter_wxwork.podspec` to validate before publishing.
  4 +#
  5 +Pod::Spec.new do |s|
  6 + s.name = 'flutter_wxwork'
  7 + s.version = '0.0.1'
  8 + s.summary = 'A new Flutter plugin project.'
  9 + s.description = <<-DESC
  10 +A new Flutter plugin project.
  11 + DESC
  12 + s.homepage = 'http://example.com'
  13 + s.license = { :file => '../LICENSE' }
  14 + s.author = { 'Your Company' => 'email@example.com' }
  15 + s.source = { :path => '.' }
  16 + s.source_files = 'Classes/**/*'
  17 + s.public_header_files = 'Classes/**/*.h'
  18 + s.dependency 'Flutter'
  19 + s.platform = :ios, '9.0'
  20 + # s.dependency 'Classes/libWXWorkApi.a'
  21 + s.vendored_libraries = 'Classes/libWXWorkApi.a'
  22 + # 依赖的第三方库用到了静态库,还需要添加:
  23 + # s.static_framework = true
  24 +
  25 +
  26 + # Flutter.framework does not contain a i386 slice.
  27 + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
  28 +end
  1 +import 'package:flutter_wxwork/flutter_wxwork_method_channel.dart';
  2 +
  3 +import 'flutter_wxwork_platform_interface.dart';
  4 +
  5 +class FlutterWxwork {
  6 + Future<String?> getPlatformVersion() {
  7 + return FlutterWxworkPlatform.instance.getPlatformVersion();
  8 + }
  9 +
  10 + Future<bool?> registerApp(scheme, corpId, agentId) {
  11 + return FlutterWxworkPlatform.instance.registerApp(scheme, corpId, agentId);
  12 + }
  13 +
  14 + Future<AuthModel?> auth({String state = 'state'}) async {
  15 + return FlutterWxworkPlatform.instance.auth();
  16 + }
  17 +
  18 + Future<String?> isAppInstalled() {
  19 + return FlutterWxworkPlatform.instance.isAppInstalled();
  20 + }
  21 +
  22 + Future<bool?> shareImage() {
  23 + return FlutterWxworkPlatform.instance.shareImage();
  24 + }
  25 +
  26 + Future<bool?> shareMiniProgram(
  27 + {String? userName, //必须是应用关联的小程序,注意要有@app后缀
  28 + String? path,
  29 + String? hdImageData,
  30 + String title = "分享标题"}) {
  31 + return FlutterWxworkPlatform.instance.shareMiniProgram();
  32 + }
  33 +}
  1 +import 'dart:convert';
  2 +
  3 +import 'package:flutter/foundation.dart';
  4 +import 'package:flutter/services.dart';
  5 +
  6 +import 'flutter_wxwork_platform_interface.dart';
  7 +
  8 +/// An implementation of [FlutterWxworkPlatform] that uses method channels.
  9 +class MethodChannelFlutterWxwork extends FlutterWxworkPlatform {
  10 + /// The method channel used to interact with the native platform.
  11 + @visibleForTesting
  12 + final methodChannel = const MethodChannel('flutter_wxwork');
  13 +
  14 + @override
  15 + Future<String?> getPlatformVersion() async {
  16 + final version =
  17 + await methodChannel.invokeMethod<String>('getPlatformVersion');
  18 + return version;
  19 + }
  20 +
  21 + @override
  22 + Future<bool?> registerApp(scheme, corpId, agentId) async {
  23 + String? result =
  24 + await methodChannel.invokeMethod<String>('register', <String, String>{
  25 + 'scheme': scheme,
  26 + 'corpId': corpId,
  27 + 'agentId': agentId,
  28 + });
  29 + return _stringToBool(result);
  30 + }
  31 +
  32 + @override
  33 + Future<String?> isAppInstalled() async {
  34 + final isAppInstalled =
  35 + await methodChannel.invokeMethod<String>('isAppInstalled');
  36 + return isAppInstalled;
  37 + }
  38 +
  39 + @override
  40 + Future<bool?> shareImage() async {
  41 + final shareImage = await methodChannel.invokeMethod<bool>('shareImage');
  42 + return shareImage;
  43 + }
  44 +
  45 + @override
  46 + Future<bool?> shareMiniProgram(
  47 + {String? userName, //必须是应用关联的小程序,注意要有@app后缀
  48 + String? path,
  49 + String? hdImageData,
  50 + String title = "分享标题"}) async {
  51 + final shareMiniProgram =
  52 + await methodChannel.invokeMethod<bool>('shareMiniProgram');
  53 + return shareMiniProgram;
  54 + }
  55 +
  56 + @override
  57 + Future<AuthModel?> auth({String state = 'state'}) async {
  58 + var content = await methodChannel.invokeMethod('auth', {"state": state});
  59 + return AuthModel.fromJson(Map<String, dynamic>.from(content));
  60 + }
  61 +
  62 + bool _stringToBool(String? string) {
  63 + if (string == '1') {
  64 + return true;
  65 + } else {
  66 + return false;
  67 + }
  68 + }
  69 +}
  70 +
  71 +class AuthModel {
  72 + /// 1.取消 0.成功 2.失败
  73 + String? errCode;
  74 + String? code;
  75 + String? state;
  76 +
  77 + bool get isSuccess => errCode == '1';
  78 + AuthModel();
  79 +
  80 + factory AuthModel.fromJson(Map<String, dynamic> json) {
  81 + AuthModel model = AuthModel();
  82 + model.errCode = json['errCode'];
  83 + model.code = json['code'];
  84 + model.state = json['state'];
  85 + return model;
  86 + }
  87 +
  88 + Map<String, dynamic> toJson() {
  89 + return {'errorCode': errCode, 'code': code, 'state': state};
  90 + }
  91 +
  92 + @override
  93 + String toString() {
  94 + return jsonEncode(this);
  95 + }
  96 +}
  1 +import 'package:plugin_platform_interface/plugin_platform_interface.dart';
  2 +
  3 +import 'flutter_wxwork_method_channel.dart';
  4 +
  5 +abstract class FlutterWxworkPlatform extends PlatformInterface {
  6 + /// Constructs a FlutterWxworkPlatform.
  7 + FlutterWxworkPlatform() : super(token: _token);
  8 +
  9 + static final Object _token = Object();
  10 +
  11 + static FlutterWxworkPlatform _instance = MethodChannelFlutterWxwork();
  12 +
  13 + /// The default instance of [FlutterWxworkPlatform] to use.
  14 + ///
  15 + /// Defaults to [MethodChannelFlutterWxwork].
  16 + static FlutterWxworkPlatform get instance => _instance;
  17 +
  18 + /// Platform-specific implementations should set this with their own
  19 + /// platform-specific class that extends [FlutterWxworkPlatform] when
  20 + /// they register themselves.
  21 + static set instance(FlutterWxworkPlatform instance) {
  22 + PlatformInterface.verifyToken(instance, _token);
  23 + _instance = instance;
  24 + }
  25 +
  26 + Future<String?> getPlatformVersion() {
  27 + throw UnimplementedError('platformVersion() has not been implemented.');
  28 + }
  29 +
  30 + Future<bool?> registerApp(scheme, corpId, agentId) {
  31 + throw UnimplementedError('registerApp() has not been implemented.');
  32 + }
  33 +
  34 + Future<String?> isAppInstalled() {
  35 + throw UnimplementedError('isAppInstalled() has not been implemented.');
  36 + }
  37 +
  38 + Future<bool?> shareImage() {
  39 + throw UnimplementedError('shareImage() has not been implemented.');
  40 + }
  41 +
  42 + Future<AuthModel?> auth() {
  43 + throw UnimplementedError('auth() has not been implemented.');
  44 + }
  45 +
  46 +
  47 +
  48 + Future<bool?> shareMiniProgram() {
  49 + throw UnimplementedError('shareMiniProgram() has not been implemented.');
  50 + }
  51 +}
  1 +name: flutter_wxwork
  2 +description: A new Flutter plugin project.
  3 +version: 0.0.1
  4 +homepage:
  5 +
  6 +environment:
  7 + sdk: '>=2.18.2 <3.0.0'
  8 + flutter: ">=2.5.0"
  9 +
  10 +dependencies:
  11 + flutter:
  12 + sdk: flutter
  13 + plugin_platform_interface: ^2.0.2
  14 +
  15 +dev_dependencies:
  16 + flutter_test:
  17 + sdk: flutter
  18 + flutter_lints: ^2.0.0
  19 +
  20 +# For information on the generic Dart part of this file, see the
  21 +# following page: https://dart.dev/tools/pub/pubspec
  22 +
  23 +# The following section is specific to Flutter packages.
  24 +flutter:
  25 + # This section identifies this Flutter project as a plugin project.
  26 + # The 'pluginClass' specifies the class (in Java, Kotlin, Swift, Objective-C, etc.)
  27 + # which should be registered in the plugin registry. This is required for
  28 + # using method channels.
  29 + # The Android 'package' specifies package in which the registered class is.
  30 + # This is required for using method channels on Android.
  31 + # The 'ffiPlugin' specifies that native code should be built and bundled.
  32 + # This is required for using `dart:ffi`.
  33 + # All these are used by the tooling to maintain consistency when
  34 + # adding or updating assets for this project.
  35 + plugin:
  36 + platforms:
  37 + android:
  38 + package: com.wxwork.flutter_wxwork
  39 + pluginClass: FlutterWxworkPlugin
  40 + ios:
  41 + pluginClass: FlutterWxworkPlugin
  42 +
  43 + # To add assets to your plugin package, add an assets section, like this:
  44 + # assets:
  45 + # - images/a_dot_burr.jpeg
  46 + # - images/a_dot_ham.jpeg
  47 + #
  48 + # For details regarding assets in packages, see
  49 + # https://flutter.dev/assets-and-images/#from-packages
  50 + #
  51 + # An image asset can refer to one or more resolution-specific "variants", see
  52 + # https://flutter.dev/assets-and-images/#resolution-aware
  53 +
  54 + # To add custom fonts to your plugin package, add a fonts section here,
  55 + # in this "flutter" section. Each entry in this list should have a
  56 + # "family" key with the font family name, and a "fonts" key with a
  57 + # list giving the asset and other descriptors for the font. For
  58 + # example:
  59 + # fonts:
  60 + # - family: Schyler
  61 + # fonts:
  62 + # - asset: fonts/Schyler-Regular.ttf
  63 + # - asset: fonts/Schyler-Italic.ttf
  64 + # style: italic
  65 + # - family: Trajan Pro
  66 + # fonts:
  67 + # - asset: fonts/TrajanPro.ttf
  68 + # - asset: fonts/TrajanPro_Bold.ttf
  69 + # weight: 700
  70 + #
  71 + # For details regarding fonts in packages, see
  72 + # https://flutter.dev/custom-fonts/#from-packages
  1 +import 'package:flutter/services.dart';
  2 +import 'package:flutter_test/flutter_test.dart';
  3 +import 'package:flutter_wxwork/flutter_wxwork_method_channel.dart';
  4 +
  5 +void main() {
  6 + MethodChannelFlutterWxwork platform = MethodChannelFlutterWxwork();
  7 + const MethodChannel channel = MethodChannel('flutter_wxwork');
  8 +
  9 + TestWidgetsFlutterBinding.ensureInitialized();
  10 +
  11 + setUp(() {
  12 + channel.setMockMethodCallHandler((MethodCall methodCall) async {
  13 + return '42';
  14 + });
  15 + });
  16 +
  17 + tearDown(() {
  18 + channel.setMockMethodCallHandler(null);
  19 + });
  20 +
  21 + test('getPlatformVersion', () async {
  22 + expect(await platform.getPlatformVersion(), '42');
  23 + });
  24 +}
  1 +// import 'package:flutter_test/flutter_test.dart';
  2 +// import 'package:flutter_wxwork/flutter_wxwork.dart';
  3 +// import 'package:flutter_wxwork/flutter_wxwork_platform_interface.dart';
  4 +// import 'package:flutter_wxwork/flutter_wxwork_method_channel.dart';
  5 +// import 'package:plugin_platform_interface/plugin_platform_interface.dart';
  6 +
  7 +// class MockFlutterWxworkPlatform
  8 +// with MockPlatformInterfaceMixin
  9 +// implements FlutterWxworkPlatform {
  10 +
  11 +// @override
  12 +// Future<String?> getPlatformVersion() => Future.value('42');
  13 +// }
  14 +
  15 +// void main() {
  16 +// final FlutterWxworkPlatform initialPlatform = FlutterWxworkPlatform.instance;
  17 +
  18 +// test('$MethodChannelFlutterWxwork is the default instance', () {
  19 +// expect(initialPlatform, isInstanceOf<MethodChannelFlutterWxwork>());
  20 +// });
  21 +
  22 +// test('getPlatformVersion', () async {
  23 +// FlutterWxwork flutterWxworkPlugin = FlutterWxwork();
  24 +// MockFlutterWxworkPlatform fakePlatform = MockFlutterWxworkPlatform();
  25 +// FlutterWxworkPlatform.instance = fakePlatform;
  26 +
  27 +// expect(await flutterWxworkPlugin.getPlatformVersion(), '42');
  28 +// });
  29 +// }
@@ -77,7 +77,7 @@ packages: @@ -77,7 +77,7 @@ packages:
77 name: audioplayers 77 name: audioplayers
78 url: "https://pub.flutter-io.cn" 78 url: "https://pub.flutter-io.cn"
79 source: hosted 79 source: hosted
80 - version: "4.1.0" 80 + version: "4.0.1"
81 audioplayers_android: 81 audioplayers_android:
82 dependency: transitive 82 dependency: transitive
83 description: 83 description:
@@ -679,6 +679,13 @@ packages: @@ -679,6 +679,13 @@ packages:
679 description: flutter 679 description: flutter
680 source: sdk 680 source: sdk
681 version: "0.0.0" 681 version: "0.0.0"
  682 + flutter_wxwork:
  683 + dependency: "direct main"
  684 + description:
  685 + path: "library/flutter_wxwork"
  686 + relative: true
  687 + source: path
  688 + version: "0.0.1"
682 fluttertoast: 689 fluttertoast:
683 dependency: "direct main" 690 dependency: "direct main"
684 description: 691 description:
@@ -1383,7 +1390,7 @@ packages: @@ -1383,7 +1390,7 @@ packages:
1383 name: synchronized 1390 name: synchronized
1384 url: "https://pub.flutter-io.cn" 1391 url: "https://pub.flutter-io.cn"
1385 source: hosted 1392 source: hosted
1386 - version: "3.0.0+2" 1393 + version: "3.1.0"
1387 table_calendar: 1394 table_calendar:
1388 dependency: "direct main" 1395 dependency: "direct main"
1389 description: 1396 description:
@@ -1611,5 +1618,5 @@ packages: @@ -1611,5 +1618,5 @@ packages:
1611 source: hosted 1618 source: hosted
1612 version: "3.1.1" 1619 version: "3.1.1"
1613 sdks: 1620 sdks:
1614 - dart: ">=2.18.0 <3.0.0" 1621 + dart: ">=2.18.2 <3.0.0"
1615 flutter: ">=3.3.0" 1622 flutter: ">=3.3.0"
@@ -208,6 +208,8 @@ dependencies: @@ -208,6 +208,8 @@ dependencies:
208 path: library/sendsms-1.0.3 208 path: library/sendsms-1.0.3
209 device_utils_my: 209 device_utils_my:
210 path: library/device_utils_my 210 path: library/device_utils_my
  211 + flutter_wxwork:
  212 + path: library/flutter_wxwork
211 #联系人索引 213 #联系人索引
212 azlistview: ^2.0.0 214 azlistview: ^2.0.0
213 # wechat_assets_picker: ^6.0.6 215 # wechat_assets_picker: ^6.0.6
@@ -244,6 +246,7 @@ dependencies: @@ -244,6 +246,7 @@ dependencies:
244 # 生成excel 246 # 生成excel
245 excel: ^3.0.0 247 excel: ^3.0.0
246 # workmanager: ^0.5.1 248 # workmanager: ^0.5.1
  249 + # flutter_wxwork: ^0.0.3
247 250
248 251
249 252