import 'package:fluent_ui/fluent_ui.dart'; import 'package:flutter/services.dart'; import 'package:info_tren/pages/about/about_page.dart'; import 'package:url_launcher/url_launcher.dart'; class AboutPageFluent extends AboutPageShared { const AboutPageFluent({super.key}); @override State createState() => AboutPageStateFluent(); } class AboutPageStateFluent extends AboutPageState { @override Widget build(BuildContext context) { return NavigationView( appBar: NavigationAppBar( title: Text(pageTitle), ), content: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Center( child: Text( 'Info Tren', style: FluentTheme.of(context).typography.display, ), ), if (packageInfo != null) Center( child: Text( packageInfo!.packageName, style: FluentTheme.of(context).typography.caption, ), ), // ListTile( // title: Text(versionTitleText), // subtitle: localChangelog.isEmpty ? null : Text(localChangelog.first.title), // ), const Divider(), for (final log in mergedChangelogs) ...[ Padding( padding: const EdgeInsets.fromLTRB(8, 8, 8, 0), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: Text( log.version.toString(), style: FluentTheme.of(context).typography.title, ), ), if (localChangelog.isNotEmpty && log.version == localChangelog.first.version) Container( decoration: BoxDecoration( border: Border.all( color: FluentTheme.of(context).inactiveColor, width: 1, ), borderRadius: BorderRadius.circular(20), ), child: Padding( padding: const EdgeInsets.all(4), child: Text( currentVersionText, style: const TextStyle( inherit: true, ), ), ), ), if (remoteChangelog.isNotEmpty && log.version == remoteChangelog.first.version && (localChangelog.isEmpty || localChangelog.first.version != log.version)) Container( decoration: BoxDecoration( border: Border.all( color: Colors.green, width: 1, ), borderRadius: BorderRadius.circular(20), ), child: Padding( padding: const EdgeInsets.all(4), child: Text( latestVersionText, style: TextStyle( inherit: true, color: Colors.green, ), ), ), ), if (AboutPageState.download == 'apk' && log.apkLink != null) GestureDetector( onSecondaryTap: () { Clipboard.setData(ClipboardData(text: log.apkLink!.toString())); // ScaffoldMessenger.of(context).showSnackBar(const SnackBar( // content: Text('Link copied to clipboard'), // )); }, onLongPress: () { Clipboard.setData(ClipboardData(text: log.apkLink!.toString())); // ScaffoldMessenger.of(context).showSnackBar(const SnackBar( // content: Text('Link copied to clipboard'), // )); }, onTap: () { launchUrl( log.apkLink!, mode: LaunchMode.externalApplication, ); }, behavior: HitTestBehavior.translucent, child: const Tooltip( message: 'Download APK', child: Padding( padding: EdgeInsets.all(4), child: Icon(FluentIcons.download), ), ), ), ], ), ), Padding( padding: const EdgeInsets.all(8.0), child: RichText( text: TextSpan( text: log.description, ), ), ), ], ], ), ), ); } }