Skip to content

Commit fb09cbf

Browse files
authored
Merge pull request #135 from WalletConnect/bugfix/refactor_switch_network_logic
Chore: Refactor switch network logic
2 parents d30ebb8 + e08a70e commit fb09cbf

15 files changed

Lines changed: 77 additions & 89 deletions

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 3.2.2
2+
3+
- Network change improvements
4+
15
## 3.2.1
26

37
- Email Wallet improvements:

example/android/gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
org.gradle.jvmargs=-Xmx1536M
22
android.useAndroidX=true
33
android.enableJetifier=true
4-
versionName=3.2.1
5-
versionCode=59
4+
versionName=3.2.2
5+
versionCode=61

example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@
470470
CLANG_ENABLE_MODULES = YES;
471471
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
472472
CODE_SIGN_STYLE = Manual;
473-
CURRENT_PROJECT_VERSION = 59;
473+
CURRENT_PROJECT_VERSION = 61;
474474
DEVELOPMENT_TEAM = "";
475475
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = W5R8AG9K22;
476476
ENABLE_BITCODE = NO;
@@ -496,7 +496,7 @@
496496
buildSettings = {
497497
BUNDLE_LOADER = "$(TEST_HOST)";
498498
CODE_SIGN_STYLE = Automatic;
499-
CURRENT_PROJECT_VERSION = 59;
499+
CURRENT_PROJECT_VERSION = 61;
500500
GENERATE_INFOPLIST_FILE = YES;
501501
MARKETING_VERSION = 1.0;
502502
PRODUCT_BUNDLE_IDENTIFIER = com.web3modal.flutterExample.RunnerTests;
@@ -514,7 +514,7 @@
514514
buildSettings = {
515515
BUNDLE_LOADER = "$(TEST_HOST)";
516516
CODE_SIGN_STYLE = Automatic;
517-
CURRENT_PROJECT_VERSION = 59;
517+
CURRENT_PROJECT_VERSION = 61;
518518
GENERATE_INFOPLIST_FILE = YES;
519519
MARKETING_VERSION = 1.0;
520520
PRODUCT_BUNDLE_IDENTIFIER = com.web3modal.flutterExample.RunnerTests;
@@ -530,7 +530,7 @@
530530
buildSettings = {
531531
BUNDLE_LOADER = "$(TEST_HOST)";
532532
CODE_SIGN_STYLE = Automatic;
533-
CURRENT_PROJECT_VERSION = 59;
533+
CURRENT_PROJECT_VERSION = 61;
534534
GENERATE_INFOPLIST_FILE = YES;
535535
MARKETING_VERSION = 1.0;
536536
PRODUCT_BUNDLE_IDENTIFIER = com.web3modal.flutterExample.RunnerTests;
@@ -655,7 +655,7 @@
655655
CLANG_ENABLE_MODULES = YES;
656656
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
657657
CODE_SIGN_STYLE = Manual;
658-
CURRENT_PROJECT_VERSION = 59;
658+
CURRENT_PROJECT_VERSION = 61;
659659
DEVELOPMENT_TEAM = "";
660660
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = W5R8AG9K22;
661661
ENABLE_BITCODE = NO;
@@ -686,7 +686,7 @@
686686
CODE_SIGN_IDENTITY = "Apple Development";
687687
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
688688
CODE_SIGN_STYLE = Manual;
689-
CURRENT_PROJECT_VERSION = 59;
689+
CURRENT_PROJECT_VERSION = 61;
690690
DEVELOPMENT_TEAM = "";
691691
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = W5R8AG9K22;
692692
ENABLE_BITCODE = NO;

example/ios/Runner/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<key>CFBundlePackageType</key>
2020
<string>APPL</string>
2121
<key>CFBundleShortVersionString</key>
22-
<string>3.2.1</string>
22+
<string>3.2.2</string>
2323
<key>CFBundleSignature</key>
2424
<string>????</string>
2525
<key>CFBundleURLTypes</key>
@@ -36,7 +36,7 @@
3636
</dict>
3737
</array>
3838
<key>CFBundleVersion</key>
39-
<string>59</string>
39+
<string>61</string>
4040
<key>ITSAppUsesNonExemptEncryption</key>
4141
<false/>
4242
<key>LSApplicationQueriesSchemes</key>

example/lib/home_page.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,13 @@ class _MyHomePageState extends State<MyHomePage> {
171171
ElevatedButton(
172172
onPressed: () async {
173173
_w3mService.launchConnectedWallet();
174-
_w3mService.requestAddChain(polygon).then(
175-
(value) {
176-
final success = value == true;
177-
debugPrint('[ExampleApp] then success $success');
178-
Navigator.of(context).pop();
179-
},
180-
);
174+
try {
175+
await _w3mService.requestSwitchToChain(polygon);
176+
} catch (e) {
177+
debugPrint('[ExampleApp] requestSwitchToChain $e');
178+
}
179+
// ignore: use_build_context_synchronously
180+
Navigator.of(context).pop();
181181
},
182182
child: const Text('Switch'),
183183
),

example/pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1139,7 +1139,7 @@ packages:
11391139
path: ".."
11401140
relative: true
11411141
source: path
1142-
version: "3.2.1"
1142+
version: "3.2.2"
11431143
web_socket_channel:
11441144
dependency: transitive
11451145
description:

example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: A dApp showing how to use WalletConnect v2 with Flutter
33

44
publish_to: "none"
55

6-
version: 3.2.1
6+
version: 3.2.2
77

88
environment:
99
sdk: ">=3.0.1 <4.0.0"

lib/pages/connet_network_page.dart

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,25 @@ class _ConnectNetworkPageState extends State<ConnectNetworkPage>
3939
WidgetsBinding.instance.addPostFrameCallback((_) {
4040
_service = Web3ModalProvider.of(context).service;
4141
_service?.onModalError.subscribe(_errorListener);
42-
_service!.web3App!.onSessionEvent.subscribe(_onSessionEvent);
43-
_service!.web3App!.core.relayClient.onRelayClientMessage.subscribe(
44-
_onRelayClientMessage,
45-
);
4642
setState(() {});
47-
Future.delayed(const Duration(milliseconds: 300), () {
48-
_connect();
49-
});
43+
Future.delayed(const Duration(milliseconds: 300), () => _connect());
5044
});
5145
}
5246

53-
void _connect() {
47+
void _connect() async {
5448
errorEvent = null;
5549
_service!.launchConnectedWallet();
56-
_service!.requestSwitchToChain(widget.chainInfo);
57-
setState(() {});
50+
try {
51+
await _service!.requestSwitchToChain(widget.chainInfo);
52+
final chainId = widget.chainInfo.chainId;
53+
if (W3MChainPresets.chains.containsKey(chainId)) {
54+
Future.delayed(const Duration(milliseconds: 300), () {
55+
widgetStack.instance.pop();
56+
});
57+
}
58+
} catch (e) {
59+
setState(() {});
60+
}
5861
}
5962

6063
@override
@@ -68,38 +71,10 @@ class _ConnectNetworkPageState extends State<ConnectNetworkPage>
6871
}
6972
}
7073

71-
void _onSessionEvent(SessionEvent? event) async {
72-
if (!mounted) return;
73-
if (event?.name == EventsConstants.chainChanged) {
74-
debugPrint('[$runtimeType] _onSessionEvent $event');
75-
final chainId = event?.data.toString() ?? '';
76-
if (W3MChainPresets.chains.containsKey(chainId)) {
77-
_service?.web3App?.onSessionEvent.unsubscribe(_onSessionEvent);
78-
widgetStack.instance.pop();
79-
}
80-
}
81-
}
82-
83-
void _onRelayClientMessage(MessageEvent? event) async {
84-
if (!mounted) return;
85-
if (event != null) {
86-
final payloadString = await _service!.web3App!.core.crypto.decode(
87-
event.topic,
88-
event.message,
89-
);
90-
if (payloadString == null) return;
91-
debugPrint('[$runtimeType] payloadString $payloadString');
92-
}
93-
}
94-
9574
void _errorListener(ModalError? event) => setState(() => errorEvent = event);
9675

9776
@override
9877
void dispose() {
99-
_service?.web3App?.core.relayClient.onRelayClientMessage.unsubscribe(
100-
_onRelayClientMessage,
101-
);
102-
_service?.web3App?.onSessionEvent.unsubscribe(_onSessionEvent);
10378
_service?.onModalError.unsubscribe(_errorListener);
10479
WidgetsBinding.instance.removeObserver(this);
10580
super.dispose();

lib/pages/select_network_page.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,15 @@ class SelectNetworkPage extends StatelessWidget {
2222

2323
final Function(W3MChainInfo)? onTapNetwork;
2424

25-
void _onSelectNetwork(BuildContext context, W3MChainInfo chainInfo) {
25+
void _onSelectNetwork(BuildContext context, W3MChainInfo chainInfo) async {
2626
final service = Web3ModalProvider.of(context).service;
2727
if (service.isConnected) {
2828
final approvedChains = service.session!.getApprovedChains() ?? [];
29-
final hasChainAlready = approvedChains.contains(
30-
chainInfo.namespace,
31-
);
29+
final isChainApproved = approvedChains.contains(chainInfo.namespace);
3230
if (chainInfo.chainId == service.selectedChain?.chainId) {
3331
widgetStack.instance.pop();
34-
} else if (hasChainAlready || service.session!.sessionService.isMagic) {
35-
service.selectChain(chainInfo, switchChain: true);
32+
} else if (isChainApproved || service.session!.sessionService.isMagic) {
33+
await service.selectChain(chainInfo, switchChain: true);
3634
widgetStack.instance.pop();
3735
} else {
3836
widgetStack.instance.push(ConnectNetworkPage(chainInfo: chainInfo));

lib/services/w3m_service/i_w3m_service.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ abstract class IW3MService with ChangeNotifier {
131131
required SessionRequestParams request,
132132
});
133133

134-
Future<dynamic> requestSwitchToChain(W3MChainInfo newChain);
135-
Future<dynamic> requestAddChain(W3MChainInfo newChain);
134+
Future<void> requestSwitchToChain(W3MChainInfo newChain);
135+
Future<void> requestAddChain(W3MChainInfo newChain);
136136

137137
/// Closes the modal.
138138
void closeModal();

0 commit comments

Comments
 (0)