aboutsummaryrefslogtreecommitdiff
path: root/lib/views/file_info.dart
blob: 28c45f9e90eb1b33c7b2d3a0c7680f060459b693 (plain)
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 FileInfo extends StatefulWidget {
  const FileInfo({Key? key, required this.filePath}) : super(key: key);

  final String filePath;

  @override
  FileInfoState createState() => FileInfoState();
}

class FileInfoState extends State<FileInfo> {
  @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);
              },
            ),
          ),
        ],
      ),
    );
  }
}