Skip to content

Commit

Permalink
feat: support refresh/reset Danke page
Browse files Browse the repository at this point in the history
  • Loading branch information
w568w committed Feb 3, 2023
1 parent f7f4477 commit 96a0330
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 8 deletions.
6 changes: 5 additions & 1 deletion lib/l10n/intl_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -465,5 +465,9 @@
"show_hidden_notifications_description": "Click to restore all hidden notifications on the dashboard",
"warning": "Warning",
"invalid_course_info": "Please provide valid information about course slots",
"danke": "Course"
"danke": "Course",
"fix_danke_description": "Having trouble with Danke? Click to try resetting and fixing it.",
"fix": "Fix",
"refresh": "Refresh",
"reset": "Reset"
}
6 changes: 5 additions & 1 deletion lib/l10n/intl_ja.arb
Original file line number Diff line number Diff line change
Expand Up @@ -428,5 +428,9 @@
"show_hidden_notifications": "隠された通知を表示",
"show_hidden_notifications_description": "クリックしてすべての隠された通知を復元する",
"warning": "警告",
"invalid_course_info": "コーススロットに関する有効な情報を提供してください"
"invalid_course_info": "コーススロットに関する有効な情報を提供してください",
"fix_danke_description": "問題が発生しましたか? 確認をクリックしてリセットして修正してみてください。",
"fix": "修正",
"refresh": "更新",
"reset": "リセット"
}
6 changes: 5 additions & 1 deletion lib/l10n/intl_zh_CN.arb
Original file line number Diff line number Diff line change
Expand Up @@ -457,5 +457,9 @@
"show_hidden_notifications_description": "点击以恢复所有已隐藏的首页通知卡片",
"warning": "警告",
"invalid_course_info": "请提供完整的课程时间信息",
"danke": "评教"
"danke": "评教",
"fix_danke_description": "使用评教时遇到了问题?点击确认以尝试重置并修复。",
"fix": "修复",
"refresh": "刷新",
"reset": "重置"
}
90 changes: 85 additions & 5 deletions lib/page/subpage_danke.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,14 @@ import 'package:dan_xi/common/constant.dart';
import 'package:dan_xi/generated/l10n.dart';
import 'package:dan_xi/page/platform_subpage.dart';
import 'package:dan_xi/provider/settings_provider.dart';
import 'package:dan_xi/util/noticing.dart';
import 'package:dan_xi/util/platform_universal.dart';
import 'package:dan_xi/util/public_extension_methods.dart';
import 'package:dan_xi/util/stream_listener.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
import 'package:provider/provider.dart';

class DankeSubPage extends PlatformSubpage<DankeSubPage> {
Expand All @@ -32,10 +37,89 @@ class DankeSubPage extends PlatformSubpage<DankeSubPage> {

@override
Create<Widget> get title => (cxt) => Text(S.of(cxt).danke);

@override
Create<List<AppBarButtonItem>> get trailing {
return (cxt) => [
AppBarButtonItem(S.of(cxt).refresh, Icon(PlatformIcons(cxt).refresh),
() {
RefreshPageEvent().fire();
}),
AppBarButtonItem(
S.of(cxt).reset,
Icon(PlatformX.isMaterial(cxt)
? Icons.medical_services_outlined
: CupertinoIcons.rays), () {
ResetWebViewEvent().fire();
}),
];
}
}

class RefreshPageEvent {}

class ResetWebViewEvent {}

class DankeSubPageState extends PlatformSubpageState<DankeSubPage> {
InAppWebViewController? webViewController;
static final StateStreamListener<RefreshPageEvent> _refreshSubscription =
StateStreamListener();
static final StateStreamListener<ResetWebViewEvent> _resetSubscription =
StateStreamListener();

URLRequest get urlRequest => URLRequest(
url: Uri.https('danke.fduhole.com', '/jump', {
'access': SettingsProvider.getInstance().fduholeToken?.access,
'refresh': SettingsProvider.getInstance().fduholeToken?.refresh,
}));

@override
void initState() {
super.initState();
_refreshSubscription.bindOnlyInvalid(
Constant.eventBus
.on<RefreshPageEvent>()
.listen((event) => webViewController?.reload()),
hashCode);
_resetSubscription.bindOnlyInvalid(
Constant.eventBus.on<ResetWebViewEvent>().listen((event) async {
if (!mounted) return;
bool? confirmed = await Noticing.showConfirmationDialog(
context, S.of(context).fix_danke_description,
title: S.of(context).fix);
if (confirmed == true) {
await webViewController?.clearCache();

if (PlatformX.isAndroid) {
await WebStorageManager.instance().android.deleteAllData();
}
if (PlatformX.isIOS) {
final manager = WebStorageManager.instance().ios;
var records = await manager.fetchDataRecords(
dataTypes: IOSWKWebsiteDataType.values);
await manager.removeDataFor(
dataTypes: IOSWKWebsiteDataType.values,
dataRecords: records.filter((element) =>
element.displayName?.contains("fduhole.com") ?? false));
}

await HttpAuthCredentialDatabase.instance()
.clearAllAuthCredentials();

await CookieManager.instance().deleteAllCookies();

await webViewController?.loadUrl(urlRequest: urlRequest);
}
}),
hashCode);
}

@override
void dispose() {
super.dispose();
_refreshSubscription.cancel();
_resetSubscription.cancel();
}

@override
Widget buildPage(BuildContext context) {
Expand All @@ -54,11 +138,7 @@ class DankeSubPageState extends PlatformSubpageState<DankeSubPage> {
},
child: InAppWebView(
initialOptions: InAppWebViewGroupOptions(crossPlatform: settings),
initialUrlRequest: URLRequest(
url: Uri.https('danke.fduhole.com', '/jump', {
'access': SettingsProvider.getInstance().fduholeToken?.access,
'refresh': SettingsProvider.getInstance().fduholeToken?.refresh,
})),
initialUrlRequest: urlRequest,
onWebViewCreated: (InAppWebViewController controller) {
webViewController = controller;
},
Expand Down

0 comments on commit 96a0330

Please sign in to comment.