anchor.diff:  import 'dart:convert';
  -
  -import 'package:flutter/gestures.dart';
  +import 'dart:io';
  +
   import 'package:flutter/material.dart';
   import 'package:flutter/services.dart';
   import 'package:flutter_riverpod/flutter_riverpod.dart';
  
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:         children: [
            Image.asset('assets/graphics/app-icon.png', scale: 1 / 0.75),
            Padding(
              padding: const EdgeInsets.only(top: 24.0),
              child: Text(
                'Yubico Authenticator',
                style: Theme.of(context).textTheme.titleMedium,
              ),
            ),
            const Text(version),
            const Text(''),
            const Text('Copyright © 2022 Yubico'),
            const Text('All rights reserved'),
            const Text(''),
            Row(
              mainAxisSize: MainAxisSize.min,
              children: [
                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),
  