【Flutter】解决 flutter_inappwebview在 Windows 上使用导致应用闪退问题

发布于:2025-07-01 ⋅ 阅读:(22) ⋅ 点赞:(0)

问题背景

在 Windows 11 上运行 Flutter 桌面应用时,应用出现闪退现象。通过系统事件日志分析,发现是 MSVCP140.dll 模块的访问冲突异常(错误代码 c0000005)导致的崩溃。

问题分析

1. 错误现象

  • 应用启动后立即闪退
  • Windows 事件日志显示:MSVCP140.dll 模块异常
  • 异常代码:c0000005(访问冲突/内存访问违规)

2. 根本原因

MSVCP140.dll 是 Microsoft Visual C++ 2015-2022 Redistributable 的运行时库,应用中的 flutter_inappwebview 插件依赖此库。当系统中缺少或版本不兼容的 VC++ 运行库时,WebView2 组件初始化失败,导致原生层崩溃。

解决方案

1. 立即解决方案

安装 Microsoft Visual C++ 2015-2022 Redistributable (x64):

  • 官方下载地址:https://aka.ms/vs/17/release/vc_redist.x64.exe
  • 安装后重启系统
    在这里插入图片描述

2. 代码层面优化

2.1 添加平台检测和错误处理
import 'dart:io' show Platform;
import 'package:flutter/foundation.dart' show defaultTargetPlatform, TargetPlatform, kIsWeb;

class _SimpleH5PageState extends State<SimpleH5Page> {
  WebViewEnvironment? _webViewEnvironment;
  bool _webView2Available = true;

  
  void initState() {
    super.initState();
    _initWebViewEnvironmentIfNeeded();
  }

  Future<void> _initWebViewEnvironmentIfNeeded() async {
    try {
      if (!kIsWeb && defaultTargetPlatform == TargetPlatform.windows) {
        final availableVersion = await WebViewEnvironment.getAvailableVersion();
        if (availableVersion == null) {
          setState(() {
            _webView2Available = false;
          });
          return;
        }
        _webViewEnvironment = await WebViewEnvironment.create(
          settings: WebViewEnvironmentSettings(userDataFolder: getWebViewUserDataFolder()),
        );
      }
    } catch (e, stack) {
      print('initWebViewEnvironment error: $e\n$stack');
    }
  }

  String getWebViewUserDataFolder() {
    final home = Platform.environment['USERPROFILE'] ?? Platform.environment['HOME'] ?? '.';
    return '$home/.webview2_userdata';
  }
}
2.2 完善错误日志记录
// 在所有可能出现异常的地方添加日志
try {
  // 业务逻辑
} catch (e, stack) {
  print('具体错误描述: $e\n$stack');
}

3. 安装包集成方案

3.1 Inno Setup 脚本配置
[Files]
; 主程序文件
Source: "..\\..\\build\\windows\\x64\\runner\\Release\\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
; VC++ 运行库
Source: "vc_redist.x64.exe"; DestDir: "{app}\\library\windows\\"; Flags: ignoreversion recursesubdirs
3.2 安装流程优化
  • 检测系统是否已安装 VC++ 运行库
  • 安装完成后继续安装VC++ 运行库
    在这里插入图片描述

预防措施

1. 依赖管理

  • 确保 flutter_inappwebview 版本 >= 5.7.0
  • pubspec.yaml 中明确指定插件版本
  • 定期更新依赖到最新稳定版本

3. 用户引导

  • 在应用文档中说明系统要求
  • 提供详细的安装指南
  • 设置友好的错误提示和解决方案

技术要点总结

  1. 原生依赖问题:Flutter 桌面应用依赖原生库,需要确保运行环境完整
  2. 安装包集成:通过安装脚本自动处理依赖安装
  3. 日志记录:完善的错误日志有助于问题定位和解决

相关资源



网站公告

今日签到

点亮在社区的每一天
去签到