♻️ Refactored the captcha
This commit is contained in:
@@ -84,9 +84,7 @@ class AccountSettingsScreen extends HookConsumerWidget {
|
|||||||
'accountPasswordChange'.tr(),
|
'accountPasswordChange'.tr(),
|
||||||
);
|
);
|
||||||
if (!confirm || !context.mounted) return;
|
if (!confirm || !context.mounted) return;
|
||||||
final captchaTk = await Navigator.of(
|
final captchaTk = await CaptchaScreen.show(context);
|
||||||
context,
|
|
||||||
).push(MaterialPageRoute(builder: (context) => CaptchaScreen()));
|
|
||||||
if (captchaTk == null) return;
|
if (captchaTk == null) return;
|
||||||
try {
|
try {
|
||||||
if (context.mounted) showLoadingModal(context);
|
if (context.mounted) showLoadingModal(context);
|
||||||
|
|||||||
@@ -2,9 +2,17 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:island/screens/auth/captcha.config.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 {
|
class CaptchaScreen extends ConsumerWidget {
|
||||||
|
static Future<String?> show(BuildContext context) {
|
||||||
|
return showModalBottomSheet<String>(
|
||||||
|
context: context,
|
||||||
|
isScrollControlled: true,
|
||||||
|
builder: (context) => const CaptchaScreen(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const CaptchaScreen({super.key});
|
const CaptchaScreen({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -13,9 +21,9 @@ class CaptchaScreen extends ConsumerWidget {
|
|||||||
|
|
||||||
if (!captchaUrl.hasValue) return Center(child: CircularProgressIndicator());
|
if (!captchaUrl.hasValue) return Center(child: CircularProgressIndicator());
|
||||||
|
|
||||||
return AppScaffold(
|
return SheetScaffold(
|
||||||
appBar: AppBar(title: Text("Anti-Robot")),
|
titleText: "Anti-Robot",
|
||||||
body: InAppWebView(
|
child: InAppWebView(
|
||||||
initialUrlRequest: URLRequest(
|
initialUrlRequest: URLRequest(
|
||||||
url: WebUri('${captchaUrl.value}?redirect_uri=solian://captcha'),
|
url: WebUri('${captchaUrl.value}?redirect_uri=solian://captcha'),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -4,11 +4,19 @@ import 'dart:ui_web' as ui;
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:island/pods/config.dart';
|
import 'package:island/pods/config.dart';
|
||||||
import 'package:island/screens/auth/captcha.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:web/web.dart' as web;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class CaptchaScreen extends ConsumerStatefulWidget {
|
class CaptchaScreen extends ConsumerStatefulWidget {
|
||||||
|
static Future<String?> show(BuildContext context) {
|
||||||
|
return showModalBottomSheet<String>(
|
||||||
|
context: context,
|
||||||
|
isScrollControlled: true,
|
||||||
|
builder: (context) => const CaptchaScreen(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const CaptchaScreen({super.key});
|
const CaptchaScreen({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -61,9 +69,9 @@ class _CaptchaScreenState extends ConsumerState<CaptchaScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return AppScaffold(
|
return SheetScaffold(
|
||||||
appBar: AppBar(title: Text("Anti-Robot")),
|
titleText: "Anti-Robot",
|
||||||
body:
|
child:
|
||||||
_isInitialized
|
_isInitialized
|
||||||
? HtmlElementView(viewType: 'captcha-iframe')
|
? HtmlElementView(viewType: 'captcha-iframe')
|
||||||
: Center(child: CircularProgressIndicator()),
|
: Center(child: CircularProgressIndicator()),
|
||||||
|
|||||||
@@ -38,9 +38,7 @@ class CreateAccountScreen extends HookConsumerWidget {
|
|||||||
void performAction() async {
|
void performAction() async {
|
||||||
if (!formKey.currentState!.validate()) return;
|
if (!formKey.currentState!.validate()) return;
|
||||||
|
|
||||||
final captchaTk = await Navigator.of(
|
final captchaTk = await CaptchaScreen.show(context);
|
||||||
context,
|
|
||||||
).push(MaterialPageRoute(builder: (context) => CaptchaScreen()));
|
|
||||||
if (captchaTk == null) return;
|
if (captchaTk == null) return;
|
||||||
|
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
|
|||||||
@@ -523,9 +523,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
|
|||||||
showErrorAlert('loginResetPasswordHint'.tr());
|
showErrorAlert('loginResetPasswordHint'.tr());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final captchaTk = await Navigator.of(
|
final captchaTk = await CaptchaScreen.show(context);
|
||||||
context,
|
|
||||||
).push(MaterialPageRoute(builder: (context) => CaptchaScreen()));
|
|
||||||
if (captchaTk == null) return;
|
if (captchaTk == null) return;
|
||||||
isBusy.value = true;
|
isBusy.value = true;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -104,9 +104,7 @@ class CheckInWidget extends HookConsumerWidget {
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err is DioException) {
|
if (err is DioException) {
|
||||||
if (err.response?.statusCode == 423 && context.mounted) {
|
if (err.response?.statusCode == 423 && context.mounted) {
|
||||||
final captchaTk = await Navigator.of(
|
final captchaTk = await CaptchaScreen.show(context);
|
||||||
context,
|
|
||||||
).push(MaterialPageRoute(builder: (context) => CaptchaScreen()));
|
|
||||||
if (captchaTk == null) return;
|
if (captchaTk == null) return;
|
||||||
return await checkIn(captchatTk: captchaTk);
|
return await checkIn(captchatTk: captchaTk);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user