Flutter WebView(flutter_inappwebview)

Flutter WebView

WebView在flutter中的实现方法主要有三种,三种的对比可以参考这篇文章
https://pub.dev/上搜索webview
在这里插入图片描述
我们选择的是第三种flutter_inappwebview
官方文档给出了在使用时的要求
在这里插入图片描述

使用方法如下

  1. 添加依赖
dependencies:
  flutter_inappwebview: ^5.3.2

使用时在对应文件下导包

import 'package:flutter_inappwebview/flutter_inappwebview.dart';
  1. 把minSdkVersion改为17
    在这里插入图片描述

  2. 添加网络权限
    <uses-permission android:name="android.permission.INTERNET"/>在这里插入图片描述

  3. 使用

InAppWebView中有很多属性,这里我们只监听了加载进度onProgressChanged,通过监听加载进度,我们可以在还未加载出网页时显示一个进度圈,加载超过99.9%不显示加载圈显示链接网页内容

import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _flag = true;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("WebView"),
        ),
        body: Column(
          children: [
            this._flag ? _getMoreWidget() : Text(""),
            Expanded(
                child: InAppWebView(
              //老版本:initialUrl    新版本:initialUrlRequest
              initialUrlRequest: URLRequest(
                  url: Uri.parse(
                      "https://blog.csdn.net/m0_46527751?spm=1018.2226.3001.5343")),
              onProgressChanged: (controller, progress) {
                if (progress / 100 > 0.9999) {
                  setState(() {
                    this._flag = false;
                  });
                }
              },
            ))
          ],
        ));
  }
//自定义加载中的组件
  Widget _getMoreWidget() {
    return Center(
      child: Padding(
        padding: EdgeInsets.all(10.0),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Text(
              '加载中...',
              style: TextStyle(fontSize: 16.0),
            ),
            CircularProgressIndicator(
              strokeWidth: 1.0,
            )
          ],
        ),
      ),
    );
  }
}

在这里插入图片描述
在这里插入图片描述

<think>好的,我现在需要解决用户在Flutter中使用webview_flutter_android依赖时遇到的报错问题。首先,我得回忆一下常见的可能导致这个问题的原因。可能的原因包括版本兼容性、配置错误、依赖冲突或者本地环境问题。 首先,用户提到的是webview_flutter_android这个依赖报错。webview_flutter插件在Flutter中用于嵌入Web视图,而webview_flutter_android是专门为Android平台提供的实现。这个包通常作为webview_flutter的依赖自动引入,但有时单独添加可能会导致问题。 接下来,我需要考虑常见的解决步骤。首先检查Flutter和Dart的版本是否兼容。用户可能使用了较旧的Flutter版本,而webview_flutter_android需要新版本的支持。建议用户运行flutter doctor查看环境状态,确认是否有未安装的依赖项,比如Android SDK版本或者构建工具。 然后,查看pubspec.yaml文件中的依赖版本。用户可能没有指定正确的版本,导致版本冲突。建议用户检查webview_flutterwebview_flutter_android的版本是否兼容,并参考官方文档使用推荐的版本组合。 另外,AndroidManifest.xml中的配置是否正确也很重要。可能需要添加网络权限或者调整其他设置,比如启用硬件加速。用户可能忘记添加<uses-permission android:name="android.permission.INTERNET" />,导致WebView无法加载网页。 还有可能的问题来源是Gradle构建配置。检查build.gradle中的minSdkVersion是否符合webview_flutter_android的要求,目前该插件可能需要minSdkVersion 19或更高。同时,确保Gradle版本和Android插件版本是兼容的,避免构建错误。 清理和重建项目也是一个有效的步骤。有时候旧的构建缓存会导致问题,运行flutter clean然后重新构建可能会解决。 依赖冲突的可能性也不能忽视。如果项目中使用了其他插件,可能与webview_flutter_android有版本冲突。使用flutter pub deps命令查看依赖树,或者尝试依赖覆盖来解决冲突。 另外,用户可能需要检查是否正确地处理了平台特定代码。例如,在Android中是否需要额外的初始化步骤,或者在MainActivity中是否需要配置。 最后,如果以上步骤都无效,建议用户查阅插件的GitHub issue页面,看看是否有已知的问题或解决方案。或者提供一个具体的错误日志,以便更精准地定位问题。</think>在Flutter中使用`webview_flutter_android`依赖报错时,通常与版本兼容性或配置相关。以下是系统化的解决方案: --- ### 1️⃣ **检查Flutter环境** ```bash flutter doctor ``` 确保: - Android SDK已正确安装 - Android Studio配置无误 - 无`!`或`✗`标记的警告(尤其是Android工具链) --- ### 2️⃣ **版本兼容性** 在`pubspec.yaml`中确认版本组合(截止2023年10月): ```yaml dependencies: webview_flutter: ^4.2.2 # 基础包 webview_flutter_android: ^2.10.2 # Android实现 ``` ⚠️ **注意**: - `webview_flutter`主包会自动引入平台实现包(无需手动添加`webview_flutter_android`,除非需要覆盖版本) - 若手动添加,需确保主包版本与实现包兼容 --- ### 3️⃣ **Android配置** #### 修改 `android/app/build.gradle`: ```gradle android { defaultConfig { minSdkVersion 19 # 最低要求19 } } ``` #### 添加网络权限到 `AndroidManifest.xml`: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` --- ### 4️⃣ **清理构建缓存** ```bash flutter clean rm -rf pubspec.lock flutter pub get ``` --- ### 5️⃣ **处理依赖冲突** 如果同时使用其他插件(如`camera`、`firebase`),可能导致Gradle冲突: ```bash flutter pub deps --style=json ``` 查看依赖树,用`dependency_overrides`强制统一版本: ```yaml dependency_overrides: plugin_name: ^x.x.x ``` --- ### 6️⃣ **Gradle版本检查** 修改 `android/build.gradle`: ```gradle dependencies { classpath 'com.android.tools.build:gradle:7.3.0' # 推荐版本 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20" } ``` --- ### 7️⃣ **常见错误示例** #### 错误1:`Unsupported classes` ```bash * What went wrong: Execution failed for task ':app:checkDebugAarMetadata'. > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction > 1 exception was raised by workers: java.lang.IllegalStateException: 编译时minSdkVersion(19) < 依赖库的minSdkVersion(21) ``` **解决**:将`minSdkVersion`提高到21或降低依赖库版本 #### 错误2:`PlatformException(error, java.lang.IllegalStateException)` **解决**:确保WebView初始化在`WidgetsFlutterBinding`之后: ```dart void main() async { WidgetsFlutterBinding.ensureInitialized(); runApp(MyApp()); } ``` --- ### 8️⃣ **替代方案** 若问题持续,尝试: - 改用官方`webview_flutter`主包(自动管理平台实现) - 回退到旧版本: ```yaml webview_flutter: 3.0.4 ``` --- 通过以上步骤,90%的`webview_flutter_android`报错可解决。若仍有问题,请提供完整错误日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值