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

Flutter模块集成iOS应用后WebView消失问题求助

Flutter模块集成iOS原生应用后WebView消失的解决方案

我之前也碰到过一模一样的问题!你这个情况很典型——Flutter模块单独跑或者在Runner项目里都正常,一集成到iOS原生App,WebView就凭空消失了。核心问题出在插件注册上,咱们一步步来解决:

为啥会出现这个问题?

当你在iOS原生项目里手动初始化FlutterEngine,再用它创建FlutterViewController时,Flutter不会自动帮你注册第三方插件(比如webview_flutter)。但单独运行Flutter项目时,插件注册是自动完成的,这就是两种场景下表现不一样的关键原因。

解决步骤:手动注册WebView插件

修改你的AppDelegate代码,在启动Flutter引擎后,手动添加WebView插件的注册逻辑:

import UIKit
import Flutter
import webview_flutter_wkwebview // 记得导入这个WebView的iOS底层库

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    lazy var flutterEngine = FlutterEngine(name: "my_flutter_engine")

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 启动Flutter引擎
        flutterEngine.run()
        // 手动注册WebView插件,让引擎能识别WebView组件
        FlutterWebViewPlugin.register(with: flutterEngine.registrar(forPlugin: "webview_flutter"))
        return true
    }

    // ... 其他原有代码
}

额外的检查和优化

  1. 确保依赖安装完整:
    先在Flutter模块目录下执行flutter pub get,然后切换到iOS原生项目的根目录,运行pod install,确保webview_flutter_wkwebview这个依赖被正确引入到原生项目中。

  2. 优化返回按钮逻辑:
    你Dart代码里用的SystemNavigator.pop()会直接退出整个应用,在集成场景下不太合理,建议改成Navigator.pop(context),这样只会关闭当前的FlutterViewController:

    leading: IconButton(
      icon: Icon(Icons.arrow_back),
      onPressed: () => Navigator.pop(context), 
    ),
    

最后验证

修改完这些之后,重新编译你的iOS原生项目,运行起来应该就能正常看到WebView了!

内容的提问来源于stack exchange,提问作者nabu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:42:30