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);
451451 changeKeys : (NSArray <FWFNSKeyValueChangeKeyEnumData *> *)changeKeys
452452 changeValues : (NSArray <id> *)changeValues
453453 completion : (void (^)(NSError *_Nullable))completion ;
454+ - (void )disposeObjectWithIdentifier : (NSNumber *)identifier
455+ completion : (void (^)(NSError *_Nullable))completion ;
454456@end
455457// / The codec used by FWFWKWebViewHostApi.
456458NSObject <FlutterMessageCodec> *FWFWKWebViewHostApiGetCodec (void );
Original file line number Diff line number Diff line change @@ -1989,6 +1989,17 @@ - (void)observeValueForObjectWithIdentifier:(NSNumber *)arg_identifier
19891989 completion (nil );
19901990 }];
19911991}
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+ }
19922003@end
19932004@interface FWFWKWebViewHostApiCodecReader : FlutterStandardReader
19942005@end
Original file line number Diff line number Diff line change @@ -1770,6 +1770,7 @@ abstract class NSObjectFlutterApi {
17701770 int objectIdentifier,
17711771 List <NSKeyValueChangeKeyEnumData ?> changeKeys,
17721772 List <Object ?> changeValues);
1773+ void dispose (int identifier);
17731774 static void setup (NSObjectFlutterApi ? api,
17741775 {BinaryMessenger ? binaryMessenger}) {
17751776 {
@@ -1806,6 +1807,25 @@ abstract class NSObjectFlutterApi {
18061807 });
18071808 }
18081809 }
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+ }
18091829 }
18101830}
18111831
Original file line number Diff line number Diff line change @@ -183,4 +183,9 @@ class NSObjectFlutterApiImpl extends NSObjectFlutterApi {
183183 ), changeValues),
184184 );
185185 }
186+
187+ @override
188+ void dispose (int identifier) {
189+ instanceManager.remove (identifier);
190+ }
186191}
Original file line number Diff line number Diff line change @@ -510,6 +510,9 @@ abstract class NSObjectFlutterApi {
510510 List <NSKeyValueChangeKeyEnumData ?> changeKeys,
511511 List <Object ?> changeValues,
512512 );
513+
514+ @ObjCSelector ('disposeObjectWithIdentifier:' )
515+ void dispose (int identifier);
513516}
514517
515518/// Mirror of WKWebView.
Original file line number Diff line number Diff line change @@ -90,7 +90,7 @@ void main() {
9090 ));
9191 });
9292
93- test ('dispose' , () async {
93+ test ('NSObjectHostApi. dispose' , () async {
9494 int ? callbackIdentifier;
9595 final InstanceManager instanceManager =
9696 InstanceManager (onWeakReferenceRemoved: (int identifier) {
@@ -145,6 +145,20 @@ void main() {
145145 ]),
146146 );
147147 });
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+ });
148162 });
149163 });
150164}
You can’t perform that action at this time.
0 commit comments