import 'package:file_picker/file_picker.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:image_picker/image_picker.dart'; import 'package:inventree/inventree/part.dart'; import 'package:inventree/widget/fields.dart'; import 'package:inventree/widget/refreshable_state.dart'; import 'package:inventree/widget/snacks.dart'; import 'dart:io'; import '../api.dart'; import '../l10.dart'; class PartAttachmentsWidget extends StatefulWidget { PartAttachmentsWidget(this.part, {Key? key}) : super(key: key); final InvenTreePart part; @override _PartAttachmentDisplayState createState() => _PartAttachmentDisplayState(part); } class _PartAttachmentDisplayState extends RefreshableState { _PartAttachmentDisplayState(this.part); final InvenTreePart part; List attachments = []; @override String getAppBarTitle(BuildContext context) => L10().attachments; @override List getAppBarActions(BuildContext context) { List actions = []; if (InvenTreeAPI().checkPermission('part', 'change')) { // File upload actions.add( IconButton( icon: FaIcon(FontAwesomeIcons.plusCircle), onPressed: () async { FilePickerDialog.pickFile( onPicked: (File file) { upload(file); } ); }, ) ); } return actions; } Future upload(File file) async { final bool result = await InvenTreePartAttachment().uploadAttachment( file, fields: { "part": "${part.pk}" } ); if (result) { showSnackIcon(L10().uploadSuccess, success: true); } else { showSnackIcon(L10().uploadFailed, success: false); } refresh(); } @override Future request() async { await InvenTreePartAttachment().list( filters: { "part": "${part.pk}" } ).then((var results) { attachments.clear(); for (var result in results) { if (result is InvenTreePartAttachment) { attachments.add(result); } } }); } @override Widget getBody(BuildContext context) { return Center( child: ListView( children: ListTile.divideTiles( context: context, tiles: attachmentTiles(context) ).toList(), ) ); } List attachmentTiles(BuildContext context) { List tiles = []; for (var attachment in attachments) { tiles.add(ListTile( title: Text(attachment.filename), subtitle: Text(attachment.comment), leading: FaIcon(attachment.icon), onTap: () async { await attachment.downloadAttachment(); }, )); } if (tiles.length == 0) { tiles.add(ListTile( title: Text(L10().attachmentNone), subtitle: Text( L10().attachmentNonePartDetail, style: TextStyle(fontStyle: FontStyle.italic), ), )); } return tiles; } }