Untitled

mail@pastecode.io avatarunknown
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,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}