summaryrefslogtreecommitdiff
path: root/lib/about.dart
blob: 7dbaaf47b64822e68a580ee192fa7768ca75a594 (plain)
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,
                      ),
                    ),
                  ),
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}