Flutter: execute vários métodos
Eu tenho um grande problema. Se eu quiser criptografar meu arquivo de vídeo, meu aplicativo está congelando até que o método seja concluído. Mas não há erro. Como posso codificar meu aplicativo não congela. obrigado.
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;
}
}
Respostas
Altere o tipo de função da sua função de Futurepara FutureOr, adicione um parâmetro à função (mesmo se você não precisar) e use o cálculo. vai funcionar perfeitamente.
Antes
Future sifrele() async {
Depois de
FutureOr sifrele(String para) async {
calcular
doTheEncryption() {
compute(sifrele, 'Pass the value of the parameter here if you need it');
}
Outra coisa importante é que a definição da função sifreledeve ser de nível superior, ou seja, não dentro da classe, coloque-a fora da classe. A função doTheEncryption () (ou qualquer que seja o nome) talvez dentro da classe sem problemas.
Experimente isso. Talvez funcione se você colocar o código para criptografia isoladamente. Para isso, use o método compute.
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;
}
}