diff --git a/lib/screens/account/me/account_settings.dart b/lib/screens/account/me/account_settings.dart index 6699ca81..81bb383b 100644 --- a/lib/screens/account/me/account_settings.dart +++ b/lib/screens/account/me/account_settings.dart @@ -84,9 +84,7 @@ class AccountSettingsScreen extends HookConsumerWidget { 'accountPasswordChange'.tr(), ); if (!confirm || !context.mounted) return; - final captchaTk = await Navigator.of( - context, - ).push(MaterialPageRoute(builder: (context) => CaptchaScreen())); + final captchaTk = await CaptchaScreen.show(context); if (captchaTk == null) return; try { if (context.mounted) showLoadingModal(context); diff --git a/lib/screens/auth/captcha.native.dart b/lib/screens/auth/captcha.native.dart index 95de74dc..694b4727 100644 --- a/lib/screens/auth/captcha.native.dart +++ b/lib/screens/auth/captcha.native.dart @@ -2,9 +2,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:island/screens/auth/captcha.config.dart'; -import 'package:island/widgets/app_scaffold.dart'; +import 'package:island/widgets/content/sheet.dart'; class CaptchaScreen extends ConsumerWidget { + static Future show(BuildContext context) { + return showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (context) => const CaptchaScreen(), + ); + } + const CaptchaScreen({super.key}); @override @@ -13,9 +21,9 @@ class CaptchaScreen extends ConsumerWidget { if (!captchaUrl.hasValue) return Center(child: CircularProgressIndicator()); - return AppScaffold( - appBar: AppBar(title: Text("Anti-Robot")), - body: InAppWebView( + return SheetScaffold( + titleText: "Anti-Robot", + child: InAppWebView( initialUrlRequest: URLRequest( url: WebUri('${captchaUrl.value}?redirect_uri=solian://captcha'), ), diff --git a/lib/screens/auth/captcha.web.dart b/lib/screens/auth/captcha.web.dart index a2a172f0..997ede09 100644 --- a/lib/screens/auth/captcha.web.dart +++ b/lib/screens/auth/captcha.web.dart @@ -4,11 +4,19 @@ import 'dart:ui_web' as ui; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/pods/config.dart'; import 'package:island/screens/auth/captcha.config.dart'; -import 'package:island/widgets/app_scaffold.dart'; +import 'package:island/widgets/content/sheet.dart'; import 'package:web/web.dart' as web; import 'package:flutter/material.dart'; class CaptchaScreen extends ConsumerStatefulWidget { + static Future show(BuildContext context) { + return showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (context) => const CaptchaScreen(), + ); + } + const CaptchaScreen({super.key}); @override @@ -61,9 +69,9 @@ class _CaptchaScreenState extends ConsumerState { @override Widget build(BuildContext context) { - return AppScaffold( - appBar: AppBar(title: Text("Anti-Robot")), - body: + return SheetScaffold( + titleText: "Anti-Robot", + child: _isInitialized ? HtmlElementView(viewType: 'captcha-iframe') : Center(child: CircularProgressIndicator()), diff --git a/lib/screens/auth/create_account.dart b/lib/screens/auth/create_account.dart index e9f8a280..d090090f 100644 --- a/lib/screens/auth/create_account.dart +++ b/lib/screens/auth/create_account.dart @@ -38,9 +38,7 @@ class CreateAccountScreen extends HookConsumerWidget { void performAction() async { if (!formKey.currentState!.validate()) return; - final captchaTk = await Navigator.of( - context, - ).push(MaterialPageRoute(builder: (context) => CaptchaScreen())); + final captchaTk = await CaptchaScreen.show(context); if (captchaTk == null) return; if (!context.mounted) return; diff --git a/lib/screens/auth/login.dart b/lib/screens/auth/login.dart index ff00dc33..689a6389 100644 --- a/lib/screens/auth/login.dart +++ b/lib/screens/auth/login.dart @@ -523,9 +523,7 @@ class _LoginLookupScreen extends HookConsumerWidget { showErrorAlert('loginResetPasswordHint'.tr()); return; } - final captchaTk = await Navigator.of( - context, - ).push(MaterialPageRoute(builder: (context) => CaptchaScreen())); + final captchaTk = await CaptchaScreen.show(context); if (captchaTk == null) return; isBusy.value = true; try { diff --git a/lib/widgets/check_in.dart b/lib/widgets/check_in.dart index 26c4fcb1..95d7a0f2 100644 --- a/lib/widgets/check_in.dart +++ b/lib/widgets/check_in.dart @@ -104,9 +104,7 @@ class CheckInWidget extends HookConsumerWidget { } catch (err) { if (err is DioException) { if (err.response?.statusCode == 423 && context.mounted) { - final captchaTk = await Navigator.of( - context, - ).push(MaterialPageRoute(builder: (context) => CaptchaScreen())); + final captchaTk = await CaptchaScreen.show(context); if (captchaTk == null) return; return await checkIn(captchatTk: captchaTk); }