@wlydfe/flutter-bridge 0.0.1 → 0.0.3

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.
package/README.md CHANGED
@@ -0,0 +1,377 @@
1
+ # Flutter UniApp Bridge API 文档
2
+
3
+ ## 简介
4
+
5
+ `@wlydfe/flutter-bridge` 是一个用于 Flutter 和 UniApp 之间通信的桥接库,提供了丰富的原生能力调用接口。
6
+
7
+ ## 安装
8
+
9
+ ```bash
10
+ npm install @wlydfe/flutter-bridge
11
+ ```
12
+
13
+ ## 初始化
14
+
15
+ 直接导入整个库,它会自动初始化并将 API 挂载到全局 `uni` 对象上:
16
+
17
+ ```typescript
18
+ import '@wlydfe/flutter-bridge';
19
+ ```
20
+
21
+ 或者通过 script 标签引入:
22
+
23
+ ```html
24
+ <script src="path/to/flutter-bridge.js"></script>
25
+ ```
26
+
27
+ 初始化后,所有 API 会挂载到全局 `uni` 对象上,可以直接通过 `uni.xxx` 的方式调用,无需 import。
28
+
29
+ ## 基础类型
30
+
31
+ ### BaseOptions
32
+
33
+ 所有 API 都支持的基础选项类型:
34
+
35
+ ```typescript
36
+ interface BaseOptions {
37
+ success?: () => void; // 成功回调
38
+ fail?: () => void; // 失败回调
39
+ complete?: () => void; // 完成回调(无论成功或失败都会执行)
40
+ }
41
+ ```
42
+
43
+ ## API 列表
44
+
45
+ ### 1. chooseImage - 选择图片
46
+
47
+ 从相册选择图片或拍照。
48
+
49
+ #### 参数
50
+
51
+ ```typescript
52
+ interface ChooseImageOptions {
53
+ count: number; // 最多可以选择的图片张数
54
+ sizeType: ['original', 'compressed']; // 图片尺寸类型
55
+ sourceType: ['album', 'camera']; // 图片来源类型
56
+ success?: (result: {
57
+ tempFilePaths: string[]; // 图片的本地文件路径列表
58
+ tempFiles: {
59
+ size: number; // 文件大小,单位 B
60
+ type: string; // 文件类型
61
+ }[];
62
+ }) => void;
63
+ fail?: () => void;
64
+ complete?: () => void;
65
+ }
66
+ ```
67
+
68
+ #### 示例
69
+
70
+ ```typescript
71
+ uni.chooseImage({
72
+ count: 1,
73
+ sizeType: ['original', 'compressed'],
74
+ sourceType: ['album', 'camera'],
75
+ success: (result) => {
76
+ console.log('选择的图片路径:', result.tempFilePaths);
77
+ console.log('文件信息:', result.tempFiles);
78
+ },
79
+ fail: () => {
80
+ console.error('选择图片失败');
81
+ },
82
+ complete: () => {
83
+ console.log('选择图片操作完成');
84
+ }
85
+ });
86
+ ```
87
+
88
+ ---
89
+
90
+ ### 2. getLocation - 获取定位
91
+
92
+ 获取当前的地理位置信息。
93
+
94
+ #### 参数
95
+
96
+ ```typescript
97
+ interface GetLocationOptions {
98
+ success?: (result: {
99
+ latitude: number; // 纬度,浮点数,范围为 -90~90
100
+ longitude: number; // 经度,浮点数,范围为 -180~180
101
+ }) => void;
102
+ fail?: () => void;
103
+ complete?: () => void;
104
+ }
105
+ ```
106
+
107
+ #### 示例
108
+
109
+ ```typescript
110
+ uni.getLocation({
111
+ success: (result) => {
112
+ console.log('纬度:', result.latitude);
113
+ console.log('经度:', result.longitude);
114
+ },
115
+ fail: () => {
116
+ console.error('获取定位失败');
117
+ },
118
+ complete: () => {
119
+ console.log('获取定位操作完成');
120
+ }
121
+ });
122
+ ```
123
+
124
+ ---
125
+
126
+ ### 3. previewImage - 预览图片
127
+
128
+ 预览图片,支持多张图片滑动查看。
129
+
130
+ #### 参数
131
+
132
+ ```typescript
133
+ interface PreviewImageOptions {
134
+ urls: string[]; // 需要预览的图片链接列表
135
+ success?: () => void;
136
+ fail?: () => void;
137
+ complete?: () => void;
138
+ }
139
+ ```
140
+
141
+ #### 示例
142
+
143
+ ```typescript
144
+ uni.previewImage({
145
+ urls: [
146
+ 'https://example.com/image1.jpg',
147
+ 'https://example.com/image2.jpg'
148
+ ],
149
+ success: () => {
150
+ console.log('预览图片成功');
151
+ },
152
+ fail: () => {
153
+ console.error('预览图片失败');
154
+ }
155
+ });
156
+ ```
157
+
158
+ ---
159
+
160
+ ### 4. login - 登录
161
+
162
+ 执行登录操作。
163
+
164
+ #### 参数
165
+
166
+ ```typescript
167
+ interface LoginOptions {
168
+ success?: (result: {
169
+ loginSuccess: boolean; // 登录是否成功
170
+ userId: string; // 用户ID
171
+ }) => void;
172
+ fail?: () => void;
173
+ complete?: () => void;
174
+ }
175
+ ```
176
+
177
+ #### 示例
178
+
179
+ ```typescript
180
+ uni.login({
181
+ success: (result) => {
182
+ if (result.loginSuccess) {
183
+ console.log('登录成功,用户ID:', result.userId);
184
+ }
185
+ },
186
+ fail: () => {
187
+ console.error('登录失败');
188
+ }
189
+ });
190
+ ```
191
+
192
+ ---
193
+
194
+ ### 5. navigateTo - 导航到指定页面
195
+
196
+ 跳转到应用内的某个页面。
197
+
198
+ #### 参数
199
+
200
+ ```typescript
201
+ interface NavigateToOptions {
202
+ route: string; // 目标页面路由
203
+ params: any; // 页面参数
204
+ success?: () => void;
205
+ fail?: () => void;
206
+ complete?: () => void;
207
+ }
208
+ ```
209
+
210
+ #### 示例
211
+
212
+ ```typescript
213
+ uni.navigateTo({
214
+ route: '/pages/detail/index',
215
+ params: {
216
+ id: '123',
217
+ title: '详情页'
218
+ },
219
+ success: () => {
220
+ console.log('页面跳转成功');
221
+ },
222
+ fail: () => {
223
+ console.error('页面跳转失败');
224
+ }
225
+ });
226
+ ```
227
+
228
+ ---
229
+
230
+ ### 6. navigateBack - 返回上一页
231
+
232
+ 返回到上一个页面。
233
+
234
+ #### 参数
235
+
236
+ ```typescript
237
+ interface BaseOptions {
238
+ success?: () => void;
239
+ fail?: () => void;
240
+ complete?: () => void;
241
+ }
242
+ ```
243
+
244
+ #### 示例
245
+
246
+ ```typescript
247
+ uni.navigateBack({
248
+ success: () => {
249
+ console.log('返回成功');
250
+ },
251
+ fail: () => {
252
+ console.error('返回失败');
253
+ }
254
+ });
255
+ ```
256
+
257
+ ---
258
+
259
+ ### 7. wxShare - 微信分享
260
+ 这个方法只有flutter中可以使用
261
+ 分享内容到微信。
262
+
263
+ #### 参数
264
+
265
+ ```typescript
266
+ interface WxShareOptions {
267
+ title: string; // 分享标题
268
+ url: string; // 分享链接
269
+ shareType: ['appMessage', 'timeline', 'favorite']; // 分享类型
270
+ success?: () => void;
271
+ fail?: () => void;
272
+ complete?: () => void;
273
+ }
274
+ ```
275
+
276
+ #### shareType 说明
277
+
278
+ - `appMessage`: 分享给微信好友
279
+ - `timeline`: 分享到微信朋友圈
280
+ - `favorite`: 收藏到微信
281
+
282
+ #### 示例
283
+
284
+ ```typescript
285
+ uni.wxShare({
286
+ title: '分享标题',
287
+ url: 'https://example.com/share',
288
+ shareType: ['appMessage', 'timeline'],
289
+ success: () => {
290
+ console.log('分享成功');
291
+ },
292
+ fail: () => {
293
+ console.error('分享失败');
294
+ }
295
+ });
296
+ ```
297
+
298
+
299
+ ---
300
+
301
+ ### 8. setNavigationBarTitle - 设置标题
302
+
303
+ 设置标题
304
+
305
+ #### 参数
306
+
307
+ ```typescript
308
+ interface NavigationBarTitleOptions {
309
+ title: string;
310
+ }
311
+ ```
312
+
313
+ #### 示例
314
+
315
+ ```typescript
316
+ uni.setNavigationBarTitle({
317
+ title: '新标题',
318
+ success: () => {
319
+ console.log('返回成功');
320
+ },
321
+ fail: () => {
322
+ console.error('返回失败');
323
+ }
324
+ });
325
+ ```
326
+
327
+
328
+ ## 核心机制
329
+
330
+ ### 桥接通信原理
331
+
332
+ 1. **初始化**: 调用 `initBridgeCore()` 初始化桥接核心,创建全局 `AppBridge` 对象
333
+ 2. **调用流程**:
334
+ - H5 通过 `invoke(type, data)` 调用 Flutter 原生 API
335
+ - 生成唯一的 `callbackId` 用于匹配回调
336
+ - 通过 `WLYDBridge.postMessage` 发送消息到 Flutter
337
+ 3. **回调处理**:
338
+ - Flutter 处理完成后调用全局 `__onFlutterCallback` 函数
339
+ - 根据 `callbackId` 匹配对应的 Promise resolve/reject
340
+ - 执行相应的成功或失败回调
341
+
342
+ ### 错误处理
343
+
344
+ - 如果 Flutter 桥接未就绪(`WLYDBridge` 不存在),会返回 `Promise.reject` 并触发 `fail` 回调
345
+ - 所有 API 调用都支持 `fail` 和 `complete` 回调来处理错误情况
346
+
347
+ ## 使用方式
348
+
349
+ 所有 API 都通过全局 `uni` 对象调用,使用方式与 UniApp 官方 API 保持一致:
350
+
351
+ ```typescript
352
+ // 引入库后,直接使用 uni.xxx 调用
353
+ uni.chooseImage({ ... });
354
+ uni.getLocation({ ... });
355
+ uni.previewImage({ ... });
356
+ uni.login({ ... });
357
+ uni.navigateTo({ ... });
358
+ uni.navigateBack({ ... });
359
+ uni.wxShare({ ... });
360
+ ```
361
+
362
+ ## 注意事项
363
+
364
+ 1. **初始化顺序**: 确保在使用任何 API 之前先引入库(会自动初始化)
365
+ 2. **环境要求**: 需要在 Flutter WebView 环境中使用,依赖全局 `WLYDBridge` 对象
366
+ 3. **回调处理**: 所有 API 都是异步的,使用 Promise 和回调函数处理结果
367
+ 4. **类型安全**: 项目使用 TypeScript 编写,提供了完整的类型定义
368
+ 5. **调用方式**: 所有 API 都通过 `uni.xxx` 的方式调用,无需单独 import
369
+
370
+ ## 版本信息
371
+
372
+ - 当前版本: `0.0.1`
373
+ - 桥接协议版本: `1.0`
374
+
375
+ ## 许可证
376
+
377
+ MIT
package/index.html CHANGED
@@ -44,6 +44,7 @@
44
44
  <div class="btn" onclick="navigateTo('/freightDetail',{'orderId':'CHDD20241012000000144273'})">路由跳转-货源详情</div>
45
45
  <div class="btn" onclick="wxShare()">分享</div>
46
46
  <div class="btn" onclick="goBack()">返回</div>
47
+ <div class="btn" onclick="setNavigationBarTitle('新标题')">设置导航栏标题</div>
47
48
 
48
49
  <!-- Toast测试按钮 -->
49
50
  <!-- <button class="btn" id="toastTestBtn">点击展示测试Toast</button> -->
@@ -145,6 +146,12 @@
145
146
  function goBack() {
146
147
  uni.navigateBack();
147
148
  }
149
+
150
+ function setNavigationBarTitle(title) {
151
+ uni.setNavigationBarTitle({
152
+ title: title + Date.now()
153
+ });
154
+ }
148
155
  </script>
149
156
  </body>
150
157
  </html>
package/lib/index.js CHANGED
@@ -36,9 +36,9 @@ var AppBridge = null;
36
36
  var initBridgeCore = function () {
37
37
  // 全局回调ID和回调函数存储
38
38
  var cbId = 0;
39
- // 全局回调池,存储「回调 ID → {resolve, reject}」的映射
40
- var cbs = {};
41
39
  var version = "1.0";
40
+ // Promise resolve 映射表
41
+ var promiseMap = new Map();
42
42
  /*
43
43
  定义一个全局的 AppBridge 对象,提供 invoke 方法,用于 H5 调用 Flutter 暴露的原生 API,
44
44
  核心是通过 Promise 来处理异步通信的结果回调.
@@ -56,7 +56,6 @@ var initBridgeCore = function () {
56
56
  return new Promise(function (resolve, reject) {
57
57
  // 生成唯一的回调 ID,用于匹配 Flutter 回调的结果
58
58
  var id = 'cb_' + (++cbId);
59
- cbs[id] = { resolve: resolve, reject: reject };
60
59
  window.WLYDBridge.postMessage(JSON.stringify({
61
60
  type: type,
62
61
  data: data,
@@ -68,20 +67,44 @@ var initBridgeCore = function () {
68
67
  };
69
68
  // 初始化AppBridge
70
69
  // 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);
70
+ // native bridge 回传数据
71
+ var resolveCallbackPromise = function (callbackId, data) {
72
+ var resolve = promiseMap.get(callbackId);
73
+ if (resolve) {
74
+ try {
75
+ var parsedData = void 0;
76
+ if (typeof data === 'string') {
77
+ try {
78
+ parsedData = JSON.parse(data);
79
+ }
80
+ catch (parseError) {
81
+ parsedData = {
82
+ success: false,
83
+ message: "JSON\u89E3\u6790\u5931\u8D25: ".concat(parseError instanceof Error ? parseError.message : 'Unknown error'),
84
+ };
85
+ }
86
+ }
87
+ else {
88
+ parsedData = data;
89
+ }
90
+ // 成功时返回标准格式
91
+ resolve(parsedData);
92
+ }
93
+ catch (error) {
94
+ // 异常时返回错误格式
95
+ resolve({
96
+ success: false,
97
+ message: error instanceof Error ? error.message : 'Unknown error',
98
+ });
99
+ }
100
+ finally {
101
+ // 清理映射表
102
+ promiseMap.delete(callbackId);
103
+ }
83
104
  }
84
- delete cbs[callbackId];
105
+ };
106
+ window.resolveFlutterPromise = function (callbackId, data) {
107
+ resolveCallbackPromise(callbackId, data);
85
108
  };
86
109
  };
87
110
  // 通用桥接调用封装
@@ -192,14 +215,37 @@ var navigateBack = function (options) {
192
215
  // .then(() => showToast('返回已触发', 2000, 'success'));
193
216
  };
194
217
 
218
+ /**
219
+ * 预览图片
220
+ * @param options 预览图片参数
221
+ * @param options.urls 图片URL列表
222
+ * @param options.success 成功回调
223
+ * @param options.fail 失败回调
224
+ * @param options.complete 完成回调
225
+ * @returns
226
+ */
227
+ var setNavigationBarTitle = function (options) {
228
+ var _a;
229
+ if (!options.title) {
230
+ (_a = options.fail) === null || _a === void 0 ? void 0 : _a.call(options);
231
+ return;
232
+ }
233
+ invoke('updateNavTitle', {
234
+ title: options.title
235
+ }).then(options.success)
236
+ .catch(options.fail)
237
+ .finally(options.complete);
238
+ };
239
+
195
240
  var api = /*#__PURE__*/Object.freeze({
196
241
  __proto__: null,
242
+ FlutterNavigateBack: navigateBack,
243
+ FlutterNavigateTo: navigateTo,
197
244
  chooseImage: chooseImage,
198
245
  getLocation: getLocation,
199
246
  login: login,
200
- navigateBack: navigateBack,
201
- navigateTo: navigateTo,
202
247
  previewImage: previewImage,
248
+ setNavigationBarTitle: setNavigationBarTitle,
203
249
  wxShare: wxShare
204
250
  });
205
251
 
package/lib/index.js.map CHANGED
@@ -1 +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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"}
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/api/setNavigationBarTitle.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 // Promise resolve 映射表\n const promiseMap = new Map<string, (value) => void>()\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 // native bridge 回传数据\n const resolveCallbackPromise = <T = unknown>(callbackId: string, data: unknown) => {\n const resolve = promiseMap.get(callbackId);\n\n if (resolve) {\n try {\n let parsedData;\n if (typeof data === 'string') {\n try {\n parsedData = JSON.parse(data)\n } catch (parseError) {\n parsedData = {\n success: false,\n message: `JSON解析失败: ${parseError instanceof Error ? parseError.message : 'Unknown error'}`,\n }\n }\n } else {\n parsedData = data\n }\n\n // 成功时返回标准格式\n resolve(parsedData)\n } catch (error) {\n // 异常时返回错误格式\n resolve({\n success: false,\n message: error instanceof Error ? error.message : 'Unknown error',\n })\n } finally {\n // 清理映射表\n promiseMap.delete(callbackId)\n }\n }\n }\n\n (window as any).resolveFlutterPromise = <T = unknown>(callbackId: string, data: unknown): void => {\n resolveCallbackPromise<T>(callbackId, data)\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 { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface NavigationBarTitleOptions extends BaseOptions {\n\ttitle: 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 setNavigationBarTitle = (options: NavigationBarTitleOptions) => {\n\tif (!options.title) {\n\t\toptions.fail?.();\n\t\treturn;\n\t}\n\tinvoke('updateNavTitle', {\n\t\ttitle: options.title\n\t}).then(options.success)\n\t\t.catch(options.fail)\n\t\t.finally(options.complete);\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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"}
package/lib/index.umd.js CHANGED
@@ -41,9 +41,9 @@
41
41
  var initBridgeCore = function () {
42
42
  // 全局回调ID和回调函数存储
43
43
  var cbId = 0;
44
- // 全局回调池,存储「回调 ID → {resolve, reject}」的映射
45
- var cbs = {};
46
44
  var version = "1.0";
45
+ // Promise resolve 映射表
46
+ var promiseMap = new Map();
47
47
  /*
48
48
  定义一个全局的 AppBridge 对象,提供 invoke 方法,用于 H5 调用 Flutter 暴露的原生 API,
49
49
  核心是通过 Promise 来处理异步通信的结果回调.
@@ -61,7 +61,6 @@
61
61
  return new Promise(function (resolve, reject) {
62
62
  // 生成唯一的回调 ID,用于匹配 Flutter 回调的结果
63
63
  var id = 'cb_' + (++cbId);
64
- cbs[id] = { resolve: resolve, reject: reject };
65
64
  window.WLYDBridge.postMessage(JSON.stringify({
66
65
  type: type,
67
66
  data: data,
@@ -73,20 +72,44 @@
73
72
  };
74
73
  // 初始化AppBridge
75
74
  // 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);
75
+ // native bridge 回传数据
76
+ var resolveCallbackPromise = function (callbackId, data) {
77
+ var resolve = promiseMap.get(callbackId);
78
+ if (resolve) {
79
+ try {
80
+ var parsedData = void 0;
81
+ if (typeof data === 'string') {
82
+ try {
83
+ parsedData = JSON.parse(data);
84
+ }
85
+ catch (parseError) {
86
+ parsedData = {
87
+ success: false,
88
+ message: "JSON\u89E3\u6790\u5931\u8D25: ".concat(parseError instanceof Error ? parseError.message : 'Unknown error'),
89
+ };
90
+ }
91
+ }
92
+ else {
93
+ parsedData = data;
94
+ }
95
+ // 成功时返回标准格式
96
+ resolve(parsedData);
97
+ }
98
+ catch (error) {
99
+ // 异常时返回错误格式
100
+ resolve({
101
+ success: false,
102
+ message: error instanceof Error ? error.message : 'Unknown error',
103
+ });
104
+ }
105
+ finally {
106
+ // 清理映射表
107
+ promiseMap.delete(callbackId);
108
+ }
88
109
  }
89
- delete cbs[callbackId];
110
+ };
111
+ window.resolveFlutterPromise = function (callbackId, data) {
112
+ resolveCallbackPromise(callbackId, data);
90
113
  };
91
114
  };
92
115
  // 通用桥接调用封装
@@ -197,14 +220,37 @@
197
220
  // .then(() => showToast('返回已触发', 2000, 'success'));
198
221
  };
199
222
 
223
+ /**
224
+ * 预览图片
225
+ * @param options 预览图片参数
226
+ * @param options.urls 图片URL列表
227
+ * @param options.success 成功回调
228
+ * @param options.fail 失败回调
229
+ * @param options.complete 完成回调
230
+ * @returns
231
+ */
232
+ var setNavigationBarTitle = function (options) {
233
+ var _a;
234
+ if (!options.title) {
235
+ (_a = options.fail) === null || _a === void 0 ? void 0 : _a.call(options);
236
+ return;
237
+ }
238
+ invoke('updateNavTitle', {
239
+ title: options.title
240
+ }).then(options.success)
241
+ .catch(options.fail)
242
+ .finally(options.complete);
243
+ };
244
+
200
245
  var api = /*#__PURE__*/Object.freeze({
201
246
  __proto__: null,
247
+ FlutterNavigateBack: navigateBack,
248
+ FlutterNavigateTo: navigateTo,
202
249
  chooseImage: chooseImage,
203
250
  getLocation: getLocation,
204
251
  login: login,
205
- navigateBack: navigateBack,
206
- navigateTo: navigateTo,
207
252
  previewImage: previewImage,
253
+ setNavigationBarTitle: setNavigationBarTitle,
208
254
  wxShare: wxShare
209
255
  });
210
256
 
@@ -1 +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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"}
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/api/setNavigationBarTitle.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 // Promise resolve 映射表\n const promiseMap = new Map<string, (value) => void>()\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 // native bridge 回传数据\n const resolveCallbackPromise = <T = unknown>(callbackId: string, data: unknown) => {\n const resolve = promiseMap.get(callbackId);\n\n if (resolve) {\n try {\n let parsedData;\n if (typeof data === 'string') {\n try {\n parsedData = JSON.parse(data)\n } catch (parseError) {\n parsedData = {\n success: false,\n message: `JSON解析失败: ${parseError instanceof Error ? parseError.message : 'Unknown error'}`,\n }\n }\n } else {\n parsedData = data\n }\n\n // 成功时返回标准格式\n resolve(parsedData)\n } catch (error) {\n // 异常时返回错误格式\n resolve({\n success: false,\n message: error instanceof Error ? error.message : 'Unknown error',\n })\n } finally {\n // 清理映射表\n promiseMap.delete(callbackId)\n }\n }\n }\n\n (window as any).resolveFlutterPromise = <T = unknown>(callbackId: string, data: unknown): void => {\n resolveCallbackPromise<T>(callbackId, data)\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 { invoke } from \"../core/bridgeCore\";\nimport { BaseOptions } from \"../types\";\n\nexport interface NavigationBarTitleOptions extends BaseOptions {\n\ttitle: 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 setNavigationBarTitle = (options: NavigationBarTitleOptions) => {\n\tif (!options.title) {\n\t\toptions.fail?.();\n\t\treturn;\n\t}\n\tinvoke('updateNavTitle', {\n\t\ttitle: options.title\n\t}).then(options.success)\n\t\t.catch(options.fail)\n\t\t.finally(options.complete);\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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"}
@@ -5,4 +5,5 @@ import { login } from "./login";
5
5
  import { navigateTo } from "./navigateTo";
6
6
  import { wxShare } from "./wxShare";
7
7
  import { navigateBack } from "./navigateBack";
8
- export { chooseImage, getLocation, previewImage, login, navigateTo, wxShare, navigateBack };
8
+ import { setNavigationBarTitle } from "./setNavigationBarTitle";
9
+ export { chooseImage, getLocation, previewImage, login, navigateTo, wxShare, navigateBack, setNavigationBarTitle };
@@ -0,0 +1,14 @@
1
+ import { BaseOptions } from "../types";
2
+ export interface NavigationBarTitleOptions extends BaseOptions {
3
+ title: string;
4
+ }
5
+ /**
6
+ * 预览图片
7
+ * @param options 预览图片参数
8
+ * @param options.urls 图片URL列表
9
+ * @param options.success 成功回调
10
+ * @param options.fail 失败回调
11
+ * @param options.complete 完成回调
12
+ * @returns
13
+ */
14
+ export declare const setNavigationBarTitle: (options: NavigationBarTitleOptions) => void;
@@ -0,0 +1,5 @@
1
+ export declare const app: {
2
+ onLaunch: () => void;
3
+ onShow: () => void;
4
+ onHide: () => void;
5
+ };
@@ -5,4 +5,5 @@ import { login } from "./login";
5
5
  import { navigateTo } from "./navigateTo";
6
6
  import { wxShare } from "./wxShare";
7
7
  import { navigateBack } from "./navigateBack";
8
- export { chooseImage, getLocation, previewImage, login, navigateTo, wxShare, navigateBack };
8
+ import { setNavigationBarTitle } from "./setNavigationBarTitle";
9
+ export { chooseImage, getLocation, previewImage, login, navigateTo as FlutterNavigateTo, wxShare, navigateBack as FlutterNavigateBack, setNavigationBarTitle };
@@ -0,0 +1,14 @@
1
+ import { BaseOptions } from "../types";
2
+ export interface NavigationBarTitleOptions extends BaseOptions {
3
+ title: string;
4
+ }
5
+ /**
6
+ * 预览图片
7
+ * @param options 预览图片参数
8
+ * @param options.urls 图片URL列表
9
+ * @param options.success 成功回调
10
+ * @param options.fail 失败回调
11
+ * @param options.complete 完成回调
12
+ * @returns
13
+ */
14
+ export declare const setNavigationBarTitle: (options: NavigationBarTitleOptions) => void;
@@ -0,0 +1,5 @@
1
+ export declare const app: {
2
+ onLaunch: () => void;
3
+ onShow: () => void;
4
+ onHide: () => void;
5
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wlydfe/flutter-bridge",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "flutter uniapp bridge",
5
5
  "main": "lib/index.umd.js",
6
6
  "module": "lib/index.js",
package/src/api/index.ts CHANGED
@@ -5,5 +5,6 @@ import { login } from "./login";
5
5
  import { navigateTo } from "./navigateTo";
6
6
  import { wxShare } from "./wxShare";
7
7
  import { navigateBack } from "./navigateBack";
8
+ import { setNavigationBarTitle } from "./setNavigationBarTitle";
8
9
 
9
- export { chooseImage, getLocation, previewImage, login, navigateTo, wxShare, navigateBack };
10
+ export { chooseImage, getLocation, previewImage, login, navigateTo as FlutterNavigateTo, wxShare, navigateBack as FlutterNavigateBack, setNavigationBarTitle };
@@ -0,0 +1,27 @@
1
+ import { invoke } from "../core/bridgeCore";
2
+ import { BaseOptions } from "../types";
3
+
4
+ export interface NavigationBarTitleOptions extends BaseOptions {
5
+ title: string;
6
+ }
7
+
8
+ /**
9
+ * 预览图片
10
+ * @param options 预览图片参数
11
+ * @param options.urls 图片URL列表
12
+ * @param options.success 成功回调
13
+ * @param options.fail 失败回调
14
+ * @param options.complete 完成回调
15
+ * @returns
16
+ */
17
+ export const setNavigationBarTitle = (options: NavigationBarTitleOptions) => {
18
+ if (!options.title) {
19
+ options.fail?.();
20
+ return;
21
+ }
22
+ invoke('updateNavTitle', {
23
+ title: options.title
24
+ }).then(options.success)
25
+ .catch(options.fail)
26
+ .finally(options.complete);
27
+ }
@@ -7,6 +7,9 @@ export const initBridgeCore = () => {
7
7
  const cbs = {};
8
8
  const version = "1.0";
9
9
 
10
+ // Promise resolve 映射表
11
+ const promiseMap = new Map<string, (value) => void>()
12
+
10
13
  /*
11
14
  定义一个全局的 AppBridge 对象,提供 invoke 方法,用于 H5 调用 Flutter 暴露的原生 API,
12
15
  核心是通过 Promise 来处理异步通信的结果回调.
@@ -37,22 +40,44 @@ export const initBridgeCore = () => {
37
40
 
38
41
  // 初始化AppBridge
39
42
  // Flutter回调处理
40
- (window as any).__onFlutterCallback = (payload) => {
41
- const { callbackId, status, data, error } = payload || {};
42
- const cb = cbs[callbackId];
43
+ // native bridge 回传数据
44
+ const resolveCallbackPromise = <T = unknown>(callbackId: string, data: unknown) => {
45
+ const resolve = promiseMap.get(callbackId);
43
46
 
44
- if (!cb) {
45
- console.error(`操作失败: callbackId==${callbackId}`);
46
- return;
47
- }
47
+ if (resolve) {
48
+ try {
49
+ let parsedData;
50
+ if (typeof data === 'string') {
51
+ try {
52
+ parsedData = JSON.parse(data)
53
+ } catch (parseError) {
54
+ parsedData = {
55
+ success: false,
56
+ message: `JSON解析失败: ${parseError instanceof Error ? parseError.message : 'Unknown error'}`,
57
+ }
58
+ }
59
+ } else {
60
+ parsedData = data
61
+ }
48
62
 
49
- if (status === 'success') {
50
- cb.resolve(data);
51
- } else {
52
- cb.reject(error);
63
+ // 成功时返回标准格式
64
+ resolve(parsedData)
65
+ } catch (error) {
66
+ // 异常时返回错误格式
67
+ resolve({
68
+ success: false,
69
+ message: error instanceof Error ? error.message : 'Unknown error',
70
+ })
71
+ } finally {
72
+ // 清理映射表
73
+ promiseMap.delete(callbackId)
74
+ }
53
75
  }
54
- delete cbs[callbackId];
55
- };
76
+ }
77
+
78
+ (window as any).resolveFlutterPromise = <T = unknown>(callbackId: string, data: unknown): void => {
79
+ resolveCallbackPromise<T>(callbackId, data)
80
+ }
56
81
  }
57
82
 
58
83
  // 通用桥接调用封装
@@ -0,0 +1,11 @@
1
+ export const app = {
2
+ onLaunch: () => {
3
+ console.log('app onLaunch');
4
+ },
5
+ onShow: () => {
6
+ console.log('app onShow');
7
+ },
8
+ onHide: () => {
9
+ console.log('app onHide');
10
+ },
11
+ }