Skip to content

Commit 985131f

Browse files
committed
style: fixed a responsive ui issue in ios dialogs
1 parent ebb686d commit 985131f

File tree

3 files changed

+40
-79
lines changed

3 files changed

+40
-79
lines changed

lib/controllers/discord/discord_login.dart

Lines changed: 30 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import 'dart:io';
2-
31
import 'package:flutter/material.dart';
42
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
53

@@ -16,43 +14,26 @@ class DiscordLoginPage extends StatefulWidget {
1614
}
1715

1816
class _DiscordLoginPageState extends State<DiscordLoginPage> {
19-
InAppWebViewController? _controller;
17+
late InAppWebViewController _controller;
2018
bool _tokenExtracted = false;
2119
bool _isLoading = true;
2220
double _progress = 0.0;
2321

2422
Future<void> _extractToken() async {
25-
if (!mounted || _tokenExtracted || _controller == null) return;
23+
if (!mounted || _tokenExtracted) return;
2624

27-
try {
28-
await Future.delayed(const Duration(milliseconds: 1500));
25+
await Future.delayed(const Duration(seconds: 2));
2926

30-
final result = await _controller!.evaluateJavascript(source: '''
27+
try {
28+
final result = await _controller.evaluateJavascript(source: '''
3129
(function() {
32-
try {
33-
var token = localStorage.getItem('token');
34-
if (token) {
35-
return token;
36-
}
37-
// Try alternative storage locations
38-
for (var i = 0; i < localStorage.length; i++) {
39-
var key = localStorage.key(i);
40-
if (key && key.includes('token')) {
41-
return localStorage.getItem(key);
42-
}
43-
}
44-
return null;
45-
} catch (e) {
46-
return null;
47-
}
30+
return window.LOCAL_STORAGE.getItem('token');
4831
})()
4932
''');
5033

51-
if (result != null &&
52-
result.toString() != 'null' &&
53-
result.toString().isNotEmpty) {
34+
if (result != null && result != 'null') {
5435
_tokenExtracted = true;
55-
final token = result.toString().trim().replaceAll('"', '');
36+
final token = result.trim().replaceAll('"', '');
5637
widget.onTokenExtracted(token);
5738
if (mounted) {
5839
Navigator.of(context).pop();
@@ -64,35 +45,24 @@ class _DiscordLoginPageState extends State<DiscordLoginPage> {
6445
}
6546

6647
Future<void> _clearDiscordData() async {
67-
if (_controller == null) return;
68-
69-
try {
70-
await _controller!.evaluateJavascript(source: '''
71-
(function() {
72-
try {
73-
localStorage.clear();
74-
sessionStorage.clear();
75-
} catch (e) {
76-
console.log('Error clearing storage:', e);
77-
}
78-
})()
79-
''');
80-
} catch (e) {
81-
print('Error clearing data: $e');
82-
}
48+
await _controller.evaluateJavascript(source: '''
49+
if (window.location.hostname === 'discord.com') {
50+
window.LOCAL_STORAGE.clear();
51+
window.sessionStorage.clear();
52+
}
53+
''');
8354
}
8455

8556
@override
8657
Widget build(BuildContext context) {
87-
final isMobile = Platform.isAndroid || Platform.isIOS;
8858
return Scaffold(
8959
backgroundColor: const Color(0xFF313338),
9060
body: SafeArea(
9161
child: Column(
9262
children: [
63+
// Custom header
9364
Container(
94-
padding: EdgeInsets.fromLTRB(
95-
8, isMobile ? 12 : kToolbarHeight + 12, 8, 12),
65+
padding: const EdgeInsets.fromLTRB(8, kToolbarHeight + 12, 8, 12),
9666
decoration: BoxDecoration(
9767
color: const Color(0xFF2B2D31),
9868
boxShadow: [
@@ -111,14 +81,15 @@ class _DiscordLoginPageState extends State<DiscordLoginPage> {
11181
tooltip: 'Close',
11282
),
11383
const SizedBox(width: 8),
84+
// Discord logo icon
11485
Container(
11586
padding: const EdgeInsets.all(8),
11687
decoration: BoxDecoration(
11788
color: const Color(0xFF5865F2),
11889
borderRadius: BorderRadius.circular(8),
11990
),
12091
child: const Icon(
121-
Icons.discord_rounded,
92+
Icons.discord,
12293
color: Colors.white,
12394
size: 20,
12495
),
@@ -190,37 +161,26 @@ class _DiscordLoginPageState extends State<DiscordLoginPage> {
190161
supportZoom: false,
191162
useWideViewPort: true,
192163
loadWithOverviewMode: true,
193-
allowsInlineMediaPlayback: true,
194-
mediaPlaybackRequiresUserGesture: false,
195-
cacheEnabled: true,
196-
clearCache: false,
197-
limitsNavigationsToAppBoundDomains: false,
198-
thirdPartyCookiesEnabled: true,
199164
),
200-
onWebViewCreated: (controller) async {
201-
_controller = controller;
202-
await _clearDiscordData();
203-
},
204165
onLoadStart: (controller, url) async {
166+
await controller.evaluateJavascript(source: '''
167+
try {
168+
window.LOCAL_STORAGE = localStorage;
169+
} catch (e) {}
170+
''');
205171
if (mounted) {
206172
setState(() {
207173
_isLoading = true;
208174
});
209175
}
210176
},
211-
onLoadStop: (controller, url) async {
177+
onLoadStop: (controller, url) {
212178
if (mounted) {
213179
setState(() {
214180
_isLoading = false;
215181
_progress = 1.0;
216182
});
217183
}
218-
219-
final currentUrl = url.toString();
220-
if (currentUrl.contains('discord.com/channels') ||
221-
currentUrl.contains('discord.com/app')) {
222-
await _extractToken();
223-
}
224184
},
225185
onProgressChanged: (controller, progress) {
226186
if (mounted) {
@@ -229,26 +189,20 @@ class _DiscordLoginPageState extends State<DiscordLoginPage> {
229189
});
230190
}
231191
},
192+
onWebViewCreated: (controller) {
193+
_controller = controller;
194+
_clearDiscordData();
195+
},
232196
onUpdateVisitedHistory: (controller, url, isReload) async {
233-
final urlString = url.toString();
234-
if (urlString.contains('discord.com/channels') ||
235-
urlString.contains('discord.com/app')) {
197+
if (url.toString() != 'https://discord.com/login' &&
198+
url.toString() != 'about:blank') {
236199
await _extractToken();
237200
}
238201
},
239202
shouldOverrideUrlLoading:
240203
(controller, navigationAction) async {
241204
return NavigationActionPolicy.ALLOW;
242205
},
243-
onConsoleMessage: (controller, consoleMessage) {
244-
print('Console: ${consoleMessage.message}');
245-
},
246-
onReceivedError: (controller, request, error) {
247-
print('WebView Error: ${error.description}');
248-
},
249-
onReceivedHttpError: (controller, request, errorResponse) {
250-
print('HTTP Error: ${errorResponse.statusCode}');
251-
},
252206
),
253207
),
254208
),
@@ -263,7 +217,6 @@ extension DiscordLoginNavigation on BuildContext {
263217
Future<void> showDiscordLogin(Function(String) onTokenExtracted) async {
264218
await Navigator.of(this).push(
265219
MaterialPageRoute(
266-
fullscreenDialog: true,
267220
builder: (context) => DiscordLoginPage(
268221
onTokenExtracted: onTokenExtracted,
269222
),

lib/screens/settings/sub_settings/settings_accounts.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:io';
2+
13
import 'package:anymex/controllers/discord/discord_login.dart';
24
import 'package:anymex/controllers/discord/discord_rpc.dart';
35
import 'package:anymex/controllers/service_handler/service_handler.dart';
@@ -9,6 +11,7 @@ import 'package:anymex/widgets/custom_widgets/custom_icon_wrapper.dart';
911
import 'package:anymex/widgets/custom_widgets/custom_text.dart';
1012
import 'package:anymex/widgets/helper/scroll_wrapper.dart';
1113
import 'package:cached_network_image/cached_network_image.dart';
14+
import 'package:flutter/foundation.dart';
1215
import 'package:flutter/material.dart';
1316
import 'package:get/get.dart';
1417
import 'package:iconly/iconly.dart';
@@ -69,7 +72,8 @@ class SettingsAccounts extends StatelessWidget {
6972
],
7073
),
7174
const SizedBox(height: 30),
72-
const DiscordTile(),
75+
if (!Platform.isWindows && !Platform.isLinux && !Platform.isMacOS)
76+
const DiscordTile(),
7377
for (var s in services)
7478
ProfileTile(
7579
serviceIcon: s['icon'] as String,

lib/screens/settings/sub_settings/widgets/repo_dialog.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import 'dart:io';
2+
13
import 'package:anymex/controllers/source/source_controller.dart';
24
import 'package:dartotsu_extension_bridge/ExtensionManager.dart';
35
import 'package:expressive_loading_indicator/expressive_loading_indicator.dart';
46
import 'package:flutter/material.dart';
57
import 'package:dartotsu_extension_bridge/Models/Source.dart';
8+
import 'package:get/get.dart';
69
import 'package:hugeicons/hugeicons.dart';
710

811
class GitHubRepoDialog extends StatefulWidget {
@@ -105,10 +108,11 @@ class _GitHubRepoDialogState extends State<GitHubRepoDialog> {
105108
final colorScheme = theme.colorScheme;
106109

107110
return Dialog(
111+
insetPadding:
112+
Platform.isIOS ? const EdgeInsets.symmetric(horizontal: 8) : null,
108113
backgroundColor: Colors.transparent,
109114
elevation: 0,
110115
child: Container(
111-
constraints: const BoxConstraints(maxWidth: 420),
112116
decoration: BoxDecoration(
113117
color: colorScheme.surface,
114118
borderRadius: BorderRadius.circular(16),

0 commit comments

Comments
 (0)