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.
80 lines
2.4 KiB
80 lines
2.4 KiB
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_fluent.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(); |
|
case UiDesign.FLUENT: |
|
return const AboutPageFluent(); |
|
default: |
|
throw UnmatchedUiDesignException(uiDesign); |
|
} |
|
} |
|
} |
|
|
|
abstract class AboutPageShared extends StatefulWidget { |
|
const AboutPageShared({super.key}); |
|
} |
|
|
|
abstract class AboutPageState<T extends AboutPageShared> extends State<T> { |
|
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(); |
|
} |
|
}
|
|
|