1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:kulinar_app/constants.dart';
import 'package:kulinar_app/util/file_handler.dart';
import 'package:kulinar_app/widgets/error_widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class FileInfoSubview extends StatefulWidget {
const FileInfoSubview({Key? key, required this.filePath}) : super(key: key);
final String filePath;
@override
FileInfoSubviewState createState() => FileInfoSubviewState();
}
class FileInfoSubviewState extends State<FileInfoSubview> {
@override
Widget build(BuildContext context) {
final File file = File(widget.filePath.split(":")[1]);
return Scaffold(
appBar: AppBar(title: Text(AppLocalizations.of(context)!.category9)),
body: FutureBuilder(
future: FileHandler.deserializeFileInformation(file),
builder: (BuildContext context, AsyncSnapshot<Map<String, String>> snapshot) {
if (snapshot.connectionState != ConnectionState.done) return const CircularProgressIndicator();
if (snapshot.hasError || !snapshot.hasData) return const UnknownError();
return _buildFileInfoTable(_getSortedSnapshotData(snapshot), file);
},
),
);
}
String _localizeInfoField(BuildContext context, String field) {
switch (field) {
case "type":
return AppLocalizations.of(context)!.infoField1;
case "version":
return AppLocalizations.of(context)!.infoField2;
case "size":
return AppLocalizations.of(context)!.infoField3;
case "entries":
return AppLocalizations.of(context)!.infoField4;
default:
return AppLocalizations.of(context)!.unknown;
}
}
List<TableRow> _getSortedSnapshotData(AsyncSnapshot<Map<String, String>> snapshot) {
List<TableRow> children = [];
snapshot.data!.forEach((key, value) {
children.add(
TableRow(
children: [
Padding(
padding: const EdgeInsets.only(right: 4.0),
child: Text(_localizeInfoField(context, key), style: cTableKeyStyle, textAlign: TextAlign.right),
),
Padding(
padding: const EdgeInsets.only(left: 4.0),
child: Text(value, style: cTableValueStyle),
),
],
),
);
});
return children;
}
Widget _buildFileInfoTable(List<TableRow> children, File file) {
return Padding(
padding: const EdgeInsets.only(top: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Table(
columnWidths: const <int, TableColumnWidth>{
0: FlexColumnWidth(),
1: FlexColumnWidth(),
},
children: children,
),
Padding(
padding: const EdgeInsets.all(16.0),
child: ElevatedButton(
child: Text(AppLocalizations.of(context)!.option312, style: cOptionTextStyle.copyWith(color: cIconColor)),
onPressed: () {
FileHandler.deserializeFile(context, file);
},
),
),
],
),
);
}
}
|