Skip to content

Commit 5cd8c93

Browse files
bparrishMinesmauricioluz
authored andcommitted
[webview_flutter_wkwebview] Adds the dispose method to NSObjectFlutterApi (flutter#5970)
1 parent 6bc581d commit 5cd8c93

File tree

6 files changed

+56
-1
lines changed

6 files changed

+56
-1
lines changed

packages/webview_flutter/webview_flutter_wkwebview/ios/Classes/FWFGeneratedWebKitApis.h

+2
Original file line numberDiff line numberDiff 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.
456458
NSObject<FlutterMessageCodec> *FWFWKWebViewHostApiGetCodec(void);

packages/webview_flutter/webview_flutter_wkwebview/ios/Classes/FWFGeneratedWebKitApis.m

+11
Original file line numberDiff line numberDiff 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

packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/web_kit.pigeon.dart

+20
Original file line numberDiff line numberDiff 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

packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation_api_impls.dart

+5
Original file line numberDiff line numberDiff 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
}

packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart

+3
Original file line numberDiff line numberDiff 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.

packages/webview_flutter/webview_flutter_wkwebview/test/src/foundation/foundation_test.dart

+15-1
Original file line numberDiff line numberDiff 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
}

0 commit comments

Comments
 (0)