Flutter 颤振:运行多种方法

Flutter 颤振:运行多种方法,flutter,dart,dart-isolates,Flutter,Dart,Dart Isolates,我有个大问题。如果我想加密我的视频文件,我的应用程序将冻结,直到该方法完成。但是没有错误。我如何编码我的应用程序不冻结。谢谢 Future sifrele() async { String realPath = "/storage/emulated/0/Android/data/com.android.xxxx/files"; var crypt = AesCrypt('sefa'); try { crypt.setOverwrite

我有个大问题。如果我想加密我的视频文件,我的应用程序将冻结,直到该方法完成。但是没有错误。我如何编码我的应用程序不冻结。谢谢

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;
    }
  }
试试这个。 如果你把加密代码放在隔离的地方,也许会有用。 为此,请使用计算方法

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;
}

}

将函数的函数类型从
Future
更改为
FutureOr
,为函数添加一个参数(即使您不需要) 并使用compute。它将完美地工作

以前

Future sifrel()异步{

之后

futureorsifrele(字符串段)异步{

计算

  doTheEncryption() {
    compute(sifrele, 'Pass the value of the parameter here if you need it');
  }
另一件重要的事情是函数的定义
sifreel
必须是顶级的,这意味着不在类内,而是放在类外。
函数doTheEncryption()(或者你叫它什么名字)可能在类内部没有问题。

你应该使用隔离来进行此加密如果你有一个代码示例,你能给我分享一下吗:)它给我带来了这个错误。“E/flatter(14930):[错误:flatter/lib/ui/ui_dart_state.cc(166)]未处理的异常:“Future”类型不是类型的子类型(Type)=>dynamic'”非常感谢。它很有效。但我在标题中添加了“static”。它是“static FutureOr sifree(String para)async{}”