Line data Source code
1 : import 'package:cwtch/themes/opaque.dart';
2 : import 'package:cwtch/third_party/linkify/linkify.dart';
3 : import 'package:flutter/material.dart';
4 : import 'package:flutter/services.dart';
5 : import 'package:cwtch/l10n/app_localizations.dart';
6 : import 'package:provider/provider.dart';
7 : import 'package:url_launcher/url_launcher_string.dart';
8 :
9 : import '../settings.dart';
10 :
11 0 : void modalOpenLink(BuildContext ctx, LinkableElement link) {
12 0 : showModalBottomSheet<void>(
13 : context: ctx,
14 0 : builder: (BuildContext bcontext) {
15 0 : return Container(
16 : height: 200,
17 0 : child: Center(
18 0 : child: Padding(
19 0 : padding: EdgeInsets.all(30.0),
20 0 : child: Column(
21 : mainAxisAlignment: MainAxisAlignment.center,
22 : mainAxisSize: MainAxisSize.min,
23 0 : children: <Widget>[
24 0 : Text(AppLocalizations.of(bcontext)!.clickableLinksWarning, style: Provider.of<Settings>(bcontext).scaleFonts(defaultTextStyle)),
25 0 : Flex(
26 : direction: Axis.horizontal,
27 : mainAxisAlignment: MainAxisAlignment.center,
28 0 : children: <Widget>[
29 0 : Container(
30 0 : margin: EdgeInsets.symmetric(vertical: 20, horizontal: 10),
31 0 : child: ElevatedButton(
32 0 : child: Text(
33 0 : AppLocalizations.of(bcontext)!.clickableLinksCopy,
34 0 : style: Provider.of<Settings>(bcontext).scaleFonts(defaultTextButtonStyle),
35 0 : semanticsLabel: AppLocalizations.of(bcontext)!.clickableLinksCopy,
36 : ),
37 0 : onPressed: () {
38 0 : Clipboard.setData(new ClipboardData(text: link.url));
39 :
40 0 : final snackBar = SnackBar(
41 0 : content: Text(AppLocalizations.of(bcontext)!.copiedToClipboardNotification, style: Provider.of<Settings>(bcontext, listen: false).scaleFonts(defaultTextButtonStyle)),
42 : );
43 :
44 0 : Navigator.pop(bcontext);
45 0 : ScaffoldMessenger.of(bcontext).showSnackBar(snackBar);
46 : },
47 : ),
48 : ),
49 0 : Container(
50 0 : margin: EdgeInsets.symmetric(vertical: 20, horizontal: 10),
51 0 : child: ElevatedButton(
52 0 : child: Text(
53 0 : AppLocalizations.of(bcontext)!.clickableLinkOpen,
54 0 : style: Provider.of<Settings>(bcontext).scaleFonts(defaultTextButtonStyle),
55 0 : semanticsLabel: AppLocalizations.of(bcontext)!.clickableLinkOpen,
56 : ),
57 0 : onPressed: () async {
58 0 : if (await canLaunchUrlString(link.url)) {
59 0 : await launchUrlString(link.url);
60 0 : Navigator.pop(bcontext);
61 : } else {
62 0 : final snackBar = SnackBar(content: Text(AppLocalizations.of(bcontext)!.clickableLinkError, style: Provider.of<Settings>(bcontext).scaleFonts(defaultTextButtonStyle)));
63 0 : ScaffoldMessenger.of(bcontext).showSnackBar(snackBar);
64 : }
65 : },
66 : ),
67 : ),
68 : ],
69 : ),
70 : ],
71 : ),
72 : ),
73 : ),
74 : );
75 : },
76 : );
77 : }
|