forked from firka/firka
developer options
This commit is contained in:
@@ -32,6 +32,7 @@ const ttToastTestsAndHw = 1013;
|
||||
const ttToastBreaks = 1014;
|
||||
|
||||
const statsForNerds = 1015;
|
||||
const developerOptsEnabled = 1016;
|
||||
|
||||
bool always() {
|
||||
return true;
|
||||
@@ -41,6 +42,11 @@ bool never() {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isDeveloper() {
|
||||
return isDebug() ||
|
||||
initData.settings.group("settings").boolean("developer_enabled");
|
||||
}
|
||||
|
||||
bool isAndroid() {
|
||||
return Platform.isAndroid;
|
||||
}
|
||||
@@ -228,13 +234,6 @@ class SettingsStore {
|
||||
isAndroid),
|
||||
}),
|
||||
always),
|
||||
"stats_for_nerds": SettingsBoolean(
|
||||
statsForNerds,
|
||||
FirkaIconType.majesticonsLocal,
|
||||
"wrenchSolid",
|
||||
l10n.s_stats_for_nerds,
|
||||
false,
|
||||
always),
|
||||
"notifications": SettingsSubGroup(0, FirkaIconType.majesticons,
|
||||
Majesticon.bellSolid, "Értesítések", LinkedHashMap.of({}), never),
|
||||
"extras": SettingsSubGroup(
|
||||
@@ -247,6 +246,22 @@ class SettingsStore {
|
||||
"settings_other_padding": SettingsPadding(0, 20, never),
|
||||
"settings_other_header": SettingsHeaderSmall(0, "Egyéb", never),
|
||||
|
||||
"developer": SettingsSubGroup(
|
||||
0,
|
||||
FirkaIconType.majesticonsLocal,
|
||||
"wrenchSolid",
|
||||
l10n.s_developer,
|
||||
LinkedHashMap.of({
|
||||
"stats_for_nerds": SettingsBoolean(
|
||||
statsForNerds,
|
||||
FirkaIconType.majesticonsLocal,
|
||||
"wrenchSolid",
|
||||
l10n.s_stats_for_nerds,
|
||||
false,
|
||||
always),
|
||||
}),
|
||||
isDeveloper),
|
||||
|
||||
// misc
|
||||
"beta_warning": SettingsBoolean(
|
||||
betaWarning, null, null, "Beta warning", false, never),
|
||||
@@ -281,7 +296,9 @@ class SettingsStore {
|
||||
true,
|
||||
always),
|
||||
}),
|
||||
never)
|
||||
never),
|
||||
"developer_enabled": SettingsBoolean(
|
||||
developerOptsEnabled, null, null, "Developer", false, never),
|
||||
}),
|
||||
always);
|
||||
|
||||
|
||||
Submodule firka/lib/l10n updated: 4557640339...1e557de406
@@ -23,6 +23,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:watch_connectivity/watch_connectivity.dart';
|
||||
@@ -38,6 +39,7 @@ final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
||||
late AppInitialization initData;
|
||||
|
||||
final dio = Dio();
|
||||
final isBeta = true;
|
||||
|
||||
class DeviceInfo {
|
||||
String model;
|
||||
@@ -56,6 +58,7 @@ class DeviceInfo {
|
||||
|
||||
class AppInitialization {
|
||||
final Isar isar;
|
||||
final PackageInfo packageInfo;
|
||||
final DeviceInfo devInfo;
|
||||
late KretaClient client;
|
||||
int tokenCount;
|
||||
@@ -68,6 +71,7 @@ class AppInitialization {
|
||||
AppInitialization({
|
||||
required this.isar,
|
||||
required this.devInfo,
|
||||
required this.packageInfo,
|
||||
required this.tokenCount,
|
||||
required this.settings,
|
||||
required this.l10n,
|
||||
@@ -156,6 +160,7 @@ Future<AppInitialization> initializeApp() async {
|
||||
var init = AppInitialization(
|
||||
isar: isar,
|
||||
devInfo: devInfo,
|
||||
packageInfo: await PackageInfo.fromPlatform(),
|
||||
tokenCount: tokenCount,
|
||||
settings: SettingsStore(AppLocalizationsHu()),
|
||||
l10n: AppLocalizationsHu(),
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'package:firka/helpers/db/models/app_settings_model.dart';
|
||||
import 'package:firka/helpers/settings/setting.dart';
|
||||
import 'package:firka/helpers/ui/firka_card.dart';
|
||||
import 'package:firka/main.dart';
|
||||
import 'package:firka/ui/model/style.dart';
|
||||
@@ -6,8 +8,32 @@ import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../../helpers/firka_bundle.dart';
|
||||
import '../../screens/debug/debug_screen.dart';
|
||||
import '../../screens/home/home_screen.dart';
|
||||
|
||||
void showExtrasBottomSheet(BuildContext context, AppInitialization data) {
|
||||
Widget debugBtn = SizedBox();
|
||||
|
||||
debugPrint("Developer mode: ${isDeveloper()}");
|
||||
|
||||
if (isDeveloper()) {
|
||||
debugBtn = GestureDetector(
|
||||
onTap: () => {
|
||||
Navigator.pop(context),
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => DefaultAssetBundle(
|
||||
bundle: FirkaBundle(), child: DebugScreen(data))))
|
||||
},
|
||||
child: FirkaCard(
|
||||
left: [Text(data.l10n.debug_screen)],
|
||||
right: [],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
var debugCounter = 0;
|
||||
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
elevation: 100,
|
||||
@@ -37,39 +63,74 @@ void showExtrasBottomSheet(BuildContext context, AppInitialization data) {
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
child: Stack(
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () => {
|
||||
Navigator.pop(context),
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => DefaultAssetBundle(
|
||||
bundle: FirkaBundle(),
|
||||
child: DebugScreen(data))))
|
||||
},
|
||||
child: FirkaCard(
|
||||
left: [Text(data.l10n.debug_screen)],
|
||||
right: [],
|
||||
Column(
|
||||
children: [
|
||||
debugBtn,
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => DefaultAssetBundle(
|
||||
bundle: FirkaBundle(),
|
||||
child: SettingsScreen(
|
||||
data, data.settings.items))));
|
||||
},
|
||||
child: FirkaCard(
|
||||
left: [Text(data.l10n.settings_screen)],
|
||||
right: [],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(bottom: 32),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
SizedBox(),
|
||||
GestureDetector(
|
||||
child: Text(
|
||||
"v${data.packageInfo.version} ${isBeta ? "beta" : ""}"),
|
||||
onTap: () async {
|
||||
if (isDebug()) return;
|
||||
if (debugCounter == 10) {
|
||||
data.settings.group("settings").setBoolean(
|
||||
"developer_enabled",
|
||||
!data.settings
|
||||
.group("settings")
|
||||
.boolean("developer_enabled"));
|
||||
|
||||
await data.isar.writeTxn(() async {
|
||||
await data.settings
|
||||
.group("settings")["developer_enabled"]!
|
||||
.save(data.isar.appSettingsModels);
|
||||
});
|
||||
|
||||
Navigator.of(navigatorKey.currentContext!)
|
||||
.popUntil((route) => false);
|
||||
Navigator.push(
|
||||
navigatorKey.currentContext!,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => DefaultAssetBundle(
|
||||
bundle: FirkaBundle(),
|
||||
child: HomeScreen(
|
||||
data,
|
||||
false,
|
||||
key: ValueKey('homeScreen'),
|
||||
))),
|
||||
);
|
||||
} else if (debugCounter < 10) {
|
||||
debugCounter++;
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => DefaultAssetBundle(
|
||||
bundle: FirkaBundle(),
|
||||
child: SettingsScreen(
|
||||
data, data.settings.items))));
|
||||
},
|
||||
child: FirkaCard(
|
||||
left: [Text(data.l10n.settings_screen)],
|
||||
right: [],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@@ -261,10 +261,16 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
_updateSystemUI();
|
||||
});
|
||||
|
||||
widget.data.settingsUpdateNotifier.addListener(settingsUpdateListener);
|
||||
|
||||
prefetch();
|
||||
_preloadImages();
|
||||
}
|
||||
|
||||
void settingsUpdateListener() {
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
Future<void> _preloadImages() async {
|
||||
final imagePaths = widget.data.settings.appIcons.keys
|
||||
.map((icon) => "assets/images/icons/$icon.webp")
|
||||
@@ -553,6 +559,8 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
|
||||
widget.data.settingsUpdateNotifier.removeListener(settingsUpdateListener);
|
||||
|
||||
_disposed = true;
|
||||
_fetching = false;
|
||||
_prefetched = false;
|
||||
|
||||
@@ -184,8 +184,10 @@ void showLessonBottomSheet(
|
||||
Color accent,
|
||||
Color secondary,
|
||||
Color bgColor) {
|
||||
final statsForNerdsEnabled =
|
||||
data.settings.group("settings").boolean("stats_for_nerds");
|
||||
final statsForNerdsEnabled = data.settings
|
||||
.group("settings")
|
||||
.subGroup("developer")
|
||||
.boolean("stats_for_nerds");
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
elevation: 100,
|
||||
|
||||
@@ -64,6 +64,7 @@ dependencies:
|
||||
transparent_pointer: ^1.0.1
|
||||
flutter_staggered_grid_view: ^0.7.0
|
||||
pull_to_refresh_flutter3: ^2.0.2
|
||||
package_info_plus: ^8.3.1
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in New Issue
Block a user