@wlydfe/flutter-bridge 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/.babelrc +8 -0
  2. package/README.md +0 -0
  3. package/assets/main.css +166 -0
  4. package/assets/vconsole.min.js +10 -0
  5. package/index.html +150 -0
  6. package/lib/index.js +215 -0
  7. package/lib/index.js.map +1 -0
  8. package/lib/index.umd.js +222 -0
  9. package/lib/index.umd.js.map +1 -0
  10. package/lib/src/api/chooseImage.d.ts +14 -0
  11. package/lib/src/api/getLocation.d.ts +8 -0
  12. package/lib/src/api/index.d.ts +8 -0
  13. package/lib/src/api/login.d.ts +8 -0
  14. package/lib/src/api/navigateBack.d.ts +2 -0
  15. package/lib/src/api/navigateTo.d.ts +6 -0
  16. package/lib/src/api/previewImage.d.ts +14 -0
  17. package/lib/src/api/wxShare.d.ts +7 -0
  18. package/lib/src/core/bridgeCore.d.ts +2 -0
  19. package/lib/src/index.d.ts +1 -0
  20. package/lib/src/types/index.d.ts +5 -0
  21. package/lib/types/src/api/chooseImage.d.ts +14 -0
  22. package/lib/types/src/api/getLocation.d.ts +8 -0
  23. package/lib/types/src/api/index.d.ts +8 -0
  24. package/lib/types/src/api/login.d.ts +8 -0
  25. package/lib/types/src/api/navigateBack.d.ts +2 -0
  26. package/lib/types/src/api/navigateTo.d.ts +6 -0
  27. package/lib/types/src/api/previewImage.d.ts +14 -0
  28. package/lib/types/src/api/wxShare.d.ts +7 -0
  29. package/lib/types/src/core/bridgeCore.d.ts +2 -0
  30. package/lib/types/src/index.d.ts +1 -0
  31. package/lib/types/src/types/index.d.ts +5 -0
  32. package/log.md +4 -0
  33. package/package.json +42 -0
  34. package/rollup.config.dev.js +26 -0
  35. package/rollup.config.js +45 -0
  36. package/src/api/chooseImage.ts +27 -0
  37. package/src/api/getLocation.ts +21 -0
  38. package/src/api/index.ts +9 -0
  39. package/src/api/login.ts +19 -0
  40. package/src/api/navigateBack.ts +16 -0
  41. package/src/api/navigateTo.ts +18 -0
  42. package/src/api/previewImage.ts +27 -0
  43. package/src/api/wxShare.ts +19 -0
  44. package/src/core/bridgeCore.ts +65 -0
  45. package/src/index.ts +14 -0
  46. package/src/types/index.ts +5 -0
  47. package/tsconfig.json +19 -0
package/index.html ADDED
@@ -0,0 +1,150 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>H5</title>
7
+ <!-- 引入样式文件 -->
8
+ <link rel="stylesheet" href="./assets/main.css">
9
+ </head>
10
+ <body>
11
+ <div class="nav">
12
+ <div>H5</div>
13
+ </div>
14
+
15
+ <div class="container">
16
+ <div class="desc">
17
+ 当前页面为纯 H5,不依赖 uni-app runtime。<br />
18
+ 所有能力通过 Flutter 容器提供。
19
+ </div>
20
+
21
+ <!-- 当前生命周期状态卡片 -->
22
+ <div class="status-card">
23
+ <div class="label">生命周期当前状态:</div>
24
+ <div class="current-status" id="currentStatus">等待接收事件...</div>
25
+ </div>
26
+
27
+ <!-- 生命周期日志列表 -->
28
+ <div class="log-title">生命周期事件日志</div>
29
+ <div class="log-list" id="logList"></div>
30
+
31
+ <!-- 功能按钮 -->
32
+
33
+ <div class="btn" onclick="getLocation()">定位,获取经纬度</div>
34
+ <div class="btn" onclick="chooseImage()">选择照片,上传,展示</div>
35
+
36
+ <!-- 图片预览区域 -->
37
+ <div id="imageContainer">
38
+ <img id="imagePreview" style="width:200px;height:auto;" />
39
+ </div>
40
+
41
+ <!-- 更多功能按钮 -->
42
+ <div class="btn" onclick="previewImage()">预览图片</div>
43
+ <div class="btn" onclick="login()">登录</div>
44
+ <div class="btn" onclick="navigateTo('/freightDetail',{'orderId':'CHDD20241012000000144273'})">路由跳转-货源详情</div>
45
+ <div class="btn" onclick="wxShare()">分享</div>
46
+ <div class="btn" onclick="goBack()">返回</div>
47
+
48
+ <!-- Toast测试按钮 -->
49
+ <!-- <button class="btn" id="toastTestBtn">点击展示测试Toast</button> -->
50
+
51
+ <!-- Toast容器(全局唯一) -->
52
+ <div class="toast" id="toast"></div>
53
+
54
+ <div class="desc"> Debug 信息:</div>
55
+ <!-- 调试信息区域 -->
56
+ <pre id="debug" style="
57
+ white-space: pre-wrap;
58
+ word-break: break-all;
59
+ background: #000;
60
+ color: #0f0;
61
+ padding: 8px;
62
+ font-size: 12px;">
63
+ </pre>
64
+ </div>
65
+ <script src="./assets/vconsole.min.js"></script>
66
+ <script>
67
+ new VConsole();
68
+ </script>
69
+ <!-- 引入核心桥接逻辑 -->
70
+ <script src="./lib/index.js"></script>
71
+ <script>
72
+ function getLocation() {
73
+ uni.getLocation({
74
+ success: (result) => {
75
+ console.log('获取定位成功', result);
76
+ },
77
+ fail: (err) => {
78
+ console.log('获取定位失败', err);
79
+ },
80
+ complete: () => {
81
+ console.log('获取定位完成');
82
+ }
83
+ });
84
+ }
85
+
86
+ function chooseImage() {
87
+ uni.chooseImage({
88
+ count: 3,
89
+ sizeType: ['original', 'compressed'],
90
+ sourceType: ['album', 'camera'],
91
+ success: (result) => {
92
+ console.log('选择图片成功', result);
93
+ },
94
+ fail: (err) => {
95
+ console.log('选择图片失败', err);
96
+ // alert('选择图片失败');
97
+ },
98
+ complete: () => {
99
+ console.log('选择图片完成');
100
+ // alert('选择图片完成');
101
+ }
102
+ });
103
+ }
104
+
105
+ function previewImage() {
106
+ uni.previewImage({
107
+ urls: ['https://assets.wanlianyida.com/owner/img/notice.jpg', 'https://assets.wanlianyida.com/owner/img/notice.jpg'],
108
+ success: () => {
109
+ // alert('图片预览成功');
110
+ console.log('图片预览成功');
111
+ },
112
+ fail: () => {
113
+ console.log('图片预览失败', err);
114
+ // alert('图片预览失败');
115
+ },
116
+ complete: () => {
117
+ // alert('图片预览完成');
118
+ }
119
+ });
120
+ }
121
+
122
+ function login() {
123
+ uni.login({
124
+ success: (result) => {
125
+ console.log('登录成功', result);
126
+ }
127
+ });
128
+ }
129
+
130
+ function navigateTo(route, params) {
131
+ uni.navigateTo({
132
+ url: route,
133
+ params: params
134
+ });
135
+ }
136
+
137
+ function wxShare() {
138
+ uni.wxShare({
139
+ title: '分享标题',
140
+ url: location.href,
141
+ shareType: ['appMessage'],
142
+ });
143
+ }
144
+
145
+ function goBack() {
146
+ uni.navigateBack();
147
+ }
148
+ </script>
149
+ </body>
150
+ </html>
package/lib/index.js ADDED
@@ -0,0 +1,215 @@
1
+ /******************************************************************************
2
+ Copyright (c) Microsoft Corporation.
3
+
4
+ Permission to use, copy, modify, and/or distribute this software for any
5
+ purpose with or without fee is hereby granted.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
+ PERFORMANCE OF THIS SOFTWARE.
14
+ ***************************************************************************** */
15
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
16
+
17
+
18
+ function __rest(s, e) {
19
+ var t = {};
20
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
21
+ t[p] = s[p];
22
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
23
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
24
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
25
+ t[p[i]] = s[p[i]];
26
+ }
27
+ return t;
28
+ }
29
+
30
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
31
+ var e = new Error(message);
32
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
33
+ };
34
+
35
+ var AppBridge = null;
36
+ var initBridgeCore = function () {
37
+ // 全局回调ID和回调函数存储
38
+ var cbId = 0;
39
+ // 全局回调池,存储「回调 ID → {resolve, reject}」的映射
40
+ var cbs = {};
41
+ var version = "1.0";
42
+ /*
43
+ 定义一个全局的 AppBridge 对象,提供 invoke 方法,用于 H5 调用 Flutter 暴露的原生 API,
44
+ 核心是通过 Promise 来处理异步通信的结果回调.
45
+
46
+ WLYDBridge: flutter 与 H5 约定的 bridge 名字
47
+ */
48
+ AppBridge = {
49
+ invoke: function (type, data) {
50
+ //1. 检查 Flutter 桥接是否就绪(WLYDBridge 是 Flutter 注入的全局对象)
51
+ if (data === void 0) { data = {}; }
52
+ if (!window.WLYDBridge || typeof window.WLYDBridge.postMessage !== 'function') {
53
+ console.log("bridge not ready");
54
+ return Promise.reject(new Error('bridge not ready'));
55
+ }
56
+ return new Promise(function (resolve, reject) {
57
+ // 生成唯一的回调 ID,用于匹配 Flutter 回调的结果
58
+ var id = 'cb_' + (++cbId);
59
+ cbs[id] = { resolve: resolve, reject: reject };
60
+ window.WLYDBridge.postMessage(JSON.stringify({
61
+ type: type,
62
+ data: data,
63
+ callbackId: id, // 唯一回调 ID,Flutter 处理完会带回这个 ID
64
+ version: version
65
+ }));
66
+ });
67
+ }
68
+ };
69
+ // 初始化AppBridge
70
+ // Flutter回调处理
71
+ window.__onFlutterCallback = function (payload) {
72
+ var _a = payload || {}, callbackId = _a.callbackId, status = _a.status, data = _a.data, error = _a.error;
73
+ var cb = cbs[callbackId];
74
+ if (!cb) {
75
+ console.error("\u64CD\u4F5C\u5931\u8D25\uFF1A callbackId==".concat(callbackId));
76
+ return;
77
+ }
78
+ if (status === 'success') {
79
+ cb.resolve(data);
80
+ }
81
+ else {
82
+ cb.reject(error);
83
+ }
84
+ delete cbs[callbackId];
85
+ };
86
+ };
87
+ // 通用桥接调用封装
88
+ var invoke = function (type, params, format) {
89
+ return AppBridge.invoke(type, params)
90
+ .then(function (data) { return typeof format === 'function' ? format(data) : data; })
91
+ .catch(function (err) {
92
+ throw err;
93
+ });
94
+ };
95
+
96
+ // 选择图片
97
+ var chooseImage = function (options) {
98
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
99
+ invoke('chooseImage', restParams).then(function (data) {
100
+ if (data.success) {
101
+ success === null || success === void 0 ? void 0 : success(data);
102
+ }
103
+ else {
104
+ fail === null || fail === void 0 ? void 0 : fail();
105
+ }
106
+ }).catch(fail).finally(complete);
107
+ };
108
+
109
+ // 获取定位
110
+ var getLocation = function (options) {
111
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
112
+ invoke('getLocation', restParams).then(function (data) {
113
+ if (data.latitude && data.longitude) {
114
+ success === null || success === void 0 ? void 0 : success(data);
115
+ }
116
+ else {
117
+ fail === null || fail === void 0 ? void 0 : fail();
118
+ }
119
+ }).catch(fail).finally(complete);
120
+ };
121
+
122
+ /**
123
+ * 预览图片
124
+ * @param options 预览图片参数
125
+ * @param options.urls 图片URL列表
126
+ * @param options.success 成功回调
127
+ * @param options.fail 失败回调
128
+ * @param options.complete 完成回调
129
+ * @returns
130
+ */
131
+ var previewImage = function (options) {
132
+ var _a;
133
+ if (!options.urls || options.urls.length === 0) {
134
+ (_a = options.fail) === null || _a === void 0 ? void 0 : _a.call(options);
135
+ return;
136
+ }
137
+ invoke('previewImage', {
138
+ urls: options.urls
139
+ }).then(options.success)
140
+ .catch(options.fail)
141
+ .finally(options.complete);
142
+ };
143
+
144
+ var login = function (options) {
145
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
146
+ invoke('login', restParams).then(function (data) {
147
+ if (data.success) {
148
+ success === null || success === void 0 ? void 0 : success(data);
149
+ }
150
+ else {
151
+ fail === null || fail === void 0 ? void 0 : fail();
152
+ }
153
+ }).catch(fail).finally(complete);
154
+ };
155
+
156
+ var navigateTo = function (options) {
157
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
158
+ invoke('navigateTo', restParams).then(function (data) {
159
+ if (data.success) {
160
+ success === null || success === void 0 ? void 0 : success();
161
+ }
162
+ else {
163
+ fail === null || fail === void 0 ? void 0 : fail();
164
+ }
165
+ }).catch(fail).finally(complete);
166
+ };
167
+
168
+ // 分享
169
+ var wxShare = function (options) {
170
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
171
+ invoke('wxShare', restParams).then(function (data) {
172
+ if (data.success) {
173
+ success === null || success === void 0 ? void 0 : success();
174
+ }
175
+ else {
176
+ fail === null || fail === void 0 ? void 0 : fail();
177
+ }
178
+ }).catch(fail).finally(complete);
179
+ };
180
+
181
+ // 返回
182
+ var navigateBack = function (options) {
183
+ options.success; var fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
184
+ invoke('back', restParams).then(function (data) {
185
+ console.log('navigateBack data', data);
186
+ // if (data.success) {
187
+ // success?.();
188
+ // } else {
189
+ // fail?.();
190
+ // }
191
+ }).catch(fail).finally(complete);
192
+ // .then(() => showToast('返回已触发', 2000, 'success'));
193
+ };
194
+
195
+ var api = /*#__PURE__*/Object.freeze({
196
+ __proto__: null,
197
+ chooseImage: chooseImage,
198
+ getLocation: getLocation,
199
+ login: login,
200
+ navigateBack: navigateBack,
201
+ navigateTo: navigateTo,
202
+ previewImage: previewImage,
203
+ wxShare: wxShare
204
+ });
205
+
206
+ var initBridge = function () {
207
+ initBridgeCore();
208
+ if (!window.uni) {
209
+ window.uni = {};
210
+ }
211
+ var uniApi = window.uni;
212
+ Object.assign(uniApi, api);
213
+ };
214
+ initBridge();
215
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/core/bridgeCore.ts","../src/api/chooseImage.ts","../src/api/getLocation.ts","../src/api/previewImage.ts","../src/api/login.ts","../src/api/navigateTo.ts","../src/api/wxShare.ts","../src/api/navigateBack.ts","../src/index.ts"],"sourcesContent":["let AppBridge = null;\n\nexport const initBridgeCore = () => {\n // 全局回调ID和回调函数存储\n let cbId = 0;\n // 全局回调池,存储「回调 ID → {resolve, reject}」的映射\n const cbs = {};\n const version = \"1.0\";\n\n /*\n 定义一个全局的 AppBridge 对象,提供 invoke 方法,用于 H5 调用 Flutter 暴露的原生 API,\n 核心是通过 Promise 来处理异步通信的结果回调.\n\n WLYDBridge: flutter 与 H5 约定的 bridge 名字\n */\n AppBridge = {\n invoke(type, data = {}) {\n //1. 检查 Flutter 桥接是否就绪(WLYDBridge 是 Flutter 注入的全局对象)\n\n if (!(window as any).WLYDBridge || typeof (window as any).WLYDBridge.postMessage !== 'function') {\n console.log(\"bridge not ready\");\n return Promise.reject(new Error('bridge not ready'));\n }\n return new Promise((resolve, reject) => {\n // 生成唯一的回调 ID,用于匹配 Flutter 回调的结果\n const id = 'cb_' + (++cbId);\n cbs[id] = { resolve, reject };\n (window as any).WLYDBridge.postMessage(JSON.stringify({\n type,\n data,\n callbackId: id,// 唯一回调 ID,Flutter 处理完会带回这个 ID\n version\n }));\n });\n }\n };\n\n // 初始化AppBridge \n // Flutter回调处理\n (window as any).__onFlutterCallback = (payload) => {\n const { callbackId, status, data, error } = payload || {};\n const cb = cbs[callbackId];\n\n if (!cb) {\n console.error(`操作失败: callbackId==${callbackId}`);\n return;\n }\n\n if (status === 'success') {\n cb.resolve(data);\n } else {\n cb.reject(error);\n }\n delete cbs[callbackId];\n };\n}\n\n// 通用桥接调用封装\nexport const invoke = (type, params?: any, format?) => {\n\treturn AppBridge.invoke(type, params)\n\t\t.then(data => typeof format === 'function' ? format(data) : data)\n\t\t.catch(err => {\n\t\t\tthrow err;\n\t\t});\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface ChooseImageOptions extends Omit<BaseOptions, 'success'> {\n count: number;\n sizeType: ['original', 'compressed'];\n sourceType: ['album', 'camera'];\n success?: (result: {\n tempFilePaths: string[];\n tempFiles: {\n size: number;\n type: string;\n }[];\n }) => void;\n}\n\n// 选择图片\nexport const chooseImage = (options: ChooseImageOptions) => {\n const { success, fail, complete, ...restParams } = options;\n invoke('chooseImage', restParams).then(data => {\n\t\tif (data.success) {\n\t\t\tsuccess?.(data);\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}\n","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface GetLocationOptions extends Omit<BaseOptions, 'success'> {\n\tsuccess?: (result: {\n\t\tlatitude: number;\n\t\tlongitude: number;\n\t}) => void;\n}\n \n// 获取定位\nexport const getLocation = (options: GetLocationOptions) => {\n\tconst { success, fail, complete, ...restParams } = options;\n\tinvoke('getLocation', restParams).then(data => {\n\t\tif (data.latitude && data.longitude) {\n\t\t\tsuccess?.(data);\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}\n","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface PreviewImageOptions extends BaseOptions {\n\turls: string[];\n}\n\n/**\n * 预览图片\n * @param options 预览图片参数\n * @param options.urls 图片URL列表\n * @param options.success 成功回调\n * @param options.fail 失败回调\n * @param options.complete 完成回调\n * @returns \n */\nexport const previewImage = (options: PreviewImageOptions) => {\n\tif (!options.urls || options.urls.length === 0) {\n\t\toptions.fail?.();\n\t\treturn;\n\t}\n\tinvoke('previewImage', {\n\t\turls: options.urls\n\t}).then(options.success)\n\t\t.catch(options.fail)\n\t\t.finally(options.complete);\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\nexport interface LoginOptions extends Omit<BaseOptions, 'success'> {\n\tsuccess?: (result: {\n\t\tloginSuccess: boolean;\n\t\tuserId: string;\n\t}) => void;\n}\n\nexport const login = (options: LoginOptions) => {\n\tconst { success, fail, complete, ...restParams } = options;\n\tinvoke('login', restParams).then(data => {\n\t\tif (data.success) {\n\t\t\tsuccess?.(data);\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface NavigateToOptions extends BaseOptions {\n\troute: string;\n\tparams: any;\n}\n\nexport const navigateTo = (options: NavigateToOptions) => {\n\tconst { success, fail, complete, ...restParams } = options;\n\tinvoke('navigateTo', restParams).then(data => {\n\t\tif (data.success) {\n\t\t\tsuccess?.();\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface WxShareOptions extends BaseOptions {\n\ttitle: string;\n\turl: string;\n\tshareType: ['appMessage', 'timeline', 'favorite'];\n}\n// 分享\nexport const wxShare = (options: WxShareOptions) => {\n\tconst { success, fail, complete, ...restParams } = options;\n\tinvoke('wxShare', restParams).then(data => {\n\t\tif (data.success) {\n\t\t\tsuccess?.();\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\n// 返回\nexport const navigateBack = (options?: BaseOptions) => {\n const { success, fail, complete, ...restParams } = options;\n\tinvoke('back', restParams).then(data => {\n\t\tconsole.log('navigateBack data', data);\n\t\t// if (data.success) {\n\t\t// \tsuccess?.();\n\t\t// } else {\n\t\t// \tfail?.();\n\t\t// }\n\t}).catch(fail).finally(complete);\n // .then(() => showToast('返回已触发', 2000, 'success'));\n}","import * as api from './api'\nimport { initBridgeCore } from './core/bridgeCore'\n\nconst initBridge = () => {\n initBridgeCore()\n\n if (!(window as any).uni) {\n (window as any).uni = {}\n }\n const uniApi: any = (window as any).uni\n Object.assign(uniApi, api)\n}\n\ninitBridge()"],"names":[],"mappings":"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"}
@@ -0,0 +1,222 @@
1
+ (function (factory) {
2
+ typeof define === 'function' && define.amd ? define(factory) :
3
+ factory();
4
+ })((function () { 'use strict';
5
+
6
+ /******************************************************************************
7
+ Copyright (c) Microsoft Corporation.
8
+
9
+ Permission to use, copy, modify, and/or distribute this software for any
10
+ purpose with or without fee is hereby granted.
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
13
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
14
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
15
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
16
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
17
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
18
+ PERFORMANCE OF THIS SOFTWARE.
19
+ ***************************************************************************** */
20
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
21
+
22
+
23
+ function __rest(s, e) {
24
+ var t = {};
25
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
26
+ t[p] = s[p];
27
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
28
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
29
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
30
+ t[p[i]] = s[p[i]];
31
+ }
32
+ return t;
33
+ }
34
+
35
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
36
+ var e = new Error(message);
37
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
38
+ };
39
+
40
+ var AppBridge = null;
41
+ var initBridgeCore = function () {
42
+ // 全局回调ID和回调函数存储
43
+ var cbId = 0;
44
+ // 全局回调池,存储「回调 ID → {resolve, reject}」的映射
45
+ var cbs = {};
46
+ var version = "1.0";
47
+ /*
48
+ 定义一个全局的 AppBridge 对象,提供 invoke 方法,用于 H5 调用 Flutter 暴露的原生 API,
49
+ 核心是通过 Promise 来处理异步通信的结果回调.
50
+
51
+ WLYDBridge: flutter 与 H5 约定的 bridge 名字
52
+ */
53
+ AppBridge = {
54
+ invoke: function (type, data) {
55
+ //1. 检查 Flutter 桥接是否就绪(WLYDBridge 是 Flutter 注入的全局对象)
56
+ if (data === void 0) { data = {}; }
57
+ if (!window.WLYDBridge || typeof window.WLYDBridge.postMessage !== 'function') {
58
+ console.log("bridge not ready");
59
+ return Promise.reject(new Error('bridge not ready'));
60
+ }
61
+ return new Promise(function (resolve, reject) {
62
+ // 生成唯一的回调 ID,用于匹配 Flutter 回调的结果
63
+ var id = 'cb_' + (++cbId);
64
+ cbs[id] = { resolve: resolve, reject: reject };
65
+ window.WLYDBridge.postMessage(JSON.stringify({
66
+ type: type,
67
+ data: data,
68
+ callbackId: id, // 唯一回调 ID,Flutter 处理完会带回这个 ID
69
+ version: version
70
+ }));
71
+ });
72
+ }
73
+ };
74
+ // 初始化AppBridge
75
+ // Flutter回调处理
76
+ window.__onFlutterCallback = function (payload) {
77
+ var _a = payload || {}, callbackId = _a.callbackId, status = _a.status, data = _a.data, error = _a.error;
78
+ var cb = cbs[callbackId];
79
+ if (!cb) {
80
+ console.error("\u64CD\u4F5C\u5931\u8D25\uFF1A callbackId==".concat(callbackId));
81
+ return;
82
+ }
83
+ if (status === 'success') {
84
+ cb.resolve(data);
85
+ }
86
+ else {
87
+ cb.reject(error);
88
+ }
89
+ delete cbs[callbackId];
90
+ };
91
+ };
92
+ // 通用桥接调用封装
93
+ var invoke = function (type, params, format) {
94
+ return AppBridge.invoke(type, params)
95
+ .then(function (data) { return typeof format === 'function' ? format(data) : data; })
96
+ .catch(function (err) {
97
+ throw err;
98
+ });
99
+ };
100
+
101
+ // 选择图片
102
+ var chooseImage = function (options) {
103
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
104
+ invoke('chooseImage', restParams).then(function (data) {
105
+ if (data.success) {
106
+ success === null || success === void 0 ? void 0 : success(data);
107
+ }
108
+ else {
109
+ fail === null || fail === void 0 ? void 0 : fail();
110
+ }
111
+ }).catch(fail).finally(complete);
112
+ };
113
+
114
+ // 获取定位
115
+ var getLocation = function (options) {
116
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
117
+ invoke('getLocation', restParams).then(function (data) {
118
+ if (data.latitude && data.longitude) {
119
+ success === null || success === void 0 ? void 0 : success(data);
120
+ }
121
+ else {
122
+ fail === null || fail === void 0 ? void 0 : fail();
123
+ }
124
+ }).catch(fail).finally(complete);
125
+ };
126
+
127
+ /**
128
+ * 预览图片
129
+ * @param options 预览图片参数
130
+ * @param options.urls 图片URL列表
131
+ * @param options.success 成功回调
132
+ * @param options.fail 失败回调
133
+ * @param options.complete 完成回调
134
+ * @returns
135
+ */
136
+ var previewImage = function (options) {
137
+ var _a;
138
+ if (!options.urls || options.urls.length === 0) {
139
+ (_a = options.fail) === null || _a === void 0 ? void 0 : _a.call(options);
140
+ return;
141
+ }
142
+ invoke('previewImage', {
143
+ urls: options.urls
144
+ }).then(options.success)
145
+ .catch(options.fail)
146
+ .finally(options.complete);
147
+ };
148
+
149
+ var login = function (options) {
150
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
151
+ invoke('login', restParams).then(function (data) {
152
+ if (data.success) {
153
+ success === null || success === void 0 ? void 0 : success(data);
154
+ }
155
+ else {
156
+ fail === null || fail === void 0 ? void 0 : fail();
157
+ }
158
+ }).catch(fail).finally(complete);
159
+ };
160
+
161
+ var navigateTo = function (options) {
162
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
163
+ invoke('navigateTo', restParams).then(function (data) {
164
+ if (data.success) {
165
+ success === null || success === void 0 ? void 0 : success();
166
+ }
167
+ else {
168
+ fail === null || fail === void 0 ? void 0 : fail();
169
+ }
170
+ }).catch(fail).finally(complete);
171
+ };
172
+
173
+ // 分享
174
+ var wxShare = function (options) {
175
+ var success = options.success, fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
176
+ invoke('wxShare', restParams).then(function (data) {
177
+ if (data.success) {
178
+ success === null || success === void 0 ? void 0 : success();
179
+ }
180
+ else {
181
+ fail === null || fail === void 0 ? void 0 : fail();
182
+ }
183
+ }).catch(fail).finally(complete);
184
+ };
185
+
186
+ // 返回
187
+ var navigateBack = function (options) {
188
+ options.success; var fail = options.fail, complete = options.complete, restParams = __rest(options, ["success", "fail", "complete"]);
189
+ invoke('back', restParams).then(function (data) {
190
+ console.log('navigateBack data', data);
191
+ // if (data.success) {
192
+ // success?.();
193
+ // } else {
194
+ // fail?.();
195
+ // }
196
+ }).catch(fail).finally(complete);
197
+ // .then(() => showToast('返回已触发', 2000, 'success'));
198
+ };
199
+
200
+ var api = /*#__PURE__*/Object.freeze({
201
+ __proto__: null,
202
+ chooseImage: chooseImage,
203
+ getLocation: getLocation,
204
+ login: login,
205
+ navigateBack: navigateBack,
206
+ navigateTo: navigateTo,
207
+ previewImage: previewImage,
208
+ wxShare: wxShare
209
+ });
210
+
211
+ var initBridge = function () {
212
+ initBridgeCore();
213
+ if (!window.uni) {
214
+ window.uni = {};
215
+ }
216
+ var uniApi = window.uni;
217
+ Object.assign(uniApi, api);
218
+ };
219
+ initBridge();
220
+
221
+ }));
222
+ //# sourceMappingURL=index.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../src/core/bridgeCore.ts","../src/api/chooseImage.ts","../src/api/getLocation.ts","../src/api/previewImage.ts","../src/api/login.ts","../src/api/navigateTo.ts","../src/api/wxShare.ts","../src/api/navigateBack.ts","../src/index.ts"],"sourcesContent":["let AppBridge = null;\n\nexport const initBridgeCore = () => {\n // 全局回调ID和回调函数存储\n let cbId = 0;\n // 全局回调池,存储「回调 ID → {resolve, reject}」的映射\n const cbs = {};\n const version = \"1.0\";\n\n /*\n 定义一个全局的 AppBridge 对象,提供 invoke 方法,用于 H5 调用 Flutter 暴露的原生 API,\n 核心是通过 Promise 来处理异步通信的结果回调.\n\n WLYDBridge: flutter 与 H5 约定的 bridge 名字\n */\n AppBridge = {\n invoke(type, data = {}) {\n //1. 检查 Flutter 桥接是否就绪(WLYDBridge 是 Flutter 注入的全局对象)\n\n if (!(window as any).WLYDBridge || typeof (window as any).WLYDBridge.postMessage !== 'function') {\n console.log(\"bridge not ready\");\n return Promise.reject(new Error('bridge not ready'));\n }\n return new Promise((resolve, reject) => {\n // 生成唯一的回调 ID,用于匹配 Flutter 回调的结果\n const id = 'cb_' + (++cbId);\n cbs[id] = { resolve, reject };\n (window as any).WLYDBridge.postMessage(JSON.stringify({\n type,\n data,\n callbackId: id,// 唯一回调 ID,Flutter 处理完会带回这个 ID\n version\n }));\n });\n }\n };\n\n // 初始化AppBridge \n // Flutter回调处理\n (window as any).__onFlutterCallback = (payload) => {\n const { callbackId, status, data, error } = payload || {};\n const cb = cbs[callbackId];\n\n if (!cb) {\n console.error(`操作失败: callbackId==${callbackId}`);\n return;\n }\n\n if (status === 'success') {\n cb.resolve(data);\n } else {\n cb.reject(error);\n }\n delete cbs[callbackId];\n };\n}\n\n// 通用桥接调用封装\nexport const invoke = (type, params?: any, format?) => {\n\treturn AppBridge.invoke(type, params)\n\t\t.then(data => typeof format === 'function' ? format(data) : data)\n\t\t.catch(err => {\n\t\t\tthrow err;\n\t\t});\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface ChooseImageOptions extends Omit<BaseOptions, 'success'> {\n count: number;\n sizeType: ['original', 'compressed'];\n sourceType: ['album', 'camera'];\n success?: (result: {\n tempFilePaths: string[];\n tempFiles: {\n size: number;\n type: string;\n }[];\n }) => void;\n}\n\n// 选择图片\nexport const chooseImage = (options: ChooseImageOptions) => {\n const { success, fail, complete, ...restParams } = options;\n invoke('chooseImage', restParams).then(data => {\n\t\tif (data.success) {\n\t\t\tsuccess?.(data);\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}\n","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface GetLocationOptions extends Omit<BaseOptions, 'success'> {\n\tsuccess?: (result: {\n\t\tlatitude: number;\n\t\tlongitude: number;\n\t}) => void;\n}\n \n// 获取定位\nexport const getLocation = (options: GetLocationOptions) => {\n\tconst { success, fail, complete, ...restParams } = options;\n\tinvoke('getLocation', restParams).then(data => {\n\t\tif (data.latitude && data.longitude) {\n\t\t\tsuccess?.(data);\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}\n","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface PreviewImageOptions extends BaseOptions {\n\turls: string[];\n}\n\n/**\n * 预览图片\n * @param options 预览图片参数\n * @param options.urls 图片URL列表\n * @param options.success 成功回调\n * @param options.fail 失败回调\n * @param options.complete 完成回调\n * @returns \n */\nexport const previewImage = (options: PreviewImageOptions) => {\n\tif (!options.urls || options.urls.length === 0) {\n\t\toptions.fail?.();\n\t\treturn;\n\t}\n\tinvoke('previewImage', {\n\t\turls: options.urls\n\t}).then(options.success)\n\t\t.catch(options.fail)\n\t\t.finally(options.complete);\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\nexport interface LoginOptions extends Omit<BaseOptions, 'success'> {\n\tsuccess?: (result: {\n\t\tloginSuccess: boolean;\n\t\tuserId: string;\n\t}) => void;\n}\n\nexport const login = (options: LoginOptions) => {\n\tconst { success, fail, complete, ...restParams } = options;\n\tinvoke('login', restParams).then(data => {\n\t\tif (data.success) {\n\t\t\tsuccess?.(data);\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface NavigateToOptions extends BaseOptions {\n\troute: string;\n\tparams: any;\n}\n\nexport const navigateTo = (options: NavigateToOptions) => {\n\tconst { success, fail, complete, ...restParams } = options;\n\tinvoke('navigateTo', restParams).then(data => {\n\t\tif (data.success) {\n\t\t\tsuccess?.();\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface WxShareOptions extends BaseOptions {\n\ttitle: string;\n\turl: string;\n\tshareType: ['appMessage', 'timeline', 'favorite'];\n}\n// 分享\nexport const wxShare = (options: WxShareOptions) => {\n\tconst { success, fail, complete, ...restParams } = options;\n\tinvoke('wxShare', restParams).then(data => {\n\t\tif (data.success) {\n\t\t\tsuccess?.();\n\t\t} else {\n\t\t\tfail?.();\n\t\t}\n\t}).catch(fail).finally(complete);\n}","import { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\n// 返回\nexport const navigateBack = (options?: BaseOptions) => {\n const { success, fail, complete, ...restParams } = options;\n\tinvoke('back', restParams).then(data => {\n\t\tconsole.log('navigateBack data', data);\n\t\t// if (data.success) {\n\t\t// \tsuccess?.();\n\t\t// } else {\n\t\t// \tfail?.();\n\t\t// }\n\t}).catch(fail).finally(complete);\n // .then(() => showToast('返回已触发', 2000, 'success'));\n}","import * as api from './api'\nimport { initBridgeCore } from './core/bridgeCore'\n\nconst initBridge = () => {\n initBridgeCore()\n\n if (!(window as any).uni) {\n (window as any).uni = {}\n }\n const uniApi: any = (window as any).uni\n Object.assign(uniApi, api)\n}\n\ninitBridge()"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { BaseOptions } from "../types";
2
+ export interface ChooseImageOptions extends Omit<BaseOptions, 'success'> {
3
+ count: number;
4
+ sizeType: ['original', 'compressed'];
5
+ sourceType: ['album', 'camera'];
6
+ success?: (result: {
7
+ tempFilePaths: string[];
8
+ tempFiles: {
9
+ size: number;
10
+ type: string;
11
+ }[];
12
+ }) => void;
13
+ }
14
+ export declare const chooseImage: (options: ChooseImageOptions) => void;
@@ -0,0 +1,8 @@
1
+ import { BaseOptions } from "../types";
2
+ export interface GetLocationOptions extends Omit<BaseOptions, 'success'> {
3
+ success?: (result: {
4
+ latitude: number;
5
+ longitude: number;
6
+ }) => void;
7
+ }
8
+ export declare const getLocation: (options: GetLocationOptions) => void;