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)>? _loadedData;
@override
void initState() {
super.initState();
_loadedData = Future(() async {
var packageInfo = await PackageInfo.fromPlatform();
var license = await rootBundle.loadString('LICENSE');
return (packageInfo, license);
});
}
@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) => TextButton.icon(
icon: Icon(Icons.copyright),
label: Text('View licenses'),
onPressed: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LicensePage(
applicationIcon: Icon(Icons.speed),
applicationName: snapshot.data?.$1.appName,
applicationVersion: snapshot.data?.$1.version,
applicationLegalese: snapshot.data?.$2,
),
),
),
),
),
],
),
),
);
}
}
|