You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.2 KiB

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<StatefulWidget> 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<AboutPage> {
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<ChangelogEntry> localChangelog = [];
List<ChangelogEntry> remoteChangelog = [];
List<ChangelogEntry> 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();
}
}