import 'package:flutter/widgets.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:info_tren/api/releases.dart'; import 'package:info_tren/models.dart'; import 'package:info_tren/pages/about/about_page_cupertino.dart'; import 'package:info_tren/pages/about/about_page_material.dart'; import 'package:info_tren/providers.dart'; import 'package:package_info_plus/package_info_plus.dart'; class AboutPage extends ConsumerWidget { const AboutPage({super.key}); static String routeName = '/about'; @override Widget build(BuildContext context, WidgetRef ref) { final uiDesign = ref.watch(uiDesignProvider); switch (uiDesign) { case UiDesign.MATERIAL: return const AboutPageMaterial(); case UiDesign.CUPERTINO: return const AboutPageCupertino(); default: throw UnmatchedUiDesignException(uiDesign); } } } abstract class AboutPageShared extends StatefulWidget { const AboutPageShared({super.key}); } abstract class AboutPageState extends State { static const String download = String.fromEnvironment('DOWNLOAD'); final String pageTitle = 'Despre aplicație'; final String versionTitleText = 'Versiunea aplicației'; final String latestVersionText = 'Cea mai recentă versiune'; final String currentVersionText = 'Versiunea curentă'; List localChangelog = []; List remoteChangelog = []; List get mergedChangelogs { final logs = remoteChangelog.toList(); final versions = logs.map((log) => log.version).toSet(); for (final log in localChangelog) { if (!versions.contains(log.version)) { logs.add(log); versions.add(log.version); } } logs.sort((l1, l2) => l2.version.compareTo(l1.version)); return logs; } PackageInfo? packageInfo; @override void didChangeDependencies() { PackageInfo.fromPlatform().then((value) => setState(() { packageInfo = value; })); DefaultAssetBundle.of(context).loadString('CHANGELOG.txt').then((value) { setState(() { localChangelog = ChangelogEntry.fromTextFile(value); }); }); getRemoteReleases().then((value) => setState(() { remoteChangelog = value; })); super.didChangeDependencies(); } }