import 'dart:io'; import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:venera/foundation/history.dart'; import 'appdata.dart'; import 'favorites.dart'; import 'local.dart'; export "widget_utils.dart"; export "context.dart"; class _App { final version = "1.3.2"; bool get isAndroid => Platform.isAndroid; bool get isIOS => Platform.isIOS; bool get isWindows => Platform.isWindows; bool get isLinux => Platform.isLinux; bool get isMacOS => Platform.isMacOS; bool get isDesktop => Platform.isWindows || Platform.isLinux || Platform.isMacOS; bool get isMobile => Platform.isAndroid || Platform.isIOS; Locale get locale { Locale deviceLocale = PlatformDispatcher.instance.locale; if (deviceLocale.languageCode == "zh" && deviceLocale.scriptCode == "Hant") { deviceLocale = const Locale("zh", "TW"); } if (appdata.settings['language'] != 'system') { return Locale( appdata.settings['language'].split('-')[0], appdata.settings['language'].split('-')[1], ); } return deviceLocale; } late String dataPath; late String cachePath; final rootNavigatorKey = GlobalKey(); GlobalKey? mainNavigatorKey; BuildContext get rootContext => rootNavigatorKey.currentContext!; final Appdata data = appdata; final HistoryManager history = HistoryManager(); final LocalFavoritesManager favorites = LocalFavoritesManager(); final LocalManager local = LocalManager(); void rootPop() { rootNavigatorKey.currentState?.maybePop(); } void pop() { if (rootNavigatorKey.currentState?.canPop() ?? false) { rootNavigatorKey.currentState?.pop(); } else if (mainNavigatorKey?.currentState?.canPop() ?? false) { mainNavigatorKey?.currentState?.pop(); } } Future init() async { cachePath = (await getApplicationCacheDirectory()).path; dataPath = (await getApplicationSupportDirectory()).path; } Future initComponents() async { await Future.wait([ data.init(), history.init(), favorites.init(), local.init(), ]); } Function? _forceRebuildHandler; void registerForceRebuild(Function handler) { _forceRebuildHandler = handler; } void forceRebuild() { _forceRebuildHandler?.call(); } } // ignore: non_constant_identifier_names final App = _App();