diff --git a/doc/BASIC_KNOWLEDGE.md b/doc/BASIC_KNOWLEDGE.md index e2768a45..86a871a4 100644 --- a/doc/BASIC_KNOWLEDGE.md +++ b/doc/BASIC_KNOWLEDGE.md @@ -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 diff --git a/doc/BASIC_KNOWLEDGE_CN.md b/doc/BASIC_KNOWLEDGE_CN.md index 1e9bf51e..f8337c46 100644 --- a/doc/BASIC_KNOWLEDGE_CN.md +++ b/doc/BASIC_KNOWLEDGE_CN.md @@ -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`: diff --git a/example/lib/pages/cold_boot_page.dart b/example/lib/pages/cold_boot_page.dart index e2db5770..4d1f639e 100644 --- a/example/lib/pages/cold_boot_page.dart +++ b/example/lib/pages/cold_boot_page.dart @@ -39,7 +39,7 @@ class _ColdBootPageState extends State { } }; - fluwx.subscribeResponse(responseListener); + fluwx.addSubscriber(responseListener); } @override Widget build(BuildContext context) { diff --git a/example/lib/pages/launch_mini_program_page.dart b/example/lib/pages/launch_mini_program_page.dart index bbeb2e7e..43a791c5 100644 --- a/example/lib/pages/launch_mini_program_page.dart +++ b/example/lib/pages/launch_mini_program_page.dart @@ -17,7 +17,7 @@ class _LaunchMiniProgramPageState extends State { void dispose() { super.dispose(); _result = null; - fluwx.unsubscribeResponse(responseListener); + fluwx.removeSubscriber(responseListener); } @override @@ -33,7 +33,7 @@ class _LaunchMiniProgramPageState extends State { } }; - fluwx.subscribeResponse(responseListener); + fluwx.addSubscriber(responseListener); } @override diff --git a/example/lib/pages/pay_page.dart b/example/lib/pages/pay_page.dart index f17e9d4d..fd293126 100644 --- a/example/lib/pages/pay_page.dart +++ b/example/lib/pages/pay_page.dart @@ -20,7 +20,7 @@ class _PayPageState extends State { @override void dispose() { super.dispose(); - fluwx.unsubscribeResponse(responseListener); + fluwx.removeSubscriber(responseListener); } @override @@ -33,7 +33,7 @@ class _PayPageState extends State { }); } }; - fluwx.subscribeResponse(responseListener); + fluwx.addSubscriber(responseListener); } @override diff --git a/example/lib/pages/share_text_page.dart b/example/lib/pages/share_text_page.dart index 4043b125..2cf9ab31 100644 --- a/example/lib/pages/share_text_page.dart +++ b/example/lib/pages/share_text_page.dart @@ -12,6 +12,22 @@ class _ShareTextPageState extends State { 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) { @@ -20,8 +36,10 @@ class _ShareTextPageState extends State { title: const Text('ShareText'), actions: [ IconButton( - icon: Icon(Icons.share, color: Colors.white), - onPressed: _shareText, + icon: const Icon(Icons.share, color: Colors.white), + onPressed: (){ + _shareText(); + }, ), ], ), diff --git a/lib/fluwx.dart b/lib/fluwx.dart index 299646e1..3b9cc21b 100644 --- a/lib/fluwx.dart +++ b/lib/fluwx.dart @@ -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; diff --git a/lib/src/fluwx.dart b/lib/src/fluwx.dart index 34074e91..560ebc8d 100644 --- a/lib/src/fluwx.dart +++ b/lib/src/fluwx.dart @@ -20,6 +20,7 @@ import 'dart:async'; import 'foundation/arguments.dart'; +import 'foundation/cancelable.dart'; import 'method_channel/fluwx_platform_interface.dart'; import 'response/wechat_response.dart'; @@ -27,7 +28,7 @@ class Fluwx { late final WeakReference responseListener; - final List _responseListeners = []; + final List _responseListeners = []; Fluwx() { responseListener = WeakReference((event) { @@ -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 selfCheck() async{ + Future 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(); + } } diff --git a/lib/src/foundation/cancelable.dart b/lib/src/foundation/cancelable.dart new file mode 100644 index 00000000..0bef7c8d --- /dev/null +++ b/lib/src/foundation/cancelable.dart @@ -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(); + } +}