@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 +377 -0
- package/index.html +7 -0
- package/lib/index.js +64 -18
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +64 -18
- package/lib/index.umd.js.map +1 -1
- package/lib/src/api/index.d.ts +2 -1
- package/lib/src/api/setNavigationBarTitle.d.ts +14 -0
- package/lib/src/lifecycle/app.d.ts +5 -0
- package/lib/types/src/api/index.d.ts +2 -1
- package/lib/types/src/api/setNavigationBarTitle.d.ts +14 -0
- package/lib/types/src/lifecycle/app.d.ts +5 -0
- package/package.json +1 -1
- package/src/api/index.ts +2 -1
- package/src/api/setNavigationBarTitle.ts +27 -0
- package/src/core/bridgeCore.ts +38 -13
- package/src/lifecycle/app.ts +11 -0
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
|
-
|
|
72
|
-
|
|
73
|
-
var
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAI,SAAS,GAAG,IAAI,CAAC;AAEd,IAAM,cAAc,GAAG,YAAA;;IAE5B,IAAI,IAAI,GAAG,CAAC,CAAC;IAGb,IAAM,OAAO,GAAG,KAAK,CAAC;;AAGtB,IAAA,IAAM,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAA;AAErD;;;;;AAKE;AACF,IAAA,SAAS,GAAG;QACV,MAAM,EAAA,UAAC,IAAI,EAAE,IAAS,EAAA;;AAAT,YAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAS,GAAA,EAAA,CAAA,EAAA;AAGpB,YAAA,IAAI,CAAE,MAAc,CAAC,UAAU,IAAI,OAAQ,MAAc,CAAC,UAAU,CAAC,WAAW,KAAK,UAAU,EAAE;AAC7F,gBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAChC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;aACxD;AACD,YAAA,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM,EAAA;;gBAEjC,IAAM,EAAE,GAAG,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE3B,MAAc,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;AAClD,oBAAA,IAAI,EAAA,IAAA;AACJ,oBAAA,IAAI,EAAA,IAAA;oBACJ,UAAU,EAAE,EAAE;AACd,oBAAA,OAAO,EAAA,OAAA;AACV,iBAAA,CAAC,CAAC,CAAC;AACN,aAAC,CAAC,CAAC;SACJ;KACF,CAAC;;;;AAKF,IAAA,IAAM,sBAAsB,GAAG,UAAc,UAAkB,EAAE,IAAa,EAAA;QAC5E,IAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,OAAO,EAAE;AACX,YAAA,IAAI;gBACF,IAAI,UAAU,SAAA,CAAC;AACf,gBAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,oBAAA,IAAI;AACF,wBAAA,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;qBAC9B;oBAAC,OAAO,UAAU,EAAE;AACnB,wBAAA,UAAU,GAAG;AACX,4BAAA,OAAO,EAAE,KAAK;AACd,4BAAA,OAAO,EAAE,gCAAA,CAAA,MAAA,CAAa,UAAU,YAAY,KAAK,GAAG,UAAU,CAAC,OAAO,GAAG,eAAe,CAAE;yBAC3F,CAAA;qBACF;iBACF;qBAAM;oBACL,UAAU,GAAG,IAAI,CAAA;iBAClB;;gBAGD,OAAO,CAAC,UAAU,CAAC,CAAA;aACpB;YAAC,OAAO,KAAK,EAAE;;AAEd,gBAAA,OAAO,CAAC;AACN,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,eAAe;AAClE,iBAAA,CAAC,CAAA;aACH;oBAAS;;AAER,gBAAA,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;aAC9B;SACF;AACH,KAAC,CAAA;AAEA,IAAA,MAAc,CAAC,qBAAqB,GAAG,UAAc,UAAkB,EAAE,IAAa,EAAA;AACrF,QAAA,sBAAsB,CAAI,UAAU,EAAE,IAAI,CAAC,CAAA;AAC7C,KAAC,CAAA;AACH,CAAC,CAAA;AAED;AACO,IAAM,MAAM,GAAG,UAAC,IAAI,EAAE,MAAY,EAAE,MAAO,EAAA;AACjD,IAAA,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;SACnC,IAAI,CAAC,UAAA,IAAI,EAAA,EAAI,OAAA,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAlD,EAAkD,CAAC;SAChE,KAAK,CAAC,UAAA,GAAG,EAAA;AACT,QAAA,MAAM,GAAG,CAAC;AACX,KAAC,CAAC,CAAC;AACL,CAAC;;ACzED;AACO,IAAM,WAAW,GAAG,UAAC,OAA2B,EAAA;IAC7C,IAAA,OAAO,GAAoC,OAAO,CAAA,OAA3C,EAAE,IAAI,GAA8B,OAAO,CAArC,IAAA,EAAE,QAAQ,GAAoB,OAAO,SAA3B,EAAK,UAAU,UAAK,OAAO,EAApD,CAA0C,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,CAAF,CAAa;IAC3D,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAG,IAAI,CAAC,CAAC;SAChB;aAAM;AACN,YAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,EAAI,CAAC;SACT;KACD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;;AChBD;AACO,IAAM,WAAW,GAAG,UAAC,OAA2B,EAAA;IAC9C,IAAA,OAAO,GAAoC,OAAO,CAAA,OAA3C,EAAE,IAAI,GAA8B,OAAO,CAArC,IAAA,EAAE,QAAQ,GAAoB,OAAO,SAA3B,EAAK,UAAU,UAAK,OAAO,EAApD,CAA0C,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,CAAF,CAAa;IAC3D,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,EAAA;QAC1C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAG,IAAI,CAAC,CAAC;SAChB;aAAM;AACN,YAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,EAAI,CAAC;SACT;KACD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;;ACbD;;;;;;;;AAQG;AACI,IAAM,YAAY,GAAG,UAAC,OAA4B,EAAA;;AACxD,IAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,QAAA,CAAA,EAAA,GAAA,OAAO,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAI,CAAC;QACjB,OAAO;KACP;IACD,MAAM,CAAC,cAAc,EAAE;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,KAAA,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACtB,SAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACnB,SAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;;ACjBM,IAAM,KAAK,GAAG,UAAC,OAAqB,EAAA;IAClC,IAAA,OAAO,GAAoC,OAAO,CAAA,OAA3C,EAAE,IAAI,GAA8B,OAAO,CAArC,IAAA,EAAE,QAAQ,GAAoB,OAAO,SAA3B,EAAK,UAAU,UAAK,OAAO,EAApD,CAA0C,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,CAAF,CAAa;IAC3D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAG,IAAI,CAAC,CAAC;SAChB;aAAM;AACN,YAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,EAAI,CAAC;SACT;KACD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;;ACVM,IAAM,UAAU,GAAG,UAAC,OAA0B,EAAA;IAC5C,IAAA,OAAO,GAAoC,OAAO,CAAA,OAA3C,EAAE,IAAI,GAA8B,OAAO,CAArC,IAAA,EAAE,QAAQ,GAAoB,OAAO,SAA3B,EAAK,UAAU,UAAK,OAAO,EAApD,CAA0C,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,CAAF,CAAa;IAC3D,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,EAAI,CAAC;SACZ;aAAM;AACN,YAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,EAAI,CAAC;SACT;KACD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;;ACTD;AACO,IAAM,OAAO,GAAG,UAAC,OAAuB,EAAA;IACtC,IAAA,OAAO,GAAoC,OAAO,CAAA,OAA3C,EAAE,IAAI,GAA8B,OAAO,CAArC,IAAA,EAAE,QAAQ,GAAoB,OAAO,SAA3B,EAAK,UAAU,UAAK,OAAO,EAApD,CAA0C,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,CAAF,CAAa;IAC3D,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,EAAI,CAAC;SACZ;aAAM;AACN,YAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,EAAI,CAAC;SACT;KACD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;;ACfD;AACO,IAAM,YAAY,GAAG,UAAC,OAAqB,EAAA;IACG,OAAO,CAAA,OAA3C,MAAE,IAAI,GAA8B,OAAO,CAArC,IAAA,CAAA,CAAE,QAAQ,GAAoB,OAAO,SAA3B,CAAK,CAAA,UAAU,UAAK,OAAO,EAApD,CAA0C,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAW;IAC5D,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;;;;;;KAMvC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAElC,CAAC;;ACRD;;;;;;;;AAQG;AACI,IAAM,qBAAqB,GAAG,UAAC,OAAkC,EAAA;;AACvE,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACnB,QAAA,CAAA,EAAA,GAAA,OAAO,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAI,CAAC;QACjB,OAAO;KACP;IACD,MAAM,CAAC,gBAAgB,EAAE;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,KAAA,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACtB,SAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACnB,SAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;;;;;;;;;;;;;;ACvBD,IAAM,UAAU,GAAG,YAAA;AACjB,IAAA,cAAc,EAAE,CAAA;AAEhB,IAAA,IAAI,CAAE,MAAc,CAAC,GAAG,EAAE;AACvB,QAAA,MAAc,CAAC,GAAG,GAAG,EAAE,CAAA;KACzB;AACD,IAAA,IAAM,MAAM,GAAS,MAAc,CAAC,GAAG,CAAA;AACvC,IAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED,UAAU,EAAE"}
|
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
|
-
|
|
77
|
-
|
|
78
|
-
var
|
|
79
|
-
if (
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
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
|
|
package/lib/index.umd.js.map
CHANGED
|
@@ -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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"}
|
package/lib/src/api/index.d.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
|
@@ -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
|
-
|
|
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;
|
package/package.json
CHANGED
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
|
+
}
|
package/src/core/bridgeCore.ts
CHANGED
|
@@ -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
|
-
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
+
// native bridge 回传数据
|
|
44
|
+
const resolveCallbackPromise = <T = unknown>(callbackId: string, data: unknown) => {
|
|
45
|
+
const resolve = promiseMap.get(callbackId);
|
|
43
46
|
|
|
44
|
-
if (
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
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
|
// 通用桥接调用封装
|