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 { @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> 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 _getSortedSnapshotData(AsyncSnapshot> snapshot) { List _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 children, File file) { return Padding( padding: const EdgeInsets.only(top: 16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Table( columnWidths: const { 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); }, ), ), ], ), ); } }