Line data Source code
1 : import 'package:cwtch/models/servers.dart';
2 : import 'package:cwtch/themes/opaque.dart';
3 : import 'package:cwtch/views/addeditservers.dart';
4 : import 'package:flutter/material.dart';
5 : import 'package:flutter/services.dart';
6 : import 'package:provider/provider.dart';
7 : import 'package:flutter_gen/gen_l10n/app_localizations.dart';
8 :
9 : import '../cwtch_icons_icons.dart';
10 : import '../errorHandler.dart';
11 : import '../settings.dart';
12 :
13 : class ServerRow extends StatefulWidget {
14 0 : @override
15 0 : _ServerRowState createState() => _ServerRowState();
16 : }
17 :
18 : class _ServerRowState extends State<ServerRow> {
19 0 : @override
20 : Widget build(BuildContext context) {
21 0 : var server = Provider.of<ServerInfoState>(context);
22 0 : return InkWell(
23 : enableFeedback: true,
24 : splashFactory: InkSplash.splashFactory,
25 0 : child: Ink(
26 : color: Colors.transparent,
27 0 : child: Container(
28 0 : child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
29 0 : Padding(
30 : padding: const EdgeInsets.all(6.0), //border size
31 0 : child: Row(children: [
32 0 : Icon(CwtchIcons.dns_24px,
33 0 : color: server.running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor, size: 64),
34 0 : Visibility(
35 0 : visible: !server.running,
36 0 : child: Icon(
37 : CwtchIcons.negative_heart_24px,
38 0 : color: Provider.of<Settings>(context).theme.portraitOfflineBorderColor,
39 : )),
40 : ])),
41 0 : Expanded(
42 0 : child: Column(
43 0 : children: [
44 0 : Text(
45 0 : server.description,
46 0 : semanticsLabel: server.description,
47 0 : style: Provider.of<Settings>(context)
48 0 : .scaleFonts(defaultFormLabelTextStyle)
49 0 : .apply(color: server.running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor),
50 : softWrap: true,
51 : overflow: TextOverflow.ellipsis,
52 : ),
53 0 : Visibility(
54 0 : visible: !Provider.of<Settings>(context).streamerMode,
55 0 : child: ExcludeSemantics(
56 0 : child: Text(
57 0 : server.onion,
58 : softWrap: true,
59 : overflow: TextOverflow.ellipsis,
60 0 : style: Provider.of<Settings>(context)
61 0 : .scaleFonts(defaultFormLabelTextStyle)
62 0 : .copyWith(color: server.running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor),
63 : )))
64 : ],
65 : )),
66 :
67 : // Copy server button
68 0 : IconButton(
69 : enableFeedback: true,
70 0 : splashRadius: Material.defaultSplashRadius / 2,
71 0 : tooltip: AppLocalizations.of(context)!.copyServerKeys,
72 0 : icon: Icon(CwtchIcons.address_copy, color: Provider.of<Settings>(context).current().mainTextColor),
73 0 : onPressed: () {
74 0 : Clipboard.setData(new ClipboardData(text: server.serverBundle));
75 0 : final snackBar = SnackBar(content: Text(AppLocalizations.of(context)!.copiedToClipboardNotification));
76 0 : ScaffoldMessenger.of(context).showSnackBar(snackBar);
77 : },
78 : ),
79 :
80 : // Edit button
81 0 : IconButton(
82 : enableFeedback: true,
83 0 : splashRadius: Material.defaultSplashRadius / 2,
84 0 : tooltip: AppLocalizations.of(context)!.editServerTitle,
85 0 : icon: Icon(Icons.create, color: Provider.of<Settings>(context).current().mainTextColor),
86 0 : onPressed: () {
87 0 : _pushEditServer(server);
88 : },
89 : )
90 : ]))),
91 0 : onTap: () {
92 0 : _pushEditServer(server);
93 : });
94 : }
95 :
96 0 : void _pushEditServer(ServerInfoState server) {
97 0 : Provider.of<ErrorHandler>(context, listen: false).reset();
98 0 : Navigator.of(context).push(
99 : //MaterialPageRoute<void>(
100 0 : PageRouteBuilder(
101 0 : settings: RouteSettings(name: "serveraddedit"),
102 0 : pageBuilder: (bcontext, a1, a2) {
103 0 : return MultiProvider(
104 0 : providers: [ChangeNotifierProvider.value(value: server)],
105 0 : child: AddEditServerView(),
106 : );
107 : },
108 0 : transitionsBuilder: (c, anim, a2, child) => FadeTransition(opacity: anim, child: child),
109 0 : transitionDuration: Duration(milliseconds: 200),
110 : ));
111 : }
112 : }
|