diff --git a/example/lib/main.dart b/example/lib/main.dart index c217f08..84ed2d4 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -283,7 +283,7 @@ class _MyHomePageState extends State { )); } - _onSessionRequest(int id, WCPeerMeta peerMeta) { + _onSessionRequest(int id, String peerId, WCPeerMeta peerMeta) { showDialog( context: context, builder: (_) => SessionRequestView( diff --git a/lib/models/jsonrpc/json_rpc_request.dart b/lib/models/jsonrpc/json_rpc_request.dart index 9a52700..bd0fa69 100644 --- a/lib/models/jsonrpc/json_rpc_request.dart +++ b/lib/models/jsonrpc/json_rpc_request.dart @@ -6,6 +6,7 @@ part 'json_rpc_request.g.dart'; @JsonSerializable() class JsonRpcRequest { + @JsonKey(fromJson: _idFromValue) final int id; final String jsonrpc; @JsonKey(unknownEnumValue: JsonKey.nullForUndefinedEnumValue) @@ -18,6 +19,8 @@ class JsonRpcRequest { required this.params, }); + static int _idFromValue(value) => int.tryParse(value.toString()) ?? 0; + factory JsonRpcRequest.fromJson(Map json) => _$JsonRpcRequestFromJson(json); Map toJson() => _$JsonRpcRequestToJson(this); diff --git a/lib/models/jsonrpc/json_rpc_request.g.dart b/lib/models/jsonrpc/json_rpc_request.g.dart index fc328fa..f1e6379 100644 --- a/lib/models/jsonrpc/json_rpc_request.g.dart +++ b/lib/models/jsonrpc/json_rpc_request.g.dart @@ -8,7 +8,7 @@ part of 'json_rpc_request.dart'; JsonRpcRequest _$JsonRpcRequestFromJson(Map json) => JsonRpcRequest( - id: json['id'] as int, + id: JsonRpcRequest._idFromValue(json['id']), jsonrpc: json['jsonrpc'] as String? ?? JSONRPC_VERSION, method: $enumDecodeNullable(_$WCMethodEnumMap, json['method'], unknownValue: JsonKey.nullForUndefinedEnumValue), diff --git a/lib/wc_client.dart b/lib/wc_client.dart index b5515f1..351629d 100644 --- a/lib/wc_client.dart +++ b/lib/wc_client.dart @@ -24,7 +24,8 @@ import 'package:wallet_connect/wc_session_store.dart'; import 'package:web_socket_channel/io.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; -typedef SessionRequest = void Function(int id, WCPeerMeta peerMeta); +typedef SessionRequest = void Function( + int id, String peerId, WCPeerMeta peerMeta); typedef SocketError = void Function(dynamic message); typedef SocketClose = void Function(int? code, String? reason); typedef EthSign = void Function(int id, WCEthereumSignMessage message); @@ -323,7 +324,7 @@ class WCClient { _remotePeerId = param.peerId; _remotePeerMeta = param.peerMeta; _chainId = param.chainId; - onSessionRequest?.call(request.id, param.peerMeta); + onSessionRequest?.call(request.id, param.peerId, param.peerMeta); break; case WCMethod.SESSION_UPDATE: final param = WCSessionUpdate.fromJson(request.params!.first);