「这是我参与2022初次更文应战的第29天,活动详情查看:2022初次更文应战」。

本文翻译自:
Troubleshooting miguelpruivo/flutter_file_picker Wiki GitHub

版别: file_picker 4.3.3


Android

问题:

运用在发布模式下无法编译。

或许的解决方案:

请参阅#545,这里有一个相关的谈论,特别在此谈论你或许会发现一个解决方案。


问题:

假如遇到了如下的问题:

The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility.
Building plugin file_picker...
FAILURE: Build failed with an exception.
What went wrong:
A problem occurred configuring root project 'file_picker'.
SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

或许的解决方案:

这或许是因为从旧工程搬迁的模式有问题或许需求完好搬迁到 Android X 支撑。能够参阅该官方辅导或在该包的库房中搜索相关的问题,然后你会找到一些不同的解决方案(因为不同的人有不同的版别)。这里有一个很详细的说明。

请不要因为编译兼容问题新建 issue ,因为在库房中有很多类似的解决,你能够很容易地找到一个解决方案。


问题:

编译失利,带有信息unexpected element <queries> found in <manifest>

或许的解决方案:

这是因为<queries>标签引入了新的用于 Android 11 及以上(SDK 30+)的包可见性的选项。因为这个,你需求晋级你的build.gradle ,指定包含该改动的版别。下面是支撑的 gradle 选项的列表。

  • 3.3.3
  • 3.4.3
  • 3.5.4
  • 3.6.4
  • 4.0.1

也别忘了晋级你的 gradle-wrapper.properties中的 ditributionUrl。例如:关于 gradle 4.0.1 , 就该是:

distributionUrl=https://services.gradle.org/distributions/gradle-6.1.1-all.zip

代码


问题:

挑选文件时运用崩溃,带有一个 FilePickerDelegate的 booleanNullPointerException

E/AndroidRuntime( 1459): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
E/AndroidRuntime( 1459): at com.mr.flutter.plugin.filepicker.FilePickerDelegate$2.run(FilePickerDelegate.java:92)
E/AndroidRuntime( 1459): at java.lang.Thread.run(Thread.java:919)

或许的解决方案:

该问题已被陈述且在这里被广泛谈论,这是因为在不或许的地方触发了一个NullPointerException异常。在更深化地调查之后,这些情况首要像是在旧的 Flutter 版别上工作(或许是 1.12 @ stable channel 稳定版)。

这个问题或许只工作flutter upgrade并承认是工作的最新稳定版(现在是1.17.3)就能够修正。


问题:

因为一些原因,选取时会收到一个过错说权限已经在恳求,选取器已经预备好了或类似的问题。

或许的解决方案:

不久前,有些陈述说工程开始优先为 Android V2 嵌入,或许需求晋级一些工程以无缝支撑更新的插件。

参阅EdwynZN关于 Flutter 权限处理器插件的回答,跟随以下官方指示晋级 Flutter 1.12 之前的 Android 工程,感觉能够修正。

根本来说,假如 Android 工程的MainActivity.java或 kt (kotlin 版)在运用io.flutter.app.FlutterActivity或许AndroidManifest.xml在运用io.flutter.app.FlutterActivity或许

<meta-data
    android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
     android:value="true" />

你或许需求更新 Flutter 工程以和新的 Android 插件类型体系工作。


问题:

假如工程因为依靠丢掉编译失利。尤其是 import androidx.lifecycle.DefaultLifecycleObserver; 未被辨认时会产生。

或许的解决方案:

典型地这个问题产生是因为工程没有完全支撑 Android X 。请承认已经完好搬迁,能够承认下官方指示或许能够查看下下面需求的内容是否已满意。

  1. 把工程的android/app/build.gradle里的compileSdkVersiontargetSdkVersion改为 28
  2. 在 android/gradle.properties 文件里增加下面的内容:
android.useAndroidX=true
android.enableJetifier=true

假如这些还不能解决问题,或许是有依靠冲突或许向支撑 V2 嵌入搬迁得不对。要修正这个,依照下面过程:

  1. 运用 flutter create 用相同的称号和依靠创建新的运用
  2. 仿制代码时要谨慎,只仿制需求的文件,特别是android/目录
  3. 编译,此时一切应该就 OK 了。

问题:

我在经过 getDirectoryPath()挑选一个目录,可是它抛出过错或返回空途径。

或许的解决方案:

在 Android 上,有少数的目录不能手动选取后进行写操作,其中之一是下载目录,它或许只会返回空的途径(/)。


iOS

问题:

无法为 iOS 编译。在 XCode 上有一些 OBJC 符号过错或许其它奇怪的过错阻止编译成功。

或许的解决方案:

这通常是一个因为现有缓存导致的依靠解决问题。假如无法为 iOS 编译,能够不考虑插件的版别,做以下的过程。

注意事项: 建议每次都去做一下,然后它能处理机器上已运用的空间。

  1. project/ios文件夹,工作pod deintegrate && rm Podfile.lock && pod install
  2. 在工程文件夹下,工作flutter clean
  3. 工作rm -rf ~/Library/Developer/Xcode/DerivedData 清空 Xcode 衍生的数据
  4. 用 XCode 翻开工程,并用 Cmd + Shift + K 铲除
  5. flutter build ios命令编译

问题:

从相册选取多个文件时碰到了一个问题

或许的解决方案:

该插件运用DKImagePickerController作为依靠用于在相册中选取多个文件。因为iOS SDK 的 ImagePickerController不允许。所以,直接关联这个的任何问题都会在官方库房上有记录。