anchor.diff:          children: [
             Image.asset('assets/graphics/app-icon.png', scale: 1 / 0.75),
             Padding(
  -            padding: const EdgeInsets.symmetric(vertical: 24.0),
  +            padding: const EdgeInsets.only(top: 24.0),
               child: Text(
                 'Yubico Authenticator',
                 style: Theme.of(context).textTheme.titleMedium,
               ),
             ),
  -          const Text('Yubico Authenticator: $version'),
  -          if (isDesktop) Text('ykman: ${ref.watch(rpcStateProvider).version}'),
  -          //Text('Dart version: ${Platform.version}'),
  +          const Text(version),
  +          const Text(''),
             const Text('Copyright © 2022 Yubico'),
             const Text('All rights reserved'),
             const Text(''),
             Row(
               mainAxisSize: MainAxisSize.min,
               children: [
  -              UrlLink(
  -                text: 'Terms of use',
  -                target: Uri.parse(
  -                    'https://www.yubico.com/support/terms-conditions/yubico-license-agreement/'),
  -              ),
  -              const SizedBox(width: 8.0),
  -              UrlLink(
  -                text: 'Privacy policy',
  -                target: Uri.parse(
  -                    'https://www.yubico.com/support/terms-conditions/privacy-notice/'),
  +              TextButton(
  +                child: const Text(
  +                  'Terms of use',
  +                  style: TextStyle(decoration: TextDecoration.underline),
  +                ),
  +                onPressed: () {
  +                  launchUrl(
  +                    Uri.parse(
  +                        'https://www.yubico.com/support/terms-conditions/yubico-license-agreement/'),
  +                    mode: LaunchMode.externalApplication,
  +                  );
  +                },
  +              ),
  +              TextButton(
  +                child: const Text(
  +                  'Privacy policy',
  +                  style: TextStyle(decoration: TextDecoration.underline),
  +                ),
  +                onPressed: () {
  +                  launchUrl(
  +                    Uri.parse(
  +                        'https://www.yubico.com/support/terms-conditions/privacy-notice/'),
  +                    mode: LaunchMode.externalApplication,
  +                  );
  +                },
                 ),
               ],
  +          ),
  +          TextButton(
  +            child: const Text(
  +              'Open source licenses',
  +              style: TextStyle(decoration: TextDecoration.underline),
  +            ),
  +            onPressed: () {
  +              showLicensePage(
  +                context: context,
  +                applicationVersion: version,
  +              );
  +            },
             ),
             const Padding(
               padding: EdgeInsets.only(top: 24.0, bottom: 8.0),
  
positive.code:     );
    }
  }
  
  class UrlLink extends StatefulWidget {
    final String text;
    final Uri target;
  
    const UrlLink({super.key, required this.text, required this.target});
  
    @override
    State<StatefulWidget> createState() => _UrlLinkState();
  }
  
  class _UrlLinkState extends State<UrlLink> {
    late TapGestureRecognizer _tapRecognizer;
  
    @override
    void initState() {
      super.initState();
      _tapRecognizer = TapGestureRecognizer();
      _tapRecognizer.onTap = () {
        _log.debug('Opening browser to ${widget.target}');
        launchUrl(widget.target, mode: LaunchMode.externalApplication);
      };
    }
  
    @override
    void dispose() {
      _tapRecognizer.dispose();
      super.dispose();
    }
  
    @override
    Widget build(BuildContext context) {
      return RichText(
          text: TextSpan(
        text: widget.text,
        style: TextStyle(
          color: Theme.of(context).colorScheme.primary,
          decoration: TextDecoration.underline,
        ),
        recognizer: _tapRecognizer,
      ));
    }
  }
  
negative.code: import 'dart:convert';
  import 'dart:io';
  
  import 'package:flutter/material.dart';
  import 'package:flutter/services.dart';
  import 'package:flutter_riverpod/flutter_riverpod.dart';
  