2022-08-04 03:45:32 +03:00
|
|
|
import 'package:flutter/widgets.dart';
|
2022-10-31 03:44:29 +01:00
|
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
2022-08-04 03:45:32 +03:00
|
|
|
import 'package:info_tren/api/releases.dart';
|
2022-10-31 01:25:45 +01:00
|
|
|
import 'package:info_tren/models.dart';
|
2022-08-04 03:45:32 +03:00
|
|
|
import 'package:info_tren/pages/about/about_page_cupertino.dart';
|
2022-11-19 06:01:58 +01:00
|
|
|
import 'package:info_tren/pages/about/about_page_fluent.dart';
|
2022-08-04 03:45:32 +03:00
|
|
|
import 'package:info_tren/pages/about/about_page_material.dart';
|
2022-10-31 03:44:29 +01:00
|
|
|
import 'package:info_tren/providers.dart';
|
2022-08-04 03:45:32 +03:00
|
|
|
import 'package:package_info_plus/package_info_plus.dart';
|
|
|
|
|
2022-10-31 03:44:29 +01:00
|
|
|
class AboutPage extends ConsumerWidget {
|
|
|
|
const AboutPage({super.key});
|
2022-08-04 03:45:32 +03:00
|
|
|
|
|
|
|
static String routeName = '/about';
|
|
|
|
|
|
|
|
@override
|
2022-10-31 03:44:29 +01:00
|
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
|
|
final uiDesign = ref.watch(uiDesignProvider);
|
|
|
|
|
2022-08-04 03:45:32 +03:00
|
|
|
switch (uiDesign) {
|
|
|
|
case UiDesign.MATERIAL:
|
2022-10-31 03:44:29 +01:00
|
|
|
return const AboutPageMaterial();
|
2022-08-04 03:45:32 +03:00
|
|
|
case UiDesign.CUPERTINO:
|
2022-10-31 03:44:29 +01:00
|
|
|
return const AboutPageCupertino();
|
2022-11-19 06:01:58 +01:00
|
|
|
case UiDesign.FLUENT:
|
|
|
|
return const AboutPageFluent();
|
2022-08-04 03:45:32 +03:00
|
|
|
default:
|
|
|
|
throw UnmatchedUiDesignException(uiDesign);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-31 03:44:29 +01:00
|
|
|
abstract class AboutPageShared extends StatefulWidget {
|
|
|
|
const AboutPageShared({super.key});
|
|
|
|
}
|
|
|
|
|
2022-11-19 06:01:58 +01:00
|
|
|
abstract class AboutPageState<T extends AboutPageShared> extends State<T> {
|
2022-10-31 01:49:11 +01:00
|
|
|
static const String download = String.fromEnvironment('DOWNLOAD');
|
2022-08-04 03:45:32 +03:00
|
|
|
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
}
|