This repository was archived by the owner on Feb 22, 2023. It is now read-only.
File tree Expand file tree Collapse file tree 6 files changed +56
-1
lines changed
packages/webview_flutter/webview_flutter_wkwebview Expand file tree Collapse file tree 6 files changed +56
-1
lines changed Original file line number Diff line number Diff line change @@ -451,6 +451,8 @@ NSObject<FlutterMessageCodec> *FWFNSObjectFlutterApiGetCodec(void);
451
451
changeKeys : (NSArray <FWFNSKeyValueChangeKeyEnumData *> *)changeKeys
452
452
changeValues : (NSArray <id> *)changeValues
453
453
completion : (void (^)(NSError *_Nullable))completion ;
454
+ - (void )disposeObjectWithIdentifier : (NSNumber *)identifier
455
+ completion : (void (^)(NSError *_Nullable))completion ;
454
456
@end
455
457
// / The codec used by FWFWKWebViewHostApi.
456
458
NSObject <FlutterMessageCodec> *FWFWKWebViewHostApiGetCodec (void );
Original file line number Diff line number Diff line change @@ -1989,6 +1989,17 @@ - (void)observeValueForObjectWithIdentifier:(NSNumber *)arg_identifier
1989
1989
completion (nil );
1990
1990
}];
1991
1991
}
1992
+ - (void )disposeObjectWithIdentifier : (NSNumber *)arg_identifier
1993
+ completion : (void (^)(NSError *_Nullable))completion {
1994
+ FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
1995
+ messageChannelWithName: @" dev.flutter.pigeon.NSObjectFlutterApi.dispose"
1996
+ binaryMessenger: self .binaryMessenger
1997
+ codec: FWFNSObjectFlutterApiGetCodec ()];
1998
+ [channel sendMessage: @[ arg_identifier ?: [NSNull null ] ]
1999
+ reply: ^(id reply) {
2000
+ completion (nil );
2001
+ }];
2002
+ }
1992
2003
@end
1993
2004
@interface FWFWKWebViewHostApiCodecReader : FlutterStandardReader
1994
2005
@end
Original file line number Diff line number Diff line change @@ -1770,6 +1770,7 @@ abstract class NSObjectFlutterApi {
1770
1770
int objectIdentifier,
1771
1771
List <NSKeyValueChangeKeyEnumData ?> changeKeys,
1772
1772
List <Object ?> changeValues);
1773
+ void dispose (int identifier);
1773
1774
static void setup (NSObjectFlutterApi ? api,
1774
1775
{BinaryMessenger ? binaryMessenger}) {
1775
1776
{
@@ -1806,6 +1807,25 @@ abstract class NSObjectFlutterApi {
1806
1807
});
1807
1808
}
1808
1809
}
1810
+ {
1811
+ final BasicMessageChannel <Object ?> channel = BasicMessageChannel <Object ?>(
1812
+ 'dev.flutter.pigeon.NSObjectFlutterApi.dispose' , codec,
1813
+ binaryMessenger: binaryMessenger);
1814
+ if (api == null ) {
1815
+ channel.setMessageHandler (null );
1816
+ } else {
1817
+ channel.setMessageHandler ((Object ? message) async {
1818
+ assert (message != null ,
1819
+ 'Argument for dev.flutter.pigeon.NSObjectFlutterApi.dispose was null.' );
1820
+ final List <Object ?> args = (message as List <Object ?>? )! ;
1821
+ final int ? arg_identifier = (args[0 ] as int ? );
1822
+ assert (arg_identifier != null ,
1823
+ 'Argument for dev.flutter.pigeon.NSObjectFlutterApi.dispose was null, expected non-null int.' );
1824
+ api.dispose (arg_identifier! );
1825
+ return ;
1826
+ });
1827
+ }
1828
+ }
1809
1829
}
1810
1830
}
1811
1831
Original file line number Diff line number Diff line change @@ -183,4 +183,9 @@ class NSObjectFlutterApiImpl extends NSObjectFlutterApi {
183
183
), changeValues),
184
184
);
185
185
}
186
+
187
+ @override
188
+ void dispose (int identifier) {
189
+ instanceManager.remove (identifier);
190
+ }
186
191
}
Original file line number Diff line number Diff line change @@ -510,6 +510,9 @@ abstract class NSObjectFlutterApi {
510
510
List <NSKeyValueChangeKeyEnumData ?> changeKeys,
511
511
List <Object ?> changeValues,
512
512
);
513
+
514
+ @ObjCSelector ('disposeObjectWithIdentifier:' )
515
+ void dispose (int identifier);
513
516
}
514
517
515
518
/// Mirror of WKWebView.
Original file line number Diff line number Diff line change @@ -90,7 +90,7 @@ void main() {
90
90
));
91
91
});
92
92
93
- test ('dispose' , () async {
93
+ test ('NSObjectHostApi. dispose' , () async {
94
94
int ? callbackIdentifier;
95
95
final InstanceManager instanceManager =
96
96
InstanceManager (onWeakReferenceRemoved: (int identifier) {
@@ -145,6 +145,20 @@ void main() {
145
145
]),
146
146
);
147
147
});
148
+
149
+ test ('NSObjectFlutterApi.dispose' , () {
150
+ FoundationFlutterApis .instance = FoundationFlutterApis (
151
+ instanceManager: instanceManager,
152
+ );
153
+
154
+ object = NSObject (instanceManager: instanceManager);
155
+ instanceManager.addHostCreatedInstance (object, 1 );
156
+
157
+ instanceManager.removeWeakReference (object);
158
+ FoundationFlutterApis .instance.object.dispose (1 );
159
+
160
+ expect (instanceManager.containsIdentifier (1 ), isFalse);
161
+ });
148
162
});
149
163
});
150
164
}
You can’t perform that action at this time.
0 commit comments