Unverified 提交 e273d76f authored 作者: JarvanMo's avatar JarvanMo 提交者: GitHub

Merge pull request #639 from OpenFlutter/fix/list

🐛 Construct listener gracefully
...@@ -25,21 +25,22 @@ import 'method_channel/fluwx_platform_interface.dart'; ...@@ -25,21 +25,22 @@ import 'method_channel/fluwx_platform_interface.dart';
import 'response/wechat_response.dart'; import 'response/wechat_response.dart';
class Fluwx { class Fluwx {
late final WeakReference<void Function(WeChatResponse event)> Fluwx() {
responseListener; _responseSubscription = FluwxPlatform.instance.responseEventHandler.listen(
_responseEventListener,
onDone: () {
_responseSubscription?.cancel();
},
);
}
final List<WeChatResponseSubscriber> _responseListeners = []; final _responseListeners = <WeChatResponseSubscriber>[];
StreamSubscription? _responseSubscription;
Fluwx() { void _responseEventListener(WeChatResponse event) {
responseListener = WeakReference((event) { for (final listener in _responseListeners.toList()) {
for (var listener in _responseListeners) {
listener(event); listener(event);
} }
});
final target = responseListener.target;
if (target != null) {
FluwxPlatform.instance.responseEventHandler.listen(target);
}
} }
Future<bool> get isWeChatInstalled => Future<bool> get isWeChatInstalled =>
...@@ -128,17 +129,17 @@ class Fluwx { ...@@ -128,17 +129,17 @@ class Fluwx {
/// Unsubscribe responses from WeChat /// Unsubscribe responses from WeChat
@Deprecated("use [removeSubscriber] instead") @Deprecated("use [removeSubscriber] instead")
unsubscribeResponse(WeChatResponseSubscriber listener) { void unsubscribeResponse(WeChatResponseSubscriber listener) {
removeSubscriber(listener); removeSubscriber(listener);
} }
/// remove your subscriber from WeChat /// remove your subscriber from WeChat
removeSubscriber(WeChatResponseSubscriber listener) { void removeSubscriber(WeChatResponseSubscriber listener) {
_responseListeners.remove(listener); _responseListeners.remove(listener);
} }
/// remove all existing /// remove all existing
clearSubscribers() { void clearSubscribers() {
_responseListeners.clear(); _responseListeners.clear();
} }
} }
...@@ -17,20 +17,19 @@ ...@@ -17,20 +17,19 @@
* the License. * the License.
*/ */
import '../response/wechat_response.dart'; import 'package:flutter/foundation.dart';
typedef WeChatResponseSubscriber = Function(WeChatResponse response);
mixin FluwxCancelable { mixin FluwxCancelable {
cancel(); void cancel();
} }
class FluwxCancelableImpl implements FluwxCancelable { class FluwxCancelableImpl implements FluwxCancelable {
final Function onCancel; const FluwxCancelableImpl({required this.onCancel});
FluwxCancelableImpl({required this.onCancel}); final VoidCallback onCancel;
@override @override
cancel() { void cancel() {
onCancel(); onCancel();
} }
} }
...@@ -22,6 +22,7 @@ import 'dart:typed_data'; ...@@ -22,6 +22,7 @@ import 'dart:typed_data';
const String _errCode = 'errCode'; const String _errCode = 'errCode';
const String _errStr = 'errStr'; const String _errStr = 'errStr';
typedef WeChatResponseSubscriber = void Function(WeChatResponse response);
typedef _WeChatResponseInvoker = WeChatResponse Function(Map argument); typedef _WeChatResponseInvoker = WeChatResponse Function(Map argument);
Map<String, _WeChatResponseInvoker> _nameAndResponseMapper = { Map<String, _WeChatResponseInvoker> _nameAndResponseMapper = {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论