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

Merge pull request #639 from OpenFlutter/fix/list

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