Flutter: jalankan beberapa metode

Oct 19 2020

Aku punya masalah besar. Jika saya ingin mengenkripsi file video saya, aplikasi saya macet sampai metode itu selesai. Tapi tidak ada kesalahan. Bagaimana cara kode aplikasi saya tidak membeku. Terima kasih.

Future sifrele() async {
  String realPath =
    "/storage/emulated/0/Android/data/com.android.xxxx/files";

    var crypt = AesCrypt('sefa');
    try {
      crypt.setOverwriteMode(AesCryptOwMode.on);
      String encFilepaths = await crypt.encryptFile(
          realPath + '/WhatCarCanYouGetForAGrand.mp4',
          realPath + '/video.mp4.aes');
      print('The encryption has been completed successfully.');
      //print('Encrypted file: $encFilepath');

    } on AesCryptException catch (e) {
      if (e.type == AesCryptExceptionType.destFileExists) {
        print('The encryption has been completed unsuccessfully.');
      }
      return;
    }
  }

Jawaban

1 EmadFathy Oct 20 2020 at 09:22

Ubah jenis fungsi fungsi Anda dari Futuremenjadi FutureOr, tambahkan parameter ke fungsi (bahkan jika Anda tidak membutuhkannya) dan gunakan komputasi. itu akan bekerja dengan sempurna.

Sebelum

Future sifrele() async {

Setelah

FutureOr sifrele(String para) async {

menghitung

  doTheEncryption() {
    compute(sifrele, 'Pass the value of the parameter here if you need it');
  }

Satu hal penting lainnya definisi fungsi sifreleharus level atas, artinya tidak di dalam kelas, letakkan di luar kelas. Fungsi doTheEncryption () (atau siapa pun yang Anda beri nama) mungkin di dalam kelas tidak ada masalah.

savke Oct 19 2020 at 20:07

Coba ini. Mungkin akan berfungsi jika Anda menempatkan kode untuk enkripsi secara terpisah. Untuk itu gunakan metode komputasi.

void _startEncrypting()
{
compute(sifrele, /** Here put your parameters if you need them **/);
}

sifrele() async {
String realPath = "/storage/emulated/0/Android/data/com.android.xxxx/files";

var crypt = AesCrypt('sefa');
try {
  crypt.setOverwriteMode(AesCryptOwMode.on);
  String encFilepaths = await crypt.encryptFile(
      realPath + '/WhatCarCanYouGetForAGrand.mp4',
      realPath + '/video.mp4.aes');
  print('The encryption has been completed successfully.');
  //print('Encrypted file: $encFilepath');

} on AesCryptException catch (e) {
  if (e.type == AesCryptExceptionType.destFileExists) {
    print('The encryption has been completed unsuccessfully.');
  }
  return;
}

}