Merge branch 'master' into development_sikander
commit
df07a5f9f6
@ -0,0 +1,25 @@
|
||||
class ITGFormsAttachmentsModel {
|
||||
String? fileBase64;
|
||||
dynamic fileData;
|
||||
String? fileName;
|
||||
String? fileType;
|
||||
|
||||
ITGFormsAttachmentsModel(
|
||||
{this.fileBase64, this.fileData, this.fileName, this.fileType});
|
||||
|
||||
ITGFormsAttachmentsModel.fromJson(Map<String, dynamic> json) {
|
||||
fileBase64 = json['fileBase64'];
|
||||
fileData = json['fileData'];
|
||||
fileName = json['fileName'];
|
||||
fileType = json['fileType'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['fileBase64'] = this.fileBase64;
|
||||
data['fileData'] = this.fileData;
|
||||
data['fileName'] = this.fileName;
|
||||
data['fileType'] = this.fileType;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
|
||||
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
|
||||
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
|
||||
import 'package:mohem_flutter_app/models/itg_forms_models/itg_forms_attachments_model.dart';
|
||||
import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart';
|
||||
import 'package:open_file/open_file.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
|
||||
class ITGAttachmentsFragment extends StatelessWidget {
|
||||
List<ITGFormsAttachmentsModel> itgFormAttachmentsList;
|
||||
|
||||
ITGAttachmentsFragment(this.itgFormAttachmentsList);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView.separated(
|
||||
itemCount: itgFormAttachmentsList.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Row(
|
||||
children: [
|
||||
SvgPicture.asset(determineFileIcon(itgFormAttachmentsList[index].fileType ?? "")),
|
||||
12.width,
|
||||
(itgFormAttachmentsList[index].fileName ?? "").toText16().expanded,
|
||||
],
|
||||
).objectContainerView().onPress(() async {
|
||||
try {
|
||||
Permission.storage.isGranted.then(
|
||||
(isGranted) {
|
||||
if (!isGranted) {
|
||||
Permission.manageExternalStorage.request().then(
|
||||
(granted) async {
|
||||
if (granted == PermissionStatus.granted) {
|
||||
String path = await _createFileFromString(itgFormAttachmentsList[index].fileBase64 ?? "", itgFormAttachmentsList[index].fileType ?? "");
|
||||
OpenFile.open(path);
|
||||
} else {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext cxt) => ConfirmDialog(
|
||||
message: "You need to give storage permission to view files.",
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
} catch (ex) {
|
||||
Utils.showToast("Cannot open file.");
|
||||
}
|
||||
});
|
||||
},
|
||||
separatorBuilder: (BuildContext context, int index) => 12.height,
|
||||
).paddingAll(21);
|
||||
}
|
||||
|
||||
String determineFileIcon(String fileContentType) {
|
||||
String icon = "";
|
||||
switch (fileContentType) {
|
||||
case "pdf":
|
||||
icon = "assets/images/pdf.svg";
|
||||
break;
|
||||
case "xls":
|
||||
icon = "assets/images/xls.svg";
|
||||
break;
|
||||
case "xlsx":
|
||||
icon = "assets/images/xls.svg";
|
||||
break;
|
||||
case "png":
|
||||
icon = "assets/images/png.svg";
|
||||
break;
|
||||
case "jpg":
|
||||
icon = "assets/images/jpg.svg";
|
||||
break;
|
||||
case "jpeg":
|
||||
icon = "assets/images/jpg.svg";
|
||||
break;
|
||||
}
|
||||
return icon;
|
||||
}
|
||||
|
||||
Future<String> _createFileFromString(String encodedStr, String ext) async {
|
||||
Uint8List bytes = base64.decode(encodedStr);
|
||||
String dir = (await getApplicationDocumentsDirectory()).path;
|
||||
File file = File("$dir/" + DateTime.now().millisecondsSinceEpoch.toString() + "." + ext);
|
||||
await file.writeAsBytes(bytes);
|
||||
return file.path;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue