「这是我参与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 。请承认已经完好搬迁,能够承认下官方指示或许能够查看下下面需求的内容是否已满意。
- 把工程的
android/app/build.gradle
里的compileSdkVersion和targetSdkVersion改为 28 - 在 android/gradle.properties 文件里增加下面的内容:
android.useAndroidX=true
android.enableJetifier=true
假如这些还不能解决问题,或许是有依靠冲突或许向支撑 V2 嵌入搬迁得不对。要修正这个,依照下面过程:
- 运用
flutter create
用相同的称号和依靠创建新的运用 - 仿制代码时要谨慎,只仿制需求的文件,特别是
android/
目录 - 编译,此时一切应该就 OK 了。
问题:
我在经过 getDirectoryPath()
挑选一个目录,可是它抛出过错或返回空途径。
或许的解决方案:
在 Android 上,有少数的目录不能手动选取后进行写操作,其中之一是下载目录,它或许只会返回空的途径(/
)。
iOS
问题:
无法为 iOS 编译。在 XCode 上有一些 OBJC 符号过错或许其它奇怪的过错阻止编译成功。
或许的解决方案:
这通常是一个因为现有缓存导致的依靠解决问题。假如无法为 iOS 编译,能够不考虑插件的版别,做以下的过程。
注意事项: 建议每次都去做一下,然后它能处理机器上已运用的空间。
- 在
project/ios
文件夹,工作pod deintegrate && rm Podfile.lock && pod install
- 在工程文件夹下,工作
flutter clean
- 工作
rm -rf ~/Library/Developer/Xcode/DerivedData
清空 Xcode 衍生的数据 - 用 XCode 翻开工程,并用
Cmd + Shift + K
铲除 - 用
flutter build ios
命令编译
问题:
从相册选取多个文件时碰到了一个问题
或许的解决方案:
该插件运用DKImagePickerController作为依靠用于在相册中选取多个文件。因为iOS SDK 的 ImagePickerController
不允许。所以,直接关联这个的任何问题都会在官方库房上有记录。