CH-J SM Mobilegerenciamento de servidor sobre SSH
E-mail
Fonte publicada

CH-J SM Mobile

Navegue por diretórios e arquivos para uma versão específica do aplicativo.

Transferir fonte ZIP
CH-J / SM Mobile 134 arquivos
sm-mobile-20261016T050549Z-3678f2a05fa9 Adicionado: · Construído:
Ficheiros
common.dart Adicionado: Data não registada 2,3 KB · 87 linhas
Transferir ficheiro
1import 'package:flutter/material.dart';
2import '../l10n/strings.dart';
3import '../services/ssh_service.dart';
5void showFailure(BuildContext context, Object error) {
6 if (!context.mounted) return;
7 ScaffoldMessenger.of(context).showSnackBar(
8 SnackBar(
9 content: Text(context.tr(failureCode(error))),
10 duration: const Duration(seconds: 8),
11 ),
12 );
15Future<bool> confirm(
16 BuildContext context,
17 String key, {
18 String? detail,
19}) async =>
20 await showDialog<bool>(
21 context: context,
22 builder: (ctx) => AlertDialog(
23 title: Text(ctx.tr(key)),
24 content: detail == null ? null : SelectableText(detail),
25 actions: [
26 TextButton(
27 onPressed: () => Navigator.pop(ctx, false),
28 child: Text(ctx.tr('cancel')),
29 ),
30 FilledButton(
31 onPressed: () => Navigator.pop(ctx, true),
32 child: Text(ctx.tr('continueAction')),
33 ),
34 ],
35 ),
36 ) ??
37 false;
38Future<String?> askName(
39 BuildContext context,
40 String title, {
41 String initial = '',
42}) async {
43 final field = TextEditingController(text: initial);
44 final result = await showDialog<String>(
45 context: context,
46 builder: (ctx) => AlertDialog(
47 title: Text(ctx.tr(title)),
48 content: TextField(
49 controller: field,
50 autofocus: true,
51 decoration: InputDecoration(labelText: ctx.tr('name')),
52 ),
53 actions: [
54 TextButton(
55 onPressed: () => Navigator.pop(ctx),
56 child: Text(ctx.tr('cancel')),
57 ),
58 FilledButton(
59 onPressed: () => Navigator.pop(ctx, field.text),
60 child: Text(ctx.tr('save')),
61 ),
62 ],
63 ),
64 );
65 Future.delayed(const Duration(seconds: 1), field.dispose);
66 return result;
69class PageMessage extends StatelessWidget {
70 final String label;
71 final IconData icon;
72 const PageMessage(this.label, {this.icon = Icons.dns_outlined, super.key});
73 @override
74 Widget build(BuildContext context) => Center(
75 child: Padding(
76 padding: const EdgeInsets.all(28),
77 child: Column(
78 mainAxisSize: MainAxisSize.min,
79 children: [
80 Icon(icon, size: 48, color: Theme.of(context).colorScheme.primary),
81 const SizedBox(height: 20),
82 Text(context.tr(label), textAlign: TextAlign.center),
83 ],
84 ),
85 ),
86 );
SHA-256bf7d478173bc85bf103f0b4160ff947f0bc7ea29074ef1398aa960463d9e43dd

CH-J Proprietary Software License 1.14 · A fonte é fornecida sob o CH-J Proprietary Software License 1.14. A sua disponibilidade não altera os termos licença nem concede direitos adicionais.

Ficheiro SHA-256c486a807e4828998b9c57ab0f2e760f7980b31965fe118e89d3e1a5a2b65be65