Initial commit
This commit is contained in:
108
lib/utils/platform_infos.dart
Normal file
108
lib/utils/platform_infos.dart
Normal file
@@ -0,0 +1,108 @@
|
||||
// SPDX-FileCopyrightText: 2019-Present Christian Kußowski
|
||||
// SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:tatchat/config/setting_keys.dart';
|
||||
import 'package:tatchat/l10n/l10n.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
import 'package:url_launcher/url_launcher_string.dart';
|
||||
|
||||
import '../config/app_config.dart';
|
||||
|
||||
abstract class PlatformInfos {
|
||||
static bool get isWeb => kIsWeb;
|
||||
static bool get isLinux => !kIsWeb && Platform.isLinux;
|
||||
static bool get isWindows => !kIsWeb && Platform.isWindows;
|
||||
static bool get isMacOS => !kIsWeb && Platform.isMacOS;
|
||||
static bool get isIOS => !kIsWeb && Platform.isIOS;
|
||||
static bool get isAndroid => !kIsWeb && Platform.isAndroid;
|
||||
|
||||
static bool get isCupertinoStyle => isIOS || isMacOS;
|
||||
|
||||
static bool get isMobile => isAndroid || isIOS;
|
||||
|
||||
/// For desktops which don't support ChachedNetworkImage yet
|
||||
static bool get isBetaDesktop => isWindows || isLinux;
|
||||
|
||||
static bool get isDesktop => isLinux || isWindows || isMacOS;
|
||||
|
||||
static bool get usesTouchscreen => !isMobile;
|
||||
|
||||
static bool get supportsVideoPlayer =>
|
||||
!PlatformInfos.isWindows && !PlatformInfos.isLinux;
|
||||
|
||||
static bool get supportsCustomImageResizer =>
|
||||
PlatformInfos.isWeb || PlatformInfos.isMobile;
|
||||
|
||||
/// Web could also record in theory but currently creates broken opus
|
||||
static bool get platformCanRecord => (isMobile || isMacOS);
|
||||
|
||||
static bool get supportsAppLock => (isMobile || isMacOS);
|
||||
|
||||
static String get appDisplayName =>
|
||||
'${AppSettings.applicationName.value} ${isWeb ? 'web' : Platform.operatingSystem}${kReleaseMode ? '' : 'Debug'}';
|
||||
|
||||
static Future<String> getVersion() async {
|
||||
var version = kIsWeb ? 'Web' : 'Unknown';
|
||||
try {
|
||||
version = (await PackageInfo.fromPlatform()).version;
|
||||
} catch (_) {}
|
||||
return version;
|
||||
}
|
||||
|
||||
static Future<void> showDialog(BuildContext context) async {
|
||||
final l10n = L10n.of(context);
|
||||
final version = await PlatformInfos.getVersion();
|
||||
if (!context.mounted) return;
|
||||
showAboutDialog(
|
||||
context: context,
|
||||
children: [
|
||||
Text(l10n.versionWithNumber(version)),
|
||||
TextButton.icon(
|
||||
onPressed: () => launchUrlString(AppConfig.sourceCodeUrl),
|
||||
icon: const Icon(Icons.source_outlined),
|
||||
label: Text(l10n.sourceCode),
|
||||
),
|
||||
Builder(
|
||||
builder: (innerContext) {
|
||||
return TextButton.icon(
|
||||
onPressed: () {
|
||||
context.go('/logs');
|
||||
Navigator.of(innerContext).pop();
|
||||
},
|
||||
icon: const Icon(Icons.list_outlined),
|
||||
label: Text(l10n.logs),
|
||||
);
|
||||
},
|
||||
),
|
||||
Builder(
|
||||
builder: (innerContext) {
|
||||
return TextButton.icon(
|
||||
onPressed: () {
|
||||
context.go('/configs');
|
||||
Navigator.of(innerContext).pop();
|
||||
},
|
||||
icon: const Icon(Icons.settings_applications_outlined),
|
||||
label: Text(l10n.advancedConfigs),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
applicationIcon: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(64),
|
||||
child: Image.asset(
|
||||
'./assets/logo/mini/logo_mini.png',
|
||||
width: 64,
|
||||
height: 64,
|
||||
),
|
||||
),
|
||||
applicationName: AppSettings.applicationName.value,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user