参数类型“字符串”不能分配给参数类型“目录”

Posted

技术标签:

【中文标题】参数类型“字符串”不能分配给参数类型“目录”【英文标题】:The argument type 'String' can't be assigned to the parameter type 'Directory' 【发布时间】:2021-11-05 07:28:27 【问题描述】:

我正在尝试将 zip 文件中的内容提取到定义该特定文件夹路径的文件夹中,但最终出现错误

参数类型“字符串”不能分配给参数类型 '目录'。

抛出错误的那一行

return await _externalDataSource.ExtractZip(directoryPath);

我的 ExtractZip() 函数

@override
  Future<bool> ExtractZip(Directory destination) async
    checkPermission();

    Directory appDir = await GetExtStoragePath();

    File file = File(appDir.path +"/"+ contentsZipFile);

    debugPrint("Extracting zip to :" + destination.path);
    if(file.existsSync())
      try 
        ZipFile.extractToDirectory(zipFile: file, destinationDir: destination).then((value)
          debugPrint("Extracting done successfully");
        );
      catch(e)
        debugPrint("Error :"+ e);
      

      //check if exist in destination
      var destDir = Directory(destination.path + "/" + "uth_data");
      if(destDir.existsSync())
        return true;
      else
        debugPrint("Extracting done with error");
        return false;
      
    
  

提取 zip 文件的函数

@override
  Future<bool> extractZipContent() async
    Directory root = await getTemporaryDirectory(); // this is using path_provider
    String directoryPath = root.path + '/uth_content';
    await Directory(directoryPath).create(recursive: true);
    return await _externalDataSource.ExtractZip(directoryPath);
  

我不确定做错了什么。如何将路径传递给ExtractZip 函数?

【问题讨论】:

ExtractZip 函数长什么样子? 嗨@eeqk 我已经更新了代码 【参考方案1】:

问题是您将String 类型的值传递给Directory 类型的参数。

试试:

@override
  Future<bool> extractZipContent() async
    Directory root = await getTemporaryDirectory(); // this is using path_provider
    String directoryPath = root.path + '/uth_content';
    final destination = await Directory(directoryPath).create(recursive: true);
    return await _externalDataSource.ExtractZip(destination);
  

【讨论】:

以上是关于参数类型“字符串”不能分配给参数类型“目录”的主要内容,如果未能解决你的问题,请参考以下文章

参数类型“字符串”不能分配给参数类型“对象?函数(对象?,对象?)?

参数类型“对象?”不能分配给参数类型“字符串”

错误:参数类型“字符串?”不能分配给参数类型“字符串”

错误:参数类型“对象?”不能分配给参数类型“字符串”

错误:不能将参数类型“String”分配给参数类型“Uri”。使用JsonPlaceHolder

“数字”类型的参数不能分配给“数字和字符串”类型的参数