fixed warnings (super.key, etc)
This commit is contained in:
@@ -9,7 +9,7 @@ import 'error_report_screen.i18n.dart';
|
||||
class ErrorReportScreen extends StatelessWidget {
|
||||
final FlutterErrorDetails details;
|
||||
|
||||
const ErrorReportScreen(this.details, {Key? key}) : super(key: key);
|
||||
const ErrorReportScreen(this.details, {super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -21,8 +21,8 @@ class ErrorReportScreen extends StatelessWidget {
|
||||
child: Column(
|
||||
children: [
|
||||
const Align(
|
||||
child: BackButton(),
|
||||
alignment: Alignment.topLeft,
|
||||
child: BackButton(),
|
||||
),
|
||||
const Spacer(),
|
||||
const Icon(
|
||||
@@ -57,7 +57,9 @@ class ErrorReportScreen extends StatelessWidget {
|
||||
height: 110.0,
|
||||
width: double.infinity,
|
||||
padding: const EdgeInsets.all(12.0),
|
||||
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12.0), color: Colors.black.withOpacity(.2)),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
color: Colors.black.withOpacity(.2)),
|
||||
child: SingleChildScrollView(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
child: Text(
|
||||
@@ -69,7 +71,9 @@ class ErrorReportScreen extends StatelessWidget {
|
||||
IconButton(
|
||||
icon: const Icon(FeatherIcons.info),
|
||||
onPressed: () {
|
||||
showDialog(context: context, builder: (context) => StacktracePopup(details));
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => StacktracePopup(details));
|
||||
},
|
||||
)
|
||||
],
|
||||
@@ -79,10 +83,12 @@ class ErrorReportScreen extends StatelessWidget {
|
||||
width: double.infinity,
|
||||
child: TextButton(
|
||||
style: ButtonStyle(
|
||||
padding: MaterialStateProperty.all(const EdgeInsets.symmetric(vertical: 14.0)),
|
||||
padding: MaterialStateProperty.all(
|
||||
const EdgeInsets.symmetric(vertical: 14.0)),
|
||||
backgroundColor: MaterialStateProperty.all(Colors.white),
|
||||
shape: MaterialStateProperty.all(
|
||||
RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
@@ -106,7 +112,7 @@ class ErrorReportScreen extends StatelessWidget {
|
||||
|
||||
Future reportProblem(BuildContext context) async {
|
||||
final report = ErrorReport(
|
||||
os: Platform.operatingSystem + " " + Platform.operatingSystemVersion,
|
||||
os: "${Platform.operatingSystem} ${Platform.operatingSystemVersion}",
|
||||
error: details.exceptionAsString(),
|
||||
version: const String.fromEnvironment("APPVER", defaultValue: "?"),
|
||||
stack: details.stack.toString(),
|
||||
@@ -119,7 +125,7 @@ class ErrorReportScreen extends StatelessWidget {
|
||||
class StacktracePopup extends StatelessWidget {
|
||||
final FlutterErrorDetails details;
|
||||
|
||||
const StacktracePopup(this.details, {Key? key}) : super(key: key);
|
||||
const StacktracePopup(this.details, {super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -150,13 +156,20 @@ class StacktracePopup extends StatelessWidget {
|
||||
"error".i18n,
|
||||
details.exceptionAsString(),
|
||||
),
|
||||
ErrorDetail("os".i18n, Platform.operatingSystem + " " + Platform.operatingSystemVersion),
|
||||
ErrorDetail("version".i18n, const String.fromEnvironment("APPVER", defaultValue: "?")),
|
||||
ErrorDetail("stack".i18n, stack.substring(0, min(stack.length, 5000)))
|
||||
ErrorDetail("os".i18n,
|
||||
"${Platform.operatingSystem} ${Platform.operatingSystemVersion}"),
|
||||
ErrorDetail(
|
||||
"version".i18n,
|
||||
const String.fromEnvironment("APPVER",
|
||||
defaultValue: "?")),
|
||||
ErrorDetail(
|
||||
"stack".i18n, stack.substring(0, min(stack.length, 5000)))
|
||||
]),
|
||||
),
|
||||
TextButton(
|
||||
child: Text("done".i18n, style: TextStyle(color: Theme.of(context).colorScheme.secondary)),
|
||||
child: Text("done".i18n,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.secondary)),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
})
|
||||
@@ -172,7 +185,7 @@ class ErrorDetail extends StatelessWidget {
|
||||
final String title;
|
||||
final String content;
|
||||
|
||||
const ErrorDetail(this.title, this.content, {Key? key}) : super(key: key);
|
||||
const ErrorDetail(this.title, this.content, {super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -186,13 +199,17 @@ class ErrorDetail extends StatelessWidget {
|
||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
Container(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 6.5, vertical: 4.0),
|
||||
margin: const EdgeInsets.only(top: 4.0),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black26,
|
||||
borderRadius: BorderRadius.circular(4.0)),
|
||||
child: Text(
|
||||
content,
|
||||
style: const TextStyle(fontFamily: 'SpaceMono', color: Colors.white),
|
||||
),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 6.5, vertical: 4.0),
|
||||
margin: const EdgeInsets.only(top: 4.0),
|
||||
decoration: BoxDecoration(color: Colors.black26, borderRadius: BorderRadius.circular(4.0)))
|
||||
style: const TextStyle(
|
||||
fontFamily: 'SpaceMono', color: Colors.white),
|
||||
))
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||
|
||||
class ErrorScreen extends StatelessWidget {
|
||||
const ErrorScreen(this.details, {Key? key}) : super(key: key);
|
||||
const ErrorScreen(this.details, {super.key});
|
||||
|
||||
final FlutterErrorDetails details;
|
||||
|
||||
@@ -23,7 +23,8 @@ class ErrorScreen extends StatelessWidget {
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(12.0),
|
||||
child: Icon(FeatherIcons.alertTriangle, size: 48.0, color: AppColors.of(context).red),
|
||||
child: Icon(FeatherIcons.alertTriangle,
|
||||
size: 48.0, color: AppColors.of(context).red),
|
||||
),
|
||||
const Padding(
|
||||
padding: EdgeInsets.all(12.0),
|
||||
@@ -47,7 +48,7 @@ class ErrorScreen extends StatelessWidget {
|
||||
physics: const BouncingScrollPhysics(),
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: SelectableText(
|
||||
(details.exceptionAsString() + '\n'),
|
||||
('${details.exceptionAsString()}\n'),
|
||||
style: const TextStyle(fontFamily: "monospace"),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class LoginButton extends StatelessWidget {
|
||||
const LoginButton({Key? key, required this.onPressed, required this.child}) : super(key: key);
|
||||
const LoginButton({super.key, required this.onPressed, required this.child});
|
||||
|
||||
final void Function()? onPressed;
|
||||
final Widget? child;
|
||||
@@ -9,12 +9,6 @@ class LoginButton extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialButton(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 15.0,
|
||||
),
|
||||
child: child,
|
||||
),
|
||||
elevation: 0,
|
||||
focusElevation: 0,
|
||||
hoverElevation: 0,
|
||||
@@ -24,6 +18,12 @@ class LoginButton extends StatelessWidget {
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
color: Colors.white,
|
||||
textColor: Colors.black,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 15.0,
|
||||
),
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,12 +5,11 @@ enum LoginInputStyle { username, password, school }
|
||||
|
||||
class LoginInput extends StatefulWidget {
|
||||
const LoginInput(
|
||||
{Key? key,
|
||||
{super.key,
|
||||
required this.style,
|
||||
this.controller,
|
||||
this.focusNode,
|
||||
this.onClear})
|
||||
: super(key: key);
|
||||
this.onClear});
|
||||
|
||||
final Function()? onClear;
|
||||
final LoginInputStyle style;
|
||||
|
||||
@@ -14,15 +14,15 @@ import 'package:flutter/services.dart';
|
||||
import 'login_screen.i18n.dart';
|
||||
|
||||
class LoginScreen extends StatefulWidget {
|
||||
const LoginScreen({Key? key, this.back = false}) : super(key: key);
|
||||
const LoginScreen({super.key, this.back = false});
|
||||
|
||||
final bool back;
|
||||
|
||||
@override
|
||||
_LoginScreenState createState() => _LoginScreenState();
|
||||
LoginScreenState createState() => LoginScreenState();
|
||||
}
|
||||
|
||||
class _LoginScreenState extends State<LoginScreen> {
|
||||
class LoginScreenState extends State<LoginScreen> {
|
||||
final usernameController = TextEditingController();
|
||||
final passwordController = TextEditingController();
|
||||
final schoolController = SchoolInputController();
|
||||
@@ -109,15 +109,19 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
child: ClipRect(
|
||||
child: Container(
|
||||
// Png shadow *hack*
|
||||
width: MediaQuery.of(context).size.width / 4,
|
||||
margin: const EdgeInsets.only(
|
||||
left: 12.0, right: 12.0, bottom: 12.0),
|
||||
// Png shadow *hack*
|
||||
child: Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 8.0),
|
||||
child: Opacity(
|
||||
opacity: 0.3,
|
||||
child: Image.asset(
|
||||
"assets/icons/ic_splash.png",
|
||||
color: Colors.black),
|
||||
opacity: 0.3),
|
||||
color: Colors.black)),
|
||||
),
|
||||
BackdropFilter(
|
||||
filter:
|
||||
@@ -126,9 +130,6 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
)
|
||||
],
|
||||
),
|
||||
width: MediaQuery.of(context).size.width / 4,
|
||||
margin: const EdgeInsets.only(
|
||||
left: 12.0, right: 12.0, bottom: 12.0),
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -246,6 +247,14 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 42.0),
|
||||
child: Visibility(
|
||||
visible: _loginState != LoginState.inProgress,
|
||||
replacement: const Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 6.0),
|
||||
child: CircularProgressIndicator(
|
||||
valueColor:
|
||||
AlwaysStoppedAnimation<Color>(Colors.white),
|
||||
),
|
||||
),
|
||||
child: LoginButton(
|
||||
child: Text("login".i18n,
|
||||
maxLines: 1,
|
||||
@@ -255,14 +264,6 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
)),
|
||||
onPressed: () => _loginAPI(context: context),
|
||||
),
|
||||
visible: _loginState != LoginState.inProgress,
|
||||
replacement: const Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 6.0),
|
||||
child: CircularProgressIndicator(
|
||||
valueColor:
|
||||
AlwaysStoppedAnimation<Color>(Colors.white),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
if (_loginState == LoginState.missingFields ||
|
||||
@@ -306,6 +307,7 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
return setState(() => _loginState = LoginState.missingFields);
|
||||
}
|
||||
|
||||
// ignore: no_leading_underscores_for_local_identifiers
|
||||
void _callAPI() {
|
||||
loginAPI(
|
||||
username: username,
|
||||
|
||||
@@ -6,16 +6,17 @@ import 'package:flutter/material.dart';
|
||||
import 'package:filcnaplo_kreta_api/models/school.dart';
|
||||
|
||||
class SchoolInput extends StatefulWidget {
|
||||
const SchoolInput({Key? key, required this.controller, required this.scroll}) : super(key: key);
|
||||
const SchoolInput(
|
||||
{super.key, required this.controller, required this.scroll});
|
||||
|
||||
final SchoolInputController controller;
|
||||
final ScrollController scroll;
|
||||
|
||||
@override
|
||||
_SchoolInputState createState() => _SchoolInputState();
|
||||
SchoolInputState createState() => SchoolInputState();
|
||||
}
|
||||
|
||||
class _SchoolInputState extends State<SchoolInput> {
|
||||
class SchoolInputState extends State<SchoolInput> {
|
||||
final _focusNode = FocusNode();
|
||||
final _layerLink = LayerLink();
|
||||
late SchoolInputOverlay overlay;
|
||||
@@ -33,10 +34,13 @@ class _SchoolInputState extends State<SchoolInput> {
|
||||
// Show school list when focused
|
||||
_focusNode.addListener(() {
|
||||
if (_focusNode.hasFocus) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => overlay.createOverlayEntry(context));
|
||||
WidgetsBinding.instance
|
||||
.addPostFrameCallback((_) => overlay.createOverlayEntry(context));
|
||||
Future.delayed(const Duration(milliseconds: 100)).then((value) {
|
||||
if (mounted && widget.scroll.hasClients) {
|
||||
widget.scroll.animateTo(widget.scroll.offset + 500, duration: const Duration(milliseconds: 500), curve: Curves.ease);
|
||||
widget.scroll.animateTo(widget.scroll.offset + 500,
|
||||
duration: const Duration(milliseconds: 500),
|
||||
curve: Curves.ease);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@@ -52,7 +56,8 @@ class _SchoolInputState extends State<SchoolInput> {
|
||||
return;
|
||||
}
|
||||
|
||||
List<School> results = searchSchools(widget.controller.schools ?? [], text);
|
||||
List<School> results =
|
||||
searchSchools(widget.controller.schools ?? [], text);
|
||||
setState(() {
|
||||
overlay.children = results
|
||||
.map((School e) => SchoolInputTile(
|
||||
|
||||
@@ -17,20 +17,20 @@ class SchoolInputOverlay {
|
||||
RenderBox renderBox = context.findRenderObject()! as RenderBox;
|
||||
var size = renderBox.size;
|
||||
return SchoolInputOverlayWidget(
|
||||
children: children,
|
||||
size: size,
|
||||
layerLink: layerLink,
|
||||
children: children,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class SchoolInputOverlayWidget extends StatelessWidget {
|
||||
const SchoolInputOverlayWidget({
|
||||
Key? key,
|
||||
super.key,
|
||||
required this.children,
|
||||
required this.size,
|
||||
required this.layerLink,
|
||||
}) : super(key: key);
|
||||
});
|
||||
|
||||
final Size size;
|
||||
final List<Widget>? children;
|
||||
@@ -48,7 +48,8 @@ class SchoolInputOverlayWidget extends StatelessWidget {
|
||||
offset: Offset(0.0, size.height + 5.0),
|
||||
child: Material(
|
||||
color: Theme.of(context).colorScheme.background,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8.0)),
|
||||
elevation: 4.0,
|
||||
shadowColor: Colors.black,
|
||||
child: (children?.length ?? 0) > 0
|
||||
|
||||
@@ -2,8 +2,7 @@ import 'package:filcnaplo_kreta_api/models/school.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class SchoolInputTile extends StatelessWidget {
|
||||
const SchoolInputTile({Key? key, required this.school, this.onTap})
|
||||
: super(key: key);
|
||||
const SchoolInputTile({super.key, required this.school, this.onTap});
|
||||
|
||||
final School school;
|
||||
final Function()? onTap;
|
||||
|
||||
@@ -2,7 +2,11 @@ import 'package:filcnaplo_mobile_ui/screens/navigation/navbar_item.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class Navbar extends StatelessWidget {
|
||||
const Navbar({Key? key, required this.selectedIndex, required this.onSelected, required this.items}) : super(key: key);
|
||||
const Navbar(
|
||||
{super.key,
|
||||
required this.selectedIndex,
|
||||
required this.onSelected,
|
||||
required this.items});
|
||||
|
||||
final int selectedIndex;
|
||||
final void Function(int index) onSelected;
|
||||
|
||||
@@ -11,11 +11,11 @@ class NavItem {
|
||||
|
||||
class NavbarItem extends StatelessWidget {
|
||||
const NavbarItem({
|
||||
Key? key,
|
||||
super.key,
|
||||
required this.item,
|
||||
required this.active,
|
||||
required this.onTap,
|
||||
}) : super(key: key);
|
||||
});
|
||||
|
||||
final NavItem item;
|
||||
final bool active;
|
||||
|
||||
@@ -29,7 +29,7 @@ import 'package:filcnaplo_premium/providers/goal_provider.dart';
|
||||
import 'package:filcnaplo/api/providers/ad_provider.dart';
|
||||
|
||||
class NavigationScreen extends StatefulWidget {
|
||||
const NavigationScreen({Key? key}) : super(key: key);
|
||||
const NavigationScreen({super.key});
|
||||
|
||||
static NavigationScreenState? of(BuildContext context) =>
|
||||
context.findAncestorStateOfType<NavigationScreenState>();
|
||||
@@ -234,6 +234,7 @@ class NavigationScreenState extends State<NavigationScreen>
|
||||
_navigatorState.currentState?.pushReplacementNamed(page);
|
||||
});
|
||||
|
||||
// ignore: deprecated_member_use
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
if (_navigatorState.currentState?.canPop() ?? false) {
|
||||
|
||||
@@ -6,13 +6,13 @@ import 'package:filcnaplo/api/providers/status_provider.dart';
|
||||
import 'status_bar.i18n.dart';
|
||||
|
||||
class StatusBar extends StatefulWidget {
|
||||
const StatusBar({Key? key}) : super(key: key);
|
||||
const StatusBar({super.key});
|
||||
|
||||
@override
|
||||
_StatusBarState createState() => _StatusBarState();
|
||||
StatusBarState createState() => StatusBarState();
|
||||
}
|
||||
|
||||
class _StatusBarState extends State<StatusBar> {
|
||||
class StatusBarState extends State<StatusBar> {
|
||||
late StatusProvider statusProvider;
|
||||
|
||||
@override
|
||||
|
||||
@@ -12,7 +12,7 @@ import 'package:provider/provider.dart';
|
||||
import 'package:filcnaplo/api/providers/news_provider.dart';
|
||||
|
||||
class NewsScreen extends StatelessWidget {
|
||||
const NewsScreen({Key? key}) : super(key: key);
|
||||
const NewsScreen({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
@@ -3,7 +3,7 @@ import 'package:filcnaplo/models/news.dart';
|
||||
import 'package:filcnaplo/utils/format.dart';
|
||||
|
||||
class NewsTile extends StatelessWidget {
|
||||
const NewsTile(this.news, {Key? key, this.onTap}) : super(key: key);
|
||||
const NewsTile(this.news, {super.key, this.onTap});
|
||||
|
||||
final News news;
|
||||
final Function()? onTap;
|
||||
|
||||
@@ -11,7 +11,7 @@ import 'package:provider/provider.dart';
|
||||
import 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.i18n.dart';
|
||||
|
||||
class NewsView extends StatelessWidget {
|
||||
const NewsView(this.news, {Key? key}) : super(key: key);
|
||||
const NewsView(this.news, {super.key});
|
||||
|
||||
final News news;
|
||||
|
||||
|
||||
@@ -3,7 +3,13 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||
|
||||
class AccountTile extends StatelessWidget {
|
||||
const AccountTile({Key? key, this.onTap, this.onTapMenu, this.profileImage, this.name, this.username}) : super(key: key);
|
||||
const AccountTile(
|
||||
{super.key,
|
||||
this.onTap,
|
||||
this.onTapMenu,
|
||||
this.profileImage,
|
||||
this.name,
|
||||
this.username});
|
||||
|
||||
final void Function()? onTap;
|
||||
final void Function()? onTapMenu;
|
||||
@@ -30,7 +36,8 @@ class AccountTile extends StatelessWidget {
|
||||
child: IconButton(
|
||||
splashRadius: 24.0,
|
||||
onPressed: onTapMenu,
|
||||
icon: Icon(FeatherIcons.moreVertical, color: AppColors.of(context).text.withOpacity(0.8)),
|
||||
icon: Icon(FeatherIcons.moreVertical,
|
||||
color: AppColors.of(context).text.withOpacity(0.8)),
|
||||
),
|
||||
)
|
||||
: null,
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// ignore_for_file: no_leading_underscores_for_local_identifiers
|
||||
|
||||
import 'package:filcnaplo/models/user.dart';
|
||||
import 'package:filcnaplo_mobile_ui/common/bottom_card.dart';
|
||||
import 'package:filcnaplo_mobile_ui/common/detail.dart';
|
||||
@@ -8,7 +10,7 @@ import 'package:intl/intl.dart';
|
||||
import 'account_view.i18n.dart';
|
||||
|
||||
class AccountView extends StatelessWidget {
|
||||
const AccountView(this.user, {Key? key}) : super(key: key);
|
||||
const AccountView(this.user, {super.key});
|
||||
|
||||
final User user;
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// ignore_for_file: no_leading_underscores_for_local_identifiers, use_build_context_synchronously
|
||||
|
||||
import 'package:filcnaplo/api/providers/update_provider.dart';
|
||||
import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
|
||||
import 'package:filcnaplo_kreta_api/providers/event_provider.dart';
|
||||
@@ -46,13 +48,13 @@ import 'package:filcnaplo_premium/ui/mobile/settings/modify_teacher_names.dart';
|
||||
import 'package:filcnaplo_premium/ui/mobile/settings/welcome_message.dart';
|
||||
|
||||
class SettingsScreen extends StatefulWidget {
|
||||
const SettingsScreen({Key? key}) : super(key: key);
|
||||
const SettingsScreen({super.key});
|
||||
|
||||
@override
|
||||
_SettingsScreenState createState() => _SettingsScreenState();
|
||||
SettingsScreenState createState() => SettingsScreenState();
|
||||
}
|
||||
|
||||
class _SettingsScreenState extends State<SettingsScreen>
|
||||
class SettingsScreenState extends State<SettingsScreen>
|
||||
with SingleTickerProviderStateMixin {
|
||||
int devmodeCountdown = 5;
|
||||
bool __ss = false; // secret settings
|
||||
|
||||
Reference in New Issue
Block a user