Flutter: jalankan beberapa metode
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
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.
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;
}
}