Unverified Commit 3c77c432 authored by Ren You's avatar Ren You Committed by GitHub

Revert "Remove some `dynamic's. (#75820)" (#76232)

This reverts commit 2d9a01a8.
parent 3cbe0ff1
......@@ -29,7 +29,7 @@ abstract class MessageCodec<T> {
/// Decodes the specified [message] from binary.
///
/// Returns null if the message is null.
T? decodeMessage(ByteData? message);
T decodeMessage(ByteData? message);
}
/// An command object representing the invocation of a named method.
......@@ -73,22 +73,16 @@ abstract class MethodCodec {
///
/// Throws [PlatformException], if [envelope] represents an error, otherwise
/// returns the enveloped result.
///
/// The type returned from [decodeEnvelope] is `dynamic` (not `Object?`),
/// which means *no type checking is performed on its return value*. It is
/// strongly recommended that the return value be immediately cast to a known
/// type to prevent runtime errors due to typos that the type checker could
/// otherwise catch.
dynamic decodeEnvelope(ByteData envelope);
/// Encodes a successful [result] into a binary envelope.
ByteData encodeSuccessEnvelope(Object? result);
ByteData encodeSuccessEnvelope(dynamic result);
/// Encodes an error result into a binary envelope.
///
/// The specified error [code], human-readable error [message] and error
/// [details] correspond to the fields of [PlatformException].
ByteData encodeErrorEnvelope({ required String code, String? message, Object? details});
ByteData encodeErrorEnvelope({ required String code, String? message, dynamic details});
}
......@@ -123,7 +117,7 @@ class PlatformException implements Exception {
final String? message;
/// Error details, possibly null.
final Object? details;
final dynamic details;
/// Native stacktrace for the error, possibly null.
/// This is strictly for native platform stacktrace.
......
......@@ -52,7 +52,7 @@ class BasicMessageChannel<T> {
///
/// Returns a [Future] which completes to the received response, which may
/// be null.
Future<T?> send(T message) async {
Future<T> send(T message) async {
return codec.decodeMessage(await binaryMessenger.send(name, codec.encodeMessage(message)));
}
......@@ -65,7 +65,7 @@ class BasicMessageChannel<T> {
///
/// The handler's return value is sent back to the platform plugins as a
/// message reply. It may be null.
void setMessageHandler(Future<T> Function(T? message)? handler) {
void setMessageHandler(Future<T> Function(T message)? handler) {
if (handler == null) {
binaryMessenger.setMessageHandler(name, null);
} else {
......@@ -86,7 +86,7 @@ class BasicMessageChannel<T> {
///
/// This is intended for testing. Messages intercepted in this manner are not
/// sent to platform plugins.
void setMockMessageHandler(Future<T> Function(T? message)? handler) {
void setMockMessageHandler(Future<T> Function(T message)? handler) {
if (handler == null) {
binaryMessenger.setMockMessageHandler(name, null);
} else {
......
......@@ -226,7 +226,7 @@ class RestorationManager extends ChangeNotifier {
bool _isReplacing = false;
Future<void> _getRootBucketFromEngine() async {
final Map<Object?, Object?>? config = await SystemChannels.restoration.invokeMethod<Map<Object?, Object?>>('get');
final Map<dynamic, dynamic>? config = await SystemChannels.restoration.invokeMethod<Map<dynamic, dynamic>>('get');
if (_pendingRootBucket == null) {
// The restoration data was obtained via other means (e.g. by calling
// [handleRestorationDataUpdate] while the request to the engine was
......@@ -237,9 +237,9 @@ class RestorationManager extends ChangeNotifier {
_parseAndHandleRestorationUpdateFromEngine(config);
}
void _parseAndHandleRestorationUpdateFromEngine(Map<Object?, Object?>? update) {
void _parseAndHandleRestorationUpdateFromEngine(Map<dynamic, dynamic>? update) {
handleRestorationUpdateFromEngine(
enabled: update != null && update['enabled']! as bool,
enabled: update != null && update['enabled'] as bool,
data: update == null ? null : update['data'] as Uint8List?,
);
}
......@@ -305,25 +305,25 @@ class RestorationManager extends ChangeNotifier {
);
}
Future<Object?> _methodHandler(MethodCall call) async {
Future<dynamic> _methodHandler(MethodCall call) async {
switch (call.method) {
case 'push':
_parseAndHandleRestorationUpdateFromEngine(call.arguments as Map<Object?, Object?>);
_parseAndHandleRestorationUpdateFromEngine(call.arguments as Map<dynamic, dynamic>);
break;
default:
throw UnimplementedError("${call.method} was invoked but isn't implemented by $runtimeType");
}
}
Map<Object?, Object?>? _decodeRestorationData(Uint8List? data) {
Map<dynamic, dynamic>? _decodeRestorationData(Uint8List? data) {
if (data == null) {
return null;
}
final ByteData encoded = data.buffer.asByteData(data.offsetInBytes, data.lengthInBytes);
return const StandardMessageCodec().decodeMessage(encoded) as Map<Object?, Object?>?;
return const StandardMessageCodec().decodeMessage(encoded) as Map<dynamic, dynamic>;
}
Uint8List _encodeRestorationData(Map<Object?, Object?> data) {
Uint8List _encodeRestorationData(Map<dynamic, dynamic> data) {
final ByteData encoded = const StandardMessageCodec().encodeMessage(data)!;
return encoded.buffer.asUint8List(encoded.offsetInBytes, encoded.lengthInBytes);
}
......@@ -505,7 +505,7 @@ class RestorationBucket {
required Object? debugOwner,
}) : assert(restorationId != null),
_restorationId = restorationId,
_rawData = <String, Object?>{} {
_rawData = <String, dynamic>{} {
assert(() {
_debugOwner = debugOwner;
return true;
......@@ -537,10 +537,10 @@ class RestorationBucket {
/// The `manager` argument must not be null.
RestorationBucket.root({
required RestorationManager manager,
required Map<Object?, Object?>? rawData,
required Map<dynamic, dynamic>? rawData,
}) : assert(manager != null),
_manager = manager,
_rawData = rawData ?? <Object?, Object?>{},
_rawData = rawData ?? <dynamic, dynamic>{},
_restorationId = 'root' {
assert(() {
_debugOwner = manager;
......@@ -567,7 +567,7 @@ class RestorationBucket {
assert(parent._rawChildren[restorationId] != null),
_manager = parent._manager,
_parent = parent,
_rawData = parent._rawChildren[restorationId]! as Map<Object?, Object?>,
_rawData = parent._rawChildren[restorationId] as Map<dynamic, dynamic>,
_restorationId = restorationId {
assert(() {
_debugOwner = debugOwner;
......@@ -578,7 +578,7 @@ class RestorationBucket {
static const String _childrenMapKey = 'c';
static const String _valuesMapKey = 'v';
final Map<Object?, Object?> _rawData;
final Map<dynamic, dynamic> _rawData;
/// The owner of the bucket that was provided when the bucket was claimed via
/// [claimChild].
......@@ -616,9 +616,9 @@ class RestorationBucket {
String _restorationId;
// Maps a restoration ID to the raw map representation of a child bucket.
Map<Object?, Object?> get _rawChildren => _rawData.putIfAbsent(_childrenMapKey, () => <Object?, Object?>{})! as Map<Object?, Object?>;
Map<dynamic, dynamic> get _rawChildren => _rawData.putIfAbsent(_childrenMapKey, () => <dynamic, dynamic>{}) as Map<dynamic, dynamic>;
// Maps a restoration ID to a value that is stored in this bucket.
Map<Object?, Object?> get _rawValues => _rawData.putIfAbsent(_valuesMapKey, () => <Object?, Object?>{})! as Map<Object?, Object?>;
Map<dynamic, dynamic> get _rawValues => _rawData.putIfAbsent(_valuesMapKey, () => <dynamic, dynamic>{}) as Map<dynamic, dynamic>;
// Get and store values.
......
......@@ -17,13 +17,13 @@ void checkEncoding<T>(MessageCodec<T> codec, T message, List<int> expectedBytes)
void checkEncodeDecode<T>(MessageCodec<T> codec, T message) {
final ByteData? encoded = codec.encodeMessage(message);
final T? decoded = codec.decodeMessage(encoded);
final T decoded = codec.decodeMessage(encoded);
if (message == null) {
expect(encoded, isNull);
expect(decoded, isNull);
} else {
expect(deepEquals(message, decoded), isTrue);
final ByteData? encodedAgain = codec.encodeMessage(decoded as T);
final ByteData? encodedAgain = codec.encodeMessage(decoded);
expect(
encodedAgain!.buffer.asUint8List(),
orderedEquals(encoded!.buffer.asUint8List()),
......
......@@ -56,7 +56,7 @@ void main() {
final List<String> loggedMessages = <String>[];
ServicesBinding.instance!.defaultBinaryMessenger
.setMessageHandler('test_send', (ByteData? data) {
loggedMessages.add(codec.decodeMessage(data)! as String);
loggedMessages.add(codec.decodeMessage(data) as String);
return Future<ByteData?>.value(null);
});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment