import 'package:build_info/build_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher_string.dart';
class AboutPage extends StatefulWidget {
const AboutPage({super.key});
@override
State<AboutPage> createState() => _AboutPageState();
}
class _AboutPageState extends State<AboutPage> {
Future<(PackageInfo, String, BuildInfoData?)>? _loadedData;
@override
void initState() {
super.initState();
_loadedData = Future(() async {
var packageInfo = await PackageInfo.fromPlatform();
var license = await rootBundle.loadString('LICENSE');
var buildInfo = await BuildInfo.fromPlatform();
return (packageInfo, license, buildInfo);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('About')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(
Icons.speed,
size: Theme.of(context).textTheme.displayLarge?.fontSize ?? 72,
),
Text(
'Simple Speedometer',
style: Theme.of(context).textTheme.titleLarge,
),
Text('© 2025 Mica White'),
Text(''),
TextButton.icon(
icon: Icon(Icons.code),
label: Text('View source code'),
onPressed: () =>
launchUrlString("https://www.botahamec.dev/cgit/speedometer"),
),
FutureBuilder(
future: _loadedData,
builder: (context, snapshot) {
final appName = snapshot.data?.$1.appName;
final version = snapshot.data?.$1.version;
final legalese = snapshot.data?.$2;
final buildDate = snapshot.data?.$3?.buildDate;
return TextButton.icon(
icon: Icon(Icons.copyright),
label: Text('View licenses'),
onPressed: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LicensePage(
applicationIcon: Icon(Icons.speed),
applicationName: appName,
applicationVersion: snapshot.hasData
? '$version (${buildDate?.year}-${buildDate?.month}-${buildDate?.day})'
: null,
applicationLegalese: legalese,
),
),
),
);
},
),
],
),
),
);
}
}
|