about.dart 3.04 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4 5
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/foundation.dart' show defaultTargetPlatform;
6
import 'package:flutter/gestures.dart';
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

class _LinkTextSpan extends TextSpan {

  // Beware!
  //
  // This class is only safe because the TapGestureRecognizer is not
  // given a deadline and therefore never allocates any resources.
  //
  // In any other situation -- setting a deadline, using any of the less trivial
  // recognizers, etc -- you would have to manage the gesture recognizer's
  // lifetime and call dispose() when the TextSpan was no longer being rendered.
  //
  // Since TextSpan itself is @immutable, this means that you would have to
  // manage the recognizer from outside the TextSpan, e.g. in the State of a
  // stateful widget that then hands the recognizer to the TextSpan.

25
  _LinkTextSpan({ TextStyle? style, String? url, String? text }) : super(
26 27
    style: style,
    text: text ?? url,
28
    recognizer: TapGestureRecognizer()..onTap = () {
29
      launch(url!, forceSafariVC: false);
30 31 32 33 34 35
    }
  );
}

void showGalleryAboutDialog(BuildContext context) {
  final ThemeData themeData = Theme.of(context);
36
  final TextStyle? aboutTextStyle = themeData.textTheme.bodyText1;
37
  final TextStyle linkStyle = themeData.textTheme.bodyText1!.copyWith(color: themeData.colorScheme.primary);
38 39 40

  showAboutDialog(
    context: context,
41
    applicationVersion: 'January 2019',
42
    applicationIcon: const FlutterLogo(),
Ian Hickson's avatar
Ian Hickson committed
43
    applicationLegalese: '© 2014 The Flutter Authors',
44
    children: <Widget>[
45
      Padding(
46
        padding: const EdgeInsets.only(top: 24.0),
47 48
        child: RichText(
          text: TextSpan(
49
            children: <TextSpan>[
50
              TextSpan(
51
                style: aboutTextStyle,
52
                text: 'Flutter is an open-source project to help developers '
53 54
                      'build high-performance, high-fidelity, mobile apps for '
                      '${defaultTargetPlatform == TargetPlatform.iOS ? 'multiple platforms' : 'iOS and Android'} '
55 56
                      'from a single codebase. This design lab is a playground '
                      "and showcase of Flutter's many widgets, behaviors, "
57
                      'animations, layouts, and more. Learn more about Flutter at ',
58
              ),
59
              _LinkTextSpan(
60
                style: linkStyle,
61
                url: 'https://flutter.dev',
62
              ),
63
              TextSpan(
64 65 66
                style: aboutTextStyle,
                text: '.\n\nTo see the source code for this app, please visit the ',
              ),
67
              _LinkTextSpan(
68 69 70 71
                style: linkStyle,
                url: 'https://goo.gl/iv1p4G',
                text: 'flutter github repo',
              ),
72
              TextSpan(
73 74 75 76 77 78 79 80 81 82
                style: aboutTextStyle,
                text: '.',
              ),
            ],
          ),
        ),
      ),
    ],
  );
}