Flutter iOS端Webview内调用相机上传图片时应用崩溃问题求助
解决webview_flutter中相机上传导致的应用崩溃问题
1. 检查并配置平台权限
相机上传崩溃最常见的原因是权限未正确配置,需分别处理Android和iOS平台:
Android 端
在android/app/src/main/AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 可选:声明相机硬件特性,非强制要求 --> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
针对Android 10及以上版本,若遇到存储权限问题,可在<application>标签中添加:
android:requestLegacyExternalStorage="true"
iOS 端
在ios/Runner/Info.plist中添加权限描述(必须填写用户能理解的用途说明):
<key>NSCameraUsageDescription</key> <string>需要访问相机以拍摄照片用于上传</string> <key>NSPhotoLibraryUsageDescription</key> <string>需要访问相册以选择照片用于上传</string>
2. 正确配置WebView参数
确保WebView启用了JavaScript和文件上传支持:
final controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate(NavigationDelegate( // 允许WebView请求权限 onRequestPermissions: (permissions, origin) async { return PermissionDecision.granted; }, )) ..loadRequest(Uri.parse("你的网页地址"));
针对Android端,额外配置文件访问相关设置:
AndroidWebViewWidget( controller: controller, androidWebViewSettings: AndroidWebViewSettings( allowFileAccess: true, allowContentAccess: true, allowFileAccessFromFileURLs: true, allowUniversalAccessFromFileURLs: true, ), )
3. 更新webview_flutter到最新稳定版
旧版本可能存在相机上传的已知bug,打开pubspec.yaml更新依赖:
dependencies: webview_flutter: ^4.4.0 # 替换为当前最新稳定版本
执行flutter pub get完成更新。
4. 优先使用真机测试
模拟器的相机功能通常有限制,容易引发崩溃,建议直接在真机上测试相机上传流程。
内容的提问来源于stack exchange,提问作者Ishtiak Ahamed
相关产品推荐
相关产品推荐

