import 'package:flutter/widgets.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/utils/default_ui_design.dart'; import 'package:package_info_plus/package_info_plus.dart'; class AboutPage extends StatefulWidget { final UiDesign? uiDesign; const AboutPage({Key? key, this.uiDesign}) : super(key: key); static String routeName = '/about'; @override State createState() { final uiDesign = this.uiDesign ?? defaultUiDesign; switch (uiDesign) { case UiDesign.MATERIAL: return AboutPageStateMaterial(); case UiDesign.CUPERTINO: return AboutPageStateCupertino(); default: throw UnmatchedUiDesignException(uiDesign); } } } 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(); } }