You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:15:34