Skip to content

Commit

Permalink
refactor subscribe response
Browse files Browse the repository at this point in the history
  • Loading branch information
JarvanMo committed May 17, 2023
1 parent 9dd5f6b commit 636bfc4
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 18 deletions.
14 changes: 11 additions & 3 deletions doc/BASIC_KNOWLEDGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,25 @@ Actually, almost every result from functions like `share` or `pay` which call `s
So if you want get the real result you shall do like this:

```dart
fluwx.subscribeResponse((response) {
var listener = (response) {
if (response is WeChatAuthResponse) {
}
});
};
fluwx.addSubscriber(listener); // subscribe response from WeChat
fluwx.removeSubscriber(listener);// unsubscribe response from WeChat
```

Or
```dart
var cancelable = fluwx.addSubscriber(listener);
cancelable.cancel(); // unsubscribe response from WeChat
```
Take a look at subclasses of `WeChatResponse` for help.

> NOTE: If you get `errCode = -1`, please read the WeChatSDK document for help. There are to many cases lead to that.
You can also unsubscribe response by calling `fluwx.subscribeResponse`.


### Images in WeChat

Expand Down
13 changes: 9 additions & 4 deletions doc/BASIC_KNOWLEDGE_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,22 @@
为了获取真实的回调,你应该这样做:

```dart
fluwx.subscribeResponse((response) {
var listener = (response) {
if (response is WeChatAuthResponse) {
}
});
};
fluwx.addSubscriber(listener); // 订阅消息
fluwx.removeSubscriber(listener);// 取消订阅消息
```

Or
```dart
var cancelable = fluwx.addSubscriber(listener);
cancelable.cancel(); // 取消订阅消息
```
> 笔记: 如果你的 `errCode = -1`, 那请阅读微信官方文档,因为-1的原因数不胜数.
你也可以通过`fluwx.unsubscribeResponse`取消订阅消息。

### 图片

有四种内置 `WeChatImage`:
Expand Down
2 changes: 1 addition & 1 deletion example/lib/pages/cold_boot_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class _ColdBootPageState extends State<ColdBootPage> {
}
};

fluwx.subscribeResponse(responseListener);
fluwx.addSubscriber(responseListener);
}
@override
Widget build(BuildContext context) {
Expand Down
4 changes: 2 additions & 2 deletions example/lib/pages/launch_mini_program_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class _LaunchMiniProgramPageState extends State<LaunchMiniProgramPage> {
void dispose() {
super.dispose();
_result = null;
fluwx.unsubscribeResponse(responseListener);
fluwx.removeSubscriber(responseListener);
}

@override
Expand All @@ -33,7 +33,7 @@ class _LaunchMiniProgramPageState extends State<LaunchMiniProgramPage> {
}
};

fluwx.subscribeResponse(responseListener);
fluwx.addSubscriber(responseListener);
}

@override
Expand Down
4 changes: 2 additions & 2 deletions example/lib/pages/pay_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class _PayPageState extends State<PayPage> {
@override
void dispose() {
super.dispose();
fluwx.unsubscribeResponse(responseListener);
fluwx.removeSubscriber(responseListener);
}

@override
Expand All @@ -33,7 +33,7 @@ class _PayPageState extends State<PayPage> {
});
}
};
fluwx.subscribeResponse(responseListener);
fluwx.addSubscriber(responseListener);
}

@override
Expand Down
22 changes: 20 additions & 2 deletions example/lib/pages/share_text_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,22 @@ class _ShareTextPageState extends State<ShareTextPage> {
String _text = 'share text from fluwx';
WeChatScene scene = WeChatScene.session;
Fluwx fluwx = Fluwx();
late FluwxCancelable cancelable;

@override
void initState() {
super.initState();

cancelable = fluwx.addSubscriber((response) {
debugPrint("response is ${response.isSuccessful}");
});
}

@override
void dispose() {
super.dispose();
cancelable.cancel();
}

@override
Widget build(BuildContext context) {
Expand All @@ -20,8 +36,10 @@ class _ShareTextPageState extends State<ShareTextPage> {
title: const Text('ShareText'),
actions: <Widget>[
IconButton(
icon: Icon(Icons.share, color: Colors.white),
onPressed: _shareText,
icon: const Icon(Icons.share, color: Colors.white),
onPressed: (){
_shareText();
},
),
],
),
Expand Down
1 change: 1 addition & 0 deletions lib/fluwx.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ library fluwx;

export 'src/fluwx.dart';
export 'src/foundation/arguments.dart';
export 'src/foundation/cancelable.dart' hide FluwxCancelableImpl;
export 'src/response/wechat_response.dart';
export 'src/wechat_enums.dart';
export 'src/wechat_file.dart' hide FileSchema;
29 changes: 25 additions & 4 deletions lib/src/fluwx.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,15 @@
import 'dart:async';

import 'foundation/arguments.dart';
import 'foundation/cancelable.dart';
import 'method_channel/fluwx_platform_interface.dart';
import 'response/wechat_response.dart';

class Fluwx {
late final WeakReference<void Function(WeChatResponse event)>
responseListener;

final List<Function(WeChatResponse response)> _responseListeners = [];
final List<WeChatResponseSubscriber> _responseListeners = [];

Fluwx() {
responseListener = WeakReference((event) {
Expand Down Expand Up @@ -103,17 +104,37 @@ class Fluwx {
/// Only works on iOS in debug mode.
/// Check if your app can work with WeChat correctly.
/// Please make sure [registerApi] returns true before self check.
Future<void> selfCheck() async{
Future<void> selfCheck() async {
return FluwxPlatform.instance.selfCheck();
}

/// Subscribe responses from WeChat
subscribeResponse(Function(WeChatResponse response) listener) {
@Deprecated("use [addSubscriber] instead")
FluwxCancelable subscribeResponse(WeChatResponseSubscriber listener) {
return addSubscriber(listener);
}

/// Add a subscriber to subscribe responses from WeChat
FluwxCancelable addSubscriber(WeChatResponseSubscriber listener) {
_responseListeners.add(listener);
return FluwxCancelableImpl(onCancel: () {
removeSubscriber(listener);
});
}

/// Unsubscribe responses from WeChat
unsubscribeResponse(Function(WeChatResponse response) listener) {
@Deprecated("use [removeSubscriber] instead")
unsubscribeResponse(WeChatResponseSubscriber listener) {
removeSubscriber(listener);
}

/// remove your subscriber from WeChat
removeSubscriber(WeChatResponseSubscriber listener) {
_responseListeners.remove(listener);
}

/// remove all existing
clearSubscribers() {
_responseListeners.clear();
}
}
17 changes: 17 additions & 0 deletions lib/src/foundation/cancelable.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import '../response/wechat_response.dart';

typedef WeChatResponseSubscriber = Function(WeChatResponse response);
mixin FluwxCancelable {
cancel();
}

class FluwxCancelableImpl implements FluwxCancelable {
final Function onCancel;

FluwxCancelableImpl({required this.onCancel});

@override
cancel() {
onCancel();
}
}

0 comments on commit 636bfc4

Please sign in to comment.