解决Flutter项目中Android WebView不支持input标签的问题
将 webview_flutter库 修改为 flutter_webview_pro库
修改 pubspec.yaml 文件:
# webview_flutter: ^3.0.4
flutter_webview_pro: ^3.0.1+4
修改 import
// import 'package:webview_flutter/webview_flutter.dart';
import 'package:flutter_webview_pro/webview_flutter.dart';
在 android/app/src/main/AndroidManifest.xml 中增加相机权限和 FileProvider
<manifest>
<uses-permission android:name="android.permission.CAMERA" />
<application>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
tools:replace="android:authorities"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths_public">
</meta-data>
</provider>
</application>
</manifest>
在 android/app/src/main/res目录下新增 xml目录,并新增 file_paths_public.xml 文件,文件内容如下
<?xml version="1.0" encoding="utf-8"?>
<paths>
<paths>
<root-path
name="all_external_path"
path="" />
<files-path
name="files"
path="" />
<cache-path
name="cache"
path="" />
<external-path
name="external_storage_root"
path="." />
<external-files-path
name="external_file_path"
path="" />
<external-cache-path
name="external_cache_path"
path="" />
</paths>
</paths>
说明:
- 该库 fork自官方的 webview_flutter库,在其基础上新增了对 input标签的支持,代码可能会落后于官方版本,但功能上应该是能满足项目需求的,可以在集成后提交测试验证。
- 在修改 pubspec.yaml 文件时,可能需要运行 flutter pub get 命令来更新依赖。
- 对于 Android 10 及以上的设备,需要使用 android:requestLegacyExternalStorage="true" 来支持访问外部存储。
- 对于 file_paths_public.xml 文件中的 <root-path> 标签,path 属性应该填写实际的路径,例如 / 表示根目录,而不是留空。
- 可以在 AndroidManifest.xml 文件中添加对网络权限的声明,例如 <uses-permission android:name="android.permission.INTERNET" />。
- 可以在 Flutter Webview Pro 中使用 WebViewPro 组件来替代 WebView 组件,以支持更多的功能和属性。
- 需要注意 AndroidX 库和 support 库的冲突问题,可以通过修改 app/build.gradle 文件来解决。例如,将 implementation 'androidx.appcompat:appcompat:1.3.1' 替换为 implementation 'com.android.support:appcompat-v7:28.0.0'。