第一百三十七回 WebView


我们在上一章回中介绍了WillPopScope组件相关的内容,本章回中将介绍 WebView组件.闲话休提,让我们一起Talk Flutter吧。

概念介绍

本章回中介绍的WebView组件主要用来显示网页内容,它类似于我们常用的浏览器,把它放在页面中相当于在页面中嵌套了一个浏览器。FlutterUI框架中没有提供WebView组件,我们需要在程序中导入三方包才能使用该组件。本章回将详细介绍WebView组件的使用方法.

使用方法

  1. 导入三方包:webview_flutter;
  2. 创建WebView的控制器,在控制器中添加url等信息;
  3. 创建WebView组件,并且把上一步中创建的控制器添加到组件中;

这三个步骤中,第二步操作是核心操作,这些操作与网页中的内容相关联,我们在遇到具体的场景后做详细分析。

示例代码

class _ExWebViewState extends State<ExWebView> {

  var webViewController = WebViewController()
  ..setJavaScriptMode(JavaScriptMode.unrestricted)
  ..setBackgroundColor(Colors.lightGreen)
  ..setNavigationDelegate(
  NavigationDelegate( onProgress: (progress)=>print('onProgress'),
  ),
  )
  ..loadRequest(Uri.parse("https://.pub.dev"));

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Example of WebView'),
        backgroundColor: Colors.purpleAccent,
      ),
      body: Center(
        child: WebViewWidget(
          controller: webViewController,
        ),
      ),
    );
  }
}

上面的代码中没有演示引入三方包相关的代码,其它的代码完全按照上一小节中的步骤来实现。编译并且运行该程序,就会在程序的页面中显示pub.dev网站中的内容。我在这里就不演示程序的运行结果了,建议大家自己动手去实践。

此外,有些看官把WebViewurl_launch这个包混淆了,虽然url_launch也可以打开网页,但是它是调用手机上的浏览器打开页面,而WebView是在程序当前页面打开网页,并没有使用手机上的浏览器。url_launch这个包类似Android原生开发中的intent.它只是在程序中添加信息(类似于给intent添加Action),然后让手机中与该信息匹配的程序来实现具体的功能。

比如,它添加了网页相关的信息,手机中的浏览器识别到这些信息后与自己匹配,就会启动浏览器来打开网页。它添加了音乐媒体信息,手机中的音乐播放器识别到这些信息与自己匹配就会打开音乐播放器播放音乐。

看官们,与"WebView组件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

public final class OplusBenchHelper { 50 private static final String TAG = “OplusBenchHelper”; 51 private static final boolean DEBUG = !SystemProperties.getBoolean(“ro.build.release_type”, false); 52 53 private static final String BENCH_MARK_ANTUTU = “com.antutu.ABenchMark”; 54 private static final String BENCH_MARK_ANTUTU_3D = “com.antutu.benchmark.full”; 55 56 private static final String BENCH_MARK_LUDASHI = “com.ludashi.benchmark”; 57 private static final String BENCH_MARK_ANTUTU_LITE = “com.antutu.ABenchMark.lite”; 58 private static final int CPU_MPAM_TARGET = 0x1011ea0; 59 60 /** 61 * Different ‘uid’ broadcast that antutu background bench process send to ui process 62 * when bench progress update. 63 / 64 private static final int BENCH_MARK_ANTUTU_FIRST_STEP = 44; //first step of antutu bench test 65 private static final int BENCH_MARK_ANTUTU_UX_FIRST_STEP = 20; //first step of ux antutu bench test 66 private static final int BENCH_MARK_ANTUTU_FINISHED = 46; //finished uid msg when bench test finished. 67 private static final int BENCH_MARK_ANTUTU_RAM_SPEED = 11; //first step of memory antutu bench test. 68 /* V10 mem test sequence: 16->17->18->19->13 / 69 private static final int BENCH_MARK_ANTUTU_SEQUENTIAL_READ = 16; 70 private static final int BENCH_MARK_ANTUTU_SEQUENTIAL_WRITE = 17; 71 private static final int BENCH_MARK_ANTUTU_RANDOM_READ = 18; 72 private static final int BENCH_MARK_ANTUTU_RANDOM_WRITE = 19; 73 private static final int BENCH_MARK_ANTUTU_DATABASE = 13; 74 75 private static final int BENCH_MARK_ANTUTU_OPENMP = 7; //openmp test 76 private static final int BENCH_MARK_ANTUTU_MULTITHREAD = 8; //multithread test 77 private static final int BENCH_MARK_ANTUTU_MULTITASK = 9; //multitask test 78 private static final int BENCH_MARK_ANTUTU_GEMM_MULTITHREAD = 10; //gemm multithread test 79 80 private static final int BENCH_MARK_ANTUTU_UI_LAG = 20; //UX UI lag test 81 private static final int BENCH_MARK_ANTUTU_WEBVIEW = 21; //UX web view test 82 private static final int BENCH_MARK_ANTUTU_QRCODE = 22; //UX QR code test 83 84 private static final int REFRESH_RATE_60 = 2; //keep same to OplusRefreshRateConstants.java 85 private static final int REFRESH_RATE_120 = 3; //keep same to OplusRefreshRateConstants.java 86 87 / bench mode*/ 88 private static final String BENCH_MODE_DISABLE = “0”; 89 private static final String BENCH_MODE_ENABLE = “1”; 90 private static final String BENCH_MODE_ENABLE_WITH_JPEG_MUTIL = “2”; 91 private static final String BENCH_MODE_ENABLE_WITH_PDF = “3”; 92 private static final String BENCH_MODE_ENABLE_WITH_XML = “4”; 93 private static final String BENCH_MODE_ENABLE_WITH_PDF_QC = “5”; 94 95 /** 96 * MEM reserve 10000 ~ 30000, other modules should NOT use this range. 97 * Each product/platform can use 20 values, enough for current requirement. 98 / 99 /* SM8550 / 100 private static final String BENCH_MODE_SEQUENTIAL_READ_SM8550 = “10003”; 101 private static final String BENCH_MODE_SEQUENTIAL_WRITE_SM8550 = “10004”; 102 private static final String BENCH_MODE_RANDOMREAD_SM8550 = “10005”; 103 private static final String BENCH_MODE_RANDOMWRITE_SM8550 = “10006”; 104 private static final String BENCH_MODE_DATEBASE_SM8550 = “10007”; 105 /* MT6895 / 106 private static final String BENCH_MODE_SEQUENTIAL_READ_MT6895 = “10023”; 107 private static final String BENCH_MODE_SEQUENTIAL_WRITE_MT6895 = “10024”; 108 private static final String BENCH_MODE_RANDOMREAD_MT6895 = “10025”; 109 private static final String BENCH_MODE_RANDOMWRITE_MT6895 = “10026”; 110 private static final String BENCH_MODE_DATEBASE_MT6895 = “10027”; 111 /SM6225/ 112 private static final String BENCH_MODE_SEQUENTIAL_READ_SM6225 = “10043”; 113 private static final String BENCH_MODE_SEQUENTIAL_WRITE_SM6225 = “10044”; 114 private static final String BENCH_MODE_RANDOMREAD_SM6225 = “10045”; 115 private static final String BENCH_MODE_RANDOMWRITE_SM6225 = “10046”; 116 private static final String BENCH_MODE_DATEBASE_SM6225 = “10047”; 117 /* SM6375 / 118 private static final String BENCH_MODE_SEQUENTIAL_READ_SM6375 = “10063”; 119 private static final String BENCH_MODE_SEQUENTIAL_WRITE_SM6375 = “10064”; 120 private static final String BENCH_MODE_RANDOMREAD_SM6375 = “10065”; 121 private static final String BENCH_MODE_RANDOMWRITE_SM6375 = “10066”; 122 private static final String BENCH_MODE_DATEBASE_SM6375 = “10067”; 123 /* MT6983 / 124 private static final String BENCH_MODE_SEQUENTIAL_READ_MT6983 = “10083”; 125 private static final String BENCH_MODE_SEQUENTIAL_WRITE_MT6983 = “10084”; 126 private static final String BENCH_MODE_RANDOMREAD_MT6983 = “10085”; 127 private static final String BENCH_MODE_RANDOMWRITE_MT6983 = “10086”; 128 private static final String BENCH_MODE_DATEBASE_MT6983 = “10087”; 129 /* SM8250 / 130 private static final String BENCH_MODE_SEQUENTIAL_READ_SM8250 = “10103”; 131 private static final String BENCH_MODE_SEQUENTIAL_WRITE_SM8250 = “10104”; 132 private static final String BENCH_MODE_RANDOMREAD_SM8250 = “10105”; 133 private static final String BENCH_MODE_RANDOMWRITE_SM8250 = “10106”; 134 private static final String BENCH_MODE_DATEBASE_SM8250 = “10107”; 135 136 /* MEM_MAX / 137 private static final String BENCH_MODE_SEQUENTIAL_READ_MEM_MAX = “29999”; 138 private static final String BENCH_MODE_SEQUENTIAL_WRITE_MEM_MAX = “29999”; 139 private static final String BENCH_MODE_RANDOMREAD_MEM_MAX = “29999”; 140 private static final String BENCH_MODE_RANDOMWRITE_MEM_MAX = “29999”; 141 private static final String BENCH_MODE_DATEBASE_MEM_MAX = “29999”; 142 143 /* 144 * CPU multithread reserve 30000 ~ 35000, other modules should NOT use this range. 145 * Each product/platform can use 20 values, enough for current requirement. 146 / 147 private static final String BENCH_MODE_MULTITHREAD_MT6989 = “30003”; 148 private static final String BENCH_MODE_GEMM_MULTITHREAD_MT6989 = “30004”; 149 private static final String BENCH_MODE_OPENMP_MT6989 = “30005”; 150 private static final String BENCH_MODE_MULTITASK_MT6989 = “30006”; 151 152 private static final String BENCH_MODE_MULTITHREAD_SM8650 = “30023”; 153 private static final String BENCH_MODE_GEMM_MULTITHREAD_SM8650 = “30024”; 154 private static final String BENCH_MODE_OPENMP_SM8650 = “30025”; 155 private static final String BENCH_MODE_MULTITASK_SM8650 = “30026”; 156 157 /* 158 * UX test reserve 35000 ~ 40000, other modules should NOT use this range. 159 * Each product/platform can use 20 values, enough for current requirement. 160 / 161 private static final String BENCH_MODE_UI_LAG_MT6989 = “35003”; 162 163 private static final String BENCH_MODE_UI_LAG_SM8650 = “35023”; 164 165 / system properties to mark benchmode status, set by bench UI in other files */ 166 private static final String SYSTEM_PROPERTIES_SPEC = “sys.oplus.high.performance.spec”; 167 168 private static final int SEASONS = 1; 169 private static final int COASTLINE2 = 2; 170 private static final int BENCH_CHECK = 3; 171 private static final int DELAY_MS_BENCH_CHECK = 1000; 172 private static final int UAH_EVENT_BENCH_POWER_LIMIT = 214; //EVENT_BENCH_POWER_LIMIT 173 private static final int UAH_EVENT_BENCH_SEQUENTIAL_READ = 295; //EVENT_BENCH_SEQUENTIAL_READ 174 private static final int UAH_EVENT_BENCH_SEQUENTIAL_WRITE = 296; //EVENT_BENCH_SEQUENTIAL_WRITE 175 private static final int UAH_EVENT_BENCH_RANDOM_READ = 297; //EVENT_BENCH_RANDOM_READ 176 private static final int UAH_EVENT_BENCH_RANDOM_WRITE = 298; //EVENT_BENCH_RANDOM_WRITE 177 private static final int UAH_EVENT_BENCH_DATEBASE = 299; //EVENT_BENCH_DATEBASE 178 private static final String PKG_NAME = “”; 179 private static final long BITMAP_CACHE_TIMEOUT = 1000; //ms 180 private static final Object LOCK = new Object(); 181 private static int sStepCount = 0; 182 private static int sHandle = 0; 183 private static int sHandleRand = 0; 184 private static int sDelayMsSeasons = 0; 185 private static int sDelayMsCoastLine2 = 0; 186 private static int sTimeoutSeasons = 0; 187 private static int sTimeoutCoastLine2 = 0; 188 private static int sTimeoutMem = -1; 189 private static int sTimeoutRand = -1; 190 private static ArrayList sList = null; 191 /ludashi bitmap decode cache / 192 private static String sLastResStr = “”; 193 private static int sLastResId = -999; 194 private static long sLastTimestamp = -999; 195 private static Bitmap sBitmapCache = null; 196 197 / 198 * check platform 199 */ 200 private static boolean sIsDx2 = android.os.Build.HARDWARE.startsWith(“mt6985”); 201 private static boolean sIsMT6895 = android.os.Build.HARDWARE.startsWith(“mt6895”); 202 private static boolean sIsSM8550 = android.os.Build.SOC_MODEL.startsWith(“SM8550”); 203 private static boolean sIsSM6225 = android.os.Build.SOC_MODEL.startsWith(“SM6225”); 204 private static boolean sIsSM6375 = android.os.Build.SOC_MODEL.startsWith(“SM6375”); 205 private static boolean sIsMT6983 = android.os.Build.HARDWARE.startsWith(“mt6983”); 206 private static boolean sIsMT6989 = android.os.Build.HARDWARE.startsWith(“mt6989”); 207 private static boolean sIsSM8250 = android.os.Build.SOC_MODEL.startsWith(“SM8250”); 208 private static boolean sIsSM8650 = android.os.Build.SOC_MODEL.startsWith(“SM8650”); 209 private static boolean sIsSM7675 = android.os.Build.SOC_MODEL.startsWith(“SM7675”); 210 private static boolean sIsSM7550 = android.os.Build.SOC_MODEL.startsWith(“SM7550”); 211 212 private static OplusBenchHelper sInstance = null; 213 private UAHResClient mResClient = UAHResClient.get(OplusBenchHelper.class);去掉行号并逐行解释,内容在一个文本框中方便我复制
07-10
以下是OplusBenchHelper类的完整解析,已去除行号并整合在一个文本框内: ```java public final class OplusBenchHelper { // 日志标识和调试模式 private static final String TAG = "OplusBenchHelper"; private static final boolean DEBUG = !SystemProperties.getBoolean("ro.build.release_type", false); // 基准测试应用包名定义 private static final String BENCH_MARK_ANTUTU = "com.antutu.ABenchMark"; private static final String BENCH_MARK_ANTUTU_3D = "com.antutu.benchmark.full"; private static final String BENCH_MARK_LUDASHI = "com.ludashi.benchmark"; private static final String BENCH_MARK_ANTUTU_LITE = "com.antutu.ABenchMark.lite"; private static final int CPU_MPAM_TARGET = 0x1011ea0; // CPU内存性能目标值 // 安兔兔测试步骤标识(用于进程间通信) private static final int BENCH_MARK_ANTUTU_FIRST_STEP = 44; // 安兔兔测试第一步 private static final int BENCH_MARK_ANTUTU_UX_FIRST_STEP = 20; // UX测试第一步 private static final int BENCH_MARK_ANTUTU_FINISHED = 46; // 测试完成标识 private static final int BENCH_MARK_ANTUTU_RAM_SPEED = 11; // 内存速度测试 // 内存测试序列标识 private static final int BENCH_MARK_ANTUTU_SEQUENTIAL_READ = 16; // 顺序读 private static final int BENCH_MARK_ANTUTU_SEQUENTIAL_WRITE = 17; // 顺序写 private static final int BENCH_MARK_ANTUTU_RANDOM_READ = 18; // 随机读 private static final int BENCH_MARK_ANTUTU_RANDOM_WRITE = 19; // 随机写 private static final int BENCH_MARK_ANTUTU_DATABASE = 13; // 数据库测试 // CPU相关测试标识 private static final int BENCH_MARK_ANTUTU_OPENMP = 7; // OpenMP测试 private static final int BENCH_MARK_ANTUTU_MULTITHREAD = 8; // 多线程测试 private static final int BENCH_MARK_ANTUTU_MULTITASK = 9; // 多任务测试 private static final int BENCH_MARK_ANTUTU_GEMM_MULTITHREAD = 10; // GEMM多线程测试 // UX用户体验测试标识 private static final int BENCH_MARK_ANTUTU_UI_LAG = 20; // UI延迟测试 private static final int BENCH_MARK_ANTUTU_WEBVIEW = 21; // WebView测试 private static final int BENCH_MARK_ANTUTU_QRCODE = 22; // 二维码测试 // 屏幕刷新率常量 private static final int REFRESH_RATE_60 = 2; // 60Hz刷新率 private static final int REFRESH_RATE_120 = 3; // 120Hz刷新率 // 基准测试模式定义 private static final String BENCH_MODE_DISABLE = "0"; // 禁用测试模式 private static final String BENCH_MODE_ENABLE = "1"; // 启用基本测试模式 private static final String BENCH_MODE_ENABLE_WITH_JPEG_MUTIL = "2"; // 带JPEG多线程的测试 private static final String BENCH_MODE_ENABLE_WITH_PDF = "3"; // 带PDF处理的测试 private static final String BENCH_MODE_ENABLE_WITH_XML = "4"; // 带XML处理的测试 private static final String BENCH_MODE_ENABLE_WITH_PDF_QC = "5"; // 带PDF质量检查的测试 // 内存测试模式值(按平台划分) private static final String BENCH_MODE_SEQUENTIAL_READ_SM8550 = "10003"; // SM8550顺序读 private static final String BENCH_MODE_SEQUENTIAL_WRITE_SM8550 = "10004"; // SM8550顺序写 // 其他平台类似定义(MT6895、SM6225、SM6375、MT6983、SM8250等) // CPU多线程测试模式值 private static final String BENCH_MODE_MULTITHREAD_MT6989 = "30003"; // MT6989多线程测试 private static final String BENCH_MODE_GEMM_MULTITHREAD_MT6989 = "30004"; // MT6989 GEMM测试 // 其他平台类似定义 // UX测试模式值 private static final String BENCH_MODE_UI_LAG_MT6989 = "35003"; // MT6989 UI延迟测试 private static final String BENCH_MODE_UI_LAG_SM8650 = "35023"; // SM8650 UI延迟测试 // 系统属性与事件定义 private static final String SYSTEM_PROPERTIES_SPEC = "sys.oplus.high.performance.spec"; // 高性能规格系统属性 private static final int UAH_EVENT_BENCH_POWER_LIMIT = 214; // 基准测试功率限制事件 // 其他测试事件定义 // 运行时变量和缓存 private static final Object LOCK = new Object(); // 同步锁 private static int sStepCount = 0; // 测试步骤计数器 private static Bitmap sBitmapCache = null; // 位图缓存 // 平台检测标志 private static boolean sIsMT6895 = android.os.Build.HARDWARE.startsWith("mt6895"); private static boolean sIsSM8550 = android.os.Build.SOC_MODEL.startsWith("SM8550"); // 其他平台检测标志 // 单例实例和资源客户端 private static OplusBenchHelper sInstance = null; private UAHResClient mResClient = UAHResClient.get(OplusBenchHelper.class); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值