mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
104 lines
2.4 KiB
Dart
104 lines
2.4 KiB
Dart
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<NavigatorState>();
|
|
|
|
GlobalKey<NavigatorState>? 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<void> init() async {
|
|
cachePath = (await getApplicationCacheDirectory()).path;
|
|
dataPath = (await getApplicationSupportDirectory()).path;
|
|
}
|
|
|
|
Future<void> 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();
|