wonders/lib/logic/app_logic.dart

81 lines
2.3 KiB
Dart
Raw Normal View History

2022-08-29 20:38:28 -06:00
import 'dart:async';
2022-09-06 13:35:47 -06:00
import 'package:flutter/foundation.dart';
import 'package:flutter_displaymode/flutter_displaymode.dart';
2022-08-29 20:38:28 -06:00
import 'package:wonders/common_libs.dart';
import 'package:wonders/ui/common/utils/page_routes.dart';
class AppLogic {
/// Indicates to the rest of the app that bootstrap has not completed.
/// The router will use this to prevent redirects while bootstrapping.
bool isBootstrapComplete = false;
/// Initialize the app and all main actors.
/// Loads settings, sets up services etc.
Future<void> bootstrap() async {
// Default error handler
FlutterError.onError = _handleFlutterError;
// Load any bitmaps the views might need
await AppBitmaps.init();
// Default to only allowing portrait mode
setDeviceOrientation(Axis.vertical);
// Set preferred refresh rate to the max possible (the OS may ignore this)
2022-09-06 13:35:47 -06:00
if (defaultTargetPlatform == TargetPlatform.android) {
await FlutterDisplayMode.setHighRefreshRate();
}
// Localizations
2022-08-29 20:38:28 -06:00
await localeLogic.load();
// Timeline
2022-08-29 20:38:28 -06:00
await timelineLogic.init();
// Settings
2022-08-29 20:38:28 -06:00
await settingsLogic.load();
// Collectibles
2022-08-29 20:38:28 -06:00
await collectiblesLogic.load();
// flag bootStrap as complete
isBootstrapComplete = true;
// load initial view (replace empty initial view which is covered by a native splash screen)
bool showIntro = settingsLogic.hasCompletedOnboarding.value == false;
if (showIntro) {
2022-08-29 20:38:28 -06:00
appRouter.go(ScreenPaths.intro);
} else {
appRouter.go(ScreenPaths.home);
2022-08-29 20:38:28 -06:00
}
}
void setDeviceOrientation(Axis? axis) {
final orientations = <DeviceOrientation>[];
if (axis == null || axis == Axis.vertical) {
orientations.addAll([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
if (axis == null || axis == Axis.horizontal) {
orientations.addAll([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
}
SystemChrome.setPreferredOrientations(orientations);
}
void _handleFlutterError(FlutterErrorDetails details) {
FlutterError.dumpErrorToConsole(details);
}
Future<T?> showFullscreenDialogRoute<T>(BuildContext context, Widget child) async {
return await Navigator.of(context).push<T>(
PageRoutes.dialog<T>(child, $styles.times.pageTransition),
);
}
}