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

Flutter迁移AndroidX后如何使用flutter_webview_plugin及替代方案咨询

解决flutter_webview_plugin适配AndroidX的问题及替代方案

嘿,我来帮你搞定这个棘手的问题!首先得说,flutter_webview_plugin确实是个年头有点久的插件了,没跟上AndroidX的更新节奏,所以你迁移项目后就因为新旧库冲突导致崩溃。下面给你两种清晰的解决思路:

一、尝试修复flutter_webview_plugin适配AndroidX

如果你特别想用这个老插件,可以试试手动适配,但说实话有点折腾:

  • 先确认你的Flutter项目已经开启AndroidX支持:打开android/gradle.properties文件,确保下面两行配置存在且为true:
    android.useAndroidX=true
    android.enableJetifier=true
    
  • 接下来修改插件的Android端依赖和代码:
    1. 找到插件在本地的安装路径(一般在~/.pub-cache/hosted/pub.dev/flutter_webview_plugin-[版本号]/android)
    2. 打开build.gradle文件,把所有以com.android.support开头的依赖替换成对应的AndroidX库,比如把com.android.support:appcompat-v7换成androidx.appcompat:appcompat:1.6.1,把com.android.support:support-v4换成androidx.legacy:legacy-support-v4:1.0.0
    3. 修改插件Java代码里的导入路径,比如把android.support.v7.app.AppCompatActivity改成androidx.appcompat.app.AppCompatActivity
    4. 重新运行项目,但要注意后续插件更新会覆盖你的修改,所以这种方法只是临时方案。

二、更省心的替代插件推荐

直接换支持AndroidX的插件才是长期稳妥的选择,以下两个插件完全满足你监听重定向URL、获取授权码的需求:

1. webview_flutter(官方维护)

这是Flutter官方推出的WebView插件,稳定性拉满,完全适配AndroidX。监听重定向和提取授权码的示例代码如下:

import 'package:webview_flutter/webview_flutter.dart';

// 在Widget中使用
WebView(
  initialUrl: '你的授权登录页面URL',
  // 开启JS支持,多数登录页面需要这一步
  javascriptMode: JavascriptMode.unrestricted,
  navigationDelegate: (NavigationRequest request) {
    // 拦截URL,检查是否包含授权码参数(比如code=xxx)
    if (request.url.contains('code=')) {
      final uri = Uri.parse(request.url);
      final authCode = uri.queryParameters['code'];
      // 这里处理你的授权逻辑,比如关闭WebView、保存授权码等
      print('获取到授权码:$authCode');
      // 阻止页面跳转,直接拦截
      return NavigationDecision.prevent;
    }
    // 其他URL正常跳转
    return NavigationDecision.navigate;
  },
)

2. flutter_inappwebview(功能更强大)

如果你需要更多高级功能(比如自定义WebView样式、Cookie管理、下载支持等),这个第三方插件是绝佳选择,同样完美适配AndroidX。示例代码:

import 'package:flutter_inappwebview/flutter_inappwebview.dart';

// 在Widget中使用
InAppWebView(
  initialUrlRequest: URLRequest(url: Uri.parse('你的授权登录页面URL')),
  shouldOverrideUrlLoading: (controller, navigationAction) async {
    final currentUrl = navigationAction.request.url.toString();
    // 检查URL是否包含授权码
    if (currentUrl.contains('code=')) {
      final uri = Uri.parse(currentUrl);
      final authCode = uri.queryParameters['code'];
      // 处理授权逻辑
      print('获取到授权码:$authCode');
      // 取消页面跳转
      return NavigationActionPolicy.CANCEL;
    }
    // 允许其他URL跳转
    return NavigationActionPolicy.ALLOW;
  },
)

总结

原插件崩溃的核心原因是旧的Support库和AndroidX库冲突,如果不想折腾适配,优先选官方的webview_flutter;需要高级功能就用flutter_inappwebview,这两个都能完美解决你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:27:03