You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
import 'dart:io';
 | 
						|
 | 
						|
import 'package:flutter/foundation.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
import 'package:flutter_gen/gen_l10n/l10n.dart';
 | 
						|
import 'package:go_router/go_router.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 platformCanRecord => (isMobile || isMacOS);
 | 
						|
 | 
						|
  static String get clientName =>
 | 
						|
      '${AppConfig.applicationName} ${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 void showDialog(BuildContext context) async {
 | 
						|
    final version = await PlatformInfos.getVersion();
 | 
						|
    showAboutDialog(
 | 
						|
      context: context,
 | 
						|
      children: [
 | 
						|
        Text('Version: $version'),
 | 
						|
        TextButton.icon(
 | 
						|
          onPressed: () => launchUrlString(AppConfig.sourceCodeUrl),
 | 
						|
          icon: const Icon(Icons.source_outlined),
 | 
						|
          label: Text(L10n.of(context)!.sourceCode),
 | 
						|
        ),
 | 
						|
        TextButton.icon(
 | 
						|
          onPressed: () => launchUrlString(AppConfig.emojiFontUrl),
 | 
						|
          icon: const Icon(Icons.emoji_emotions_outlined),
 | 
						|
          label: const Text(AppConfig.emojiFontName),
 | 
						|
        ),
 | 
						|
        Builder(
 | 
						|
          builder: (innerContext) {
 | 
						|
            return TextButton.icon(
 | 
						|
              onPressed: () {
 | 
						|
                context.go('/logs');
 | 
						|
                Navigator.of(innerContext).pop();
 | 
						|
              },
 | 
						|
              icon: const Icon(Icons.list_outlined),
 | 
						|
              label: const Text('Logs'),
 | 
						|
            );
 | 
						|
          },
 | 
						|
        ),
 | 
						|
      ],
 | 
						|
      applicationIcon: Image.asset(
 | 
						|
        'assets/logo.png',
 | 
						|
        width: 64,
 | 
						|
        height: 64,
 | 
						|
        filterQuality: FilterQuality.medium,
 | 
						|
      ),
 | 
						|
      applicationName: AppConfig.applicationName,
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |