提交 636bfc42 authored 作者: JarvanMo's avatar JarvanMo

refactor subscribe response

上级 9dd5f6b2
...@@ -5,17 +5,25 @@ Actually, almost every result from functions like `share` or `pay` which call `s ...@@ -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: So if you want get the real result you shall do like this:
```dart ```dart
fluwx.subscribeResponse((response) { var listener = (response) {
if (response is WeChatAuthResponse) { 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. 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. > 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 ### Images in WeChat
......
...@@ -6,17 +6,22 @@ ...@@ -6,17 +6,22 @@
为了获取真实的回调,你应该这样做: 为了获取真实的回调,你应该这样做:
```dart ```dart
fluwx.subscribeResponse((response) { var listener = (response) {
if (response is WeChatAuthResponse) { if (response is WeChatAuthResponse) {
} }
}); };
fluwx.addSubscriber(listener); // 订阅消息
fluwx.removeSubscriber(listener);// 取消订阅消息
``` ```
Or
```dart
var cancelable = fluwx.addSubscriber(listener);
cancelable.cancel(); // 取消订阅消息
```
> 笔记: 如果你的 `errCode = -1`, 那请阅读微信官方文档,因为-1的原因数不胜数. > 笔记: 如果你的 `errCode = -1`, 那请阅读微信官方文档,因为-1的原因数不胜数.
你也可以通过`fluwx.unsubscribeResponse`取消订阅消息。
### 图片 ### 图片
有四种内置 `WeChatImage`: 有四种内置 `WeChatImage`:
......
...@@ -39,7 +39,7 @@ class _ColdBootPageState extends State<ColdBootPage> { ...@@ -39,7 +39,7 @@ class _ColdBootPageState extends State<ColdBootPage> {
} }
}; };
fluwx.subscribeResponse(responseListener); fluwx.addSubscriber(responseListener);
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
......
...@@ -17,7 +17,7 @@ class _LaunchMiniProgramPageState extends State<LaunchMiniProgramPage> { ...@@ -17,7 +17,7 @@ class _LaunchMiniProgramPageState extends State<LaunchMiniProgramPage> {
void dispose() { void dispose() {
super.dispose(); super.dispose();
_result = null; _result = null;
fluwx.unsubscribeResponse(responseListener); fluwx.removeSubscriber(responseListener);
} }
@override @override
...@@ -33,7 +33,7 @@ class _LaunchMiniProgramPageState extends State<LaunchMiniProgramPage> { ...@@ -33,7 +33,7 @@ class _LaunchMiniProgramPageState extends State<LaunchMiniProgramPage> {
} }
}; };
fluwx.subscribeResponse(responseListener); fluwx.addSubscriber(responseListener);
} }
@override @override
......
...@@ -20,7 +20,7 @@ class _PayPageState extends State<PayPage> { ...@@ -20,7 +20,7 @@ class _PayPageState extends State<PayPage> {
@override @override
void dispose() { void dispose() {
super.dispose(); super.dispose();
fluwx.unsubscribeResponse(responseListener); fluwx.removeSubscriber(responseListener);
} }
@override @override
...@@ -33,7 +33,7 @@ class _PayPageState extends State<PayPage> { ...@@ -33,7 +33,7 @@ class _PayPageState extends State<PayPage> {
}); });
} }
}; };
fluwx.subscribeResponse(responseListener); fluwx.addSubscriber(responseListener);
} }
@override @override
......
...@@ -12,6 +12,22 @@ class _ShareTextPageState extends State<ShareTextPage> { ...@@ -12,6 +12,22 @@ class _ShareTextPageState extends State<ShareTextPage> {
String _text = 'share text from fluwx'; String _text = 'share text from fluwx';
WeChatScene scene = WeChatScene.session; WeChatScene scene = WeChatScene.session;
Fluwx fluwx = Fluwx(); 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
...@@ -20,8 +36,10 @@ class _ShareTextPageState extends State<ShareTextPage> { ...@@ -20,8 +36,10 @@ class _ShareTextPageState extends State<ShareTextPage> {
title: const Text('ShareText'), title: const Text('ShareText'),
actions: <Widget>[ actions: <Widget>[
IconButton( IconButton(
icon: Icon(Icons.share, color: Colors.white), icon: const Icon(Icons.share, color: Colors.white),
onPressed: _shareText, onPressed: (){
_shareText();
},
), ),
], ],
), ),
......
...@@ -25,6 +25,7 @@ library fluwx; ...@@ -25,6 +25,7 @@ library fluwx;
export 'src/fluwx.dart'; export 'src/fluwx.dart';
export 'src/foundation/arguments.dart'; export 'src/foundation/arguments.dart';
export 'src/foundation/cancelable.dart' hide FluwxCancelableImpl;
export 'src/response/wechat_response.dart'; export 'src/response/wechat_response.dart';
export 'src/wechat_enums.dart'; export 'src/wechat_enums.dart';
export 'src/wechat_file.dart' hide FileSchema; export 'src/wechat_file.dart' hide FileSchema;
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
import 'dart:async'; import 'dart:async';
import 'foundation/arguments.dart'; import 'foundation/arguments.dart';
import 'foundation/cancelable.dart';
import 'method_channel/fluwx_platform_interface.dart'; import 'method_channel/fluwx_platform_interface.dart';
import 'response/wechat_response.dart'; import 'response/wechat_response.dart';
...@@ -27,7 +28,7 @@ class Fluwx { ...@@ -27,7 +28,7 @@ class Fluwx {
late final WeakReference<void Function(WeChatResponse event)> late final WeakReference<void Function(WeChatResponse event)>
responseListener; responseListener;
final List<Function(WeChatResponse response)> _responseListeners = []; final List<WeChatResponseSubscriber> _responseListeners = [];
Fluwx() { Fluwx() {
responseListener = WeakReference((event) { responseListener = WeakReference((event) {
...@@ -103,17 +104,37 @@ class Fluwx { ...@@ -103,17 +104,37 @@ class Fluwx {
/// Only works on iOS in debug mode. /// Only works on iOS in debug mode.
/// Check if your app can work with WeChat correctly. /// Check if your app can work with WeChat correctly.
/// Please make sure [registerApi] returns true before self check. /// Please make sure [registerApi] returns true before self check.
Future<void> selfCheck() async{ Future<void> selfCheck() async {
return FluwxPlatform.instance.selfCheck(); return FluwxPlatform.instance.selfCheck();
} }
/// Subscribe responses from WeChat /// 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); _responseListeners.add(listener);
return FluwxCancelableImpl(onCancel: () {
removeSubscriber(listener);
});
} }
/// Unsubscribe responses from WeChat /// 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); _responseListeners.remove(listener);
} }
/// remove all existing
clearSubscribers() {
_responseListeners.clear();
}
} }
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();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论