forked from firka/firka
add beta warning screen
This commit is contained in:
@@ -24,7 +24,8 @@ const classAvgOnGraph = 1006;
|
||||
const leftHandedMode = 1007;
|
||||
const language = 1008;
|
||||
const appIcon = 1009;
|
||||
const child_protection = 1010;
|
||||
const childProtection = 1010;
|
||||
const betaWarning = 1011;
|
||||
|
||||
bool always() {
|
||||
return true;
|
||||
@@ -152,7 +153,7 @@ class SettingsStore {
|
||||
"icon_preview": SettingsAppIconPreview(0, always),
|
||||
"settings_padding2": SettingsPadding(0, 24, always),
|
||||
"child_protection": SettingsBoolean(
|
||||
child_protection,
|
||||
childProtection,
|
||||
FirkaIconType.majesticons,
|
||||
Majesticon.shieldSolid,
|
||||
l10n.s_ci_child_protection,
|
||||
@@ -224,6 +225,10 @@ class SettingsStore {
|
||||
never),
|
||||
"settings_other_padding": SettingsPadding(0, 20, never),
|
||||
"settings_other_header": SettingsHeaderSmall(0, "Egyéb", never),
|
||||
|
||||
// misc
|
||||
"beta_warning": SettingsBoolean(
|
||||
betaWarning, null, null, "Beta warning", false, never)
|
||||
}),
|
||||
always);
|
||||
|
||||
|
||||
Submodule firka/lib/l10n updated: 293af1a944...305aee34bf
93
firka/lib/ui/phone/screens/home/beta_screen.dart
Normal file
93
firka/lib/ui/phone/screens/home/beta_screen.dart
Normal file
@@ -0,0 +1,93 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:firka/helpers/db/models/app_settings_model.dart';
|
||||
import 'package:firka/helpers/settings/setting.dart';
|
||||
import 'package:firka/helpers/ui/firka_button.dart';
|
||||
import 'package:firka/ui/model/style.dart';
|
||||
import 'package:firka/ui/phone/screens/home/home_screen.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../../main.dart';
|
||||
|
||||
class BetaScreen extends StatelessWidget {
|
||||
final AppInitialization data;
|
||||
|
||||
const BetaScreen(this.data, {super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: appStyle.colors.background,
|
||||
body: SafeArea(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
Center(
|
||||
child: Text(data.l10n.beta_title,
|
||||
style: appStyle.fonts.H_H1
|
||||
.apply(color: appStyle.colors.textPrimary)),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24),
|
||||
child: Text(
|
||||
data.l10n.beta_body,
|
||||
style: appStyle.fonts.B_16R
|
||||
.apply(color: appStyle.colors.textPrimary),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 32, right: 32, bottom: 16),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
GestureDetector(
|
||||
child: FirkaButton(
|
||||
text: data.l10n.cancel,
|
||||
bgColor: appStyle.colors.buttonSecondaryFill,
|
||||
fontStyle: appStyle.fonts.B_14R
|
||||
.apply(color: appStyle.colors.textPrimary),
|
||||
),
|
||||
onTap: () {
|
||||
exit(0);
|
||||
},
|
||||
),
|
||||
GestureDetector(
|
||||
child: FirkaButton(
|
||||
text: data.l10n.okay,
|
||||
bgColor: appStyle.colors.accent,
|
||||
fontStyle: appStyle.fonts.B_14R
|
||||
.apply(color: appStyle.colors.textPrimary),
|
||||
),
|
||||
onTap: () async {
|
||||
await data.isar.writeTxn(() async {
|
||||
data.settings
|
||||
.group("settings")
|
||||
.setBoolean("beta_warning", true);
|
||||
|
||||
await data.settings
|
||||
.group("settings")["beta_warning"]!
|
||||
.save(data.isar.appSettingsModels);
|
||||
|
||||
Navigator.of(context).pushAndRemoveUntil(
|
||||
MaterialPageRoute(
|
||||
builder: (context) => HomeScreen(data, false)),
|
||||
(route) => false,
|
||||
);
|
||||
});
|
||||
},
|
||||
),
|
||||
],
|
||||
)),
|
||||
],
|
||||
)),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,14 @@ import 'dart:math';
|
||||
|
||||
import 'package:firka/helpers/api/client/kreta_client.dart';
|
||||
import 'package:firka/helpers/api/exceptions/token.dart';
|
||||
import 'package:firka/helpers/settings/setting.dart';
|
||||
import 'package:firka/main.dart';
|
||||
import 'package:firka/ui/model/style.dart';
|
||||
import 'package:firka/ui/phone/pages/extras/main_wear_pair.dart';
|
||||
import 'package:firka/ui/phone/pages/home/home_grades.dart';
|
||||
import 'package:firka/ui/phone/pages/home/home_main.dart';
|
||||
import 'package:firka/ui/phone/pages/home/home_timetable_mo.dart';
|
||||
import 'package:firka/ui/phone/screens/home/beta_screen.dart';
|
||||
import 'package:firka/ui/phone/widgets/bottom_nav_icon.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -68,10 +70,12 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
|
||||
Widget? toast;
|
||||
bool pairingDone = false;
|
||||
bool _disposed = false;
|
||||
|
||||
ActiveToastType activeToast = ActiveToastType.none;
|
||||
|
||||
void setPageCB(ActiveHomePage newPage, bool setPrev) {
|
||||
if (_disposed) return;
|
||||
setState(() {
|
||||
if (setPrev) previousPages.add(page);
|
||||
canPop = false;
|
||||
@@ -90,6 +94,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
await widget.data.client.getStudent(forceCache: false);
|
||||
if (res.statusCode >= 400 ||
|
||||
res.err == TokenExpiredException().toString()) {
|
||||
if (_disposed) return;
|
||||
setState(() {
|
||||
activeToast = ActiveToastType.reauth;
|
||||
toast = Positioned(
|
||||
@@ -169,12 +174,14 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
dismissDelay = 2;
|
||||
}
|
||||
Timer(Duration(seconds: dismissDelay), () {
|
||||
if (_disposed) return;
|
||||
setState(() {
|
||||
activeToast = ActiveToastType.none;
|
||||
toast = null;
|
||||
});
|
||||
});
|
||||
|
||||
if (_disposed) return;
|
||||
setState(() {
|
||||
// TODO: Make this and the error toast more rounded
|
||||
toast = Positioned(
|
||||
@@ -221,11 +228,13 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
);
|
||||
});
|
||||
} finally {
|
||||
setState(() {
|
||||
_fetching = false;
|
||||
if (!_disposed) {
|
||||
setState(() {
|
||||
_fetching = false;
|
||||
|
||||
if (activeToast == ActiveToastType.fetching) toast = null;
|
||||
});
|
||||
if (activeToast == ActiveToastType.fetching) toast = null;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,6 +263,17 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
Widget build(BuildContext context) {
|
||||
_updateSystemUI(); // Update system UI on every build, to compensate for the android system being dumb
|
||||
|
||||
if (!widget.data.settings.group("settings").boolean("beta_warning")) {
|
||||
Timer.run(() {
|
||||
Navigator.of(context).pushAndRemoveUntil(
|
||||
MaterialPageRoute(builder: (context) => BetaScreen(widget.data)),
|
||||
(route) => false,
|
||||
);
|
||||
});
|
||||
|
||||
return SizedBox();
|
||||
}
|
||||
|
||||
if (widget.watchPair && !pairingDone) {
|
||||
Timer.run(() {
|
||||
showWearBottomSheet(context, widget.data, widget.model!);
|
||||
@@ -263,6 +283,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
}
|
||||
|
||||
if (_fetching) {
|
||||
if (_disposed) return SizedBox();
|
||||
setState(() {
|
||||
activeToast = ActiveToastType.fetching;
|
||||
toast = Positioned(
|
||||
@@ -436,6 +457,16 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
|
||||
_disposed = true;
|
||||
_fetching = false;
|
||||
_prefetched = false;
|
||||
activeToast = ActiveToastType.none;
|
||||
}
|
||||
}
|
||||
|
||||
class HomeSubPage extends StatelessWidget {
|
||||
|
||||
Reference in New Issue
Block a user