Untitled
dart
a month ago
3.5 kB
1
Indexable
Never
import 'dart:developer'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:super_student_v2/models/document_model.dart'; import 'package:file_picker/file_picker.dart'; import 'package:super_student_v2/shared/shared_value.dart'; import 'package:http/http.dart' as http; class StudentDocumentItem extends StatefulWidget { const StudentDocumentItem( {super.key, required this.documentModel, required this.codeStudent}); final DocumentModel documentModel; final String codeStudent; @override State<StudentDocumentItem> createState() => _StudentDocumentItemState(); } class _StudentDocumentItemState extends State<StudentDocumentItem> { PlatformFile? file; void _uploadFile(context) async { FilePickerResult? result = await FilePicker.platform.pickFiles( type: FileType.custom, allowedExtensions: [ 'pdf', 'doc', 'docx', 'png', 'jpg', 'jpeg', 'xlsx', ], ); if (result == null) return; setState(() { file = result.files.single; }); if (file!.size > 2097152) { ScaffoldMessenger.of(context).clearSnackBars(); ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('file size must be under 2 Mb'), ), ); } Map<String, String> headers = {"Authorization": await getToken()}; try { var request = http.MultipartRequest('POST', Uri.parse('$baseUrl/student/document-upload')); request.headers.addAll(headers); request.files.add(await http.MultipartFile.fromPath('files', file!.path!)); request.fields['code_document'] = widget.documentModel.codeDocument!; request.fields['code_student'] = widget.codeStudent; var response = await request.send(); response.stream.transform(utf8.decoder).listen((value){ var jsonResponse = jsonDecode(value) as Map<String, dynamic>; log(jsonResponse.toString(), name: 'log response'); }); } catch (e) { log(e.toString(),name: 'error'); rethrow; } } @override Widget build(BuildContext context) { return Card( child: Container( padding: const EdgeInsets.all(10), child: Row( children: [ Expanded( child: Text( widget.documentModel.namaDocument!, style: Theme.of(context) .textTheme .labelLarge! .copyWith(fontSize: 18), ), ), GestureDetector( onTap: () {}, child: CircleAvatar( child: Icon( Icons.remove_red_eye_outlined, color: Theme.of(context).colorScheme.onPrimary, ), ), ), const SizedBox( width: 5, ), GestureDetector( onTap: () async { _uploadFile(context); // context.read<DocumentBloc>().add(UploadDocument(file!, // widget.documentModel.codeDocument!, widget.codeStudent)); }, child: CircleAvatar( backgroundColor: Theme.of(context).colorScheme.primary, child: Icon( Icons.add, color: Theme.of(context).colorScheme.onPrimary, ), ), ), ], ), ), ); } }