Flutter网页视图展示插件webviewx2的使用
Flutter网页视图展示插件webviewx2的使用
1. 创建一个WebViewXController
在你的状态化组件中
late WebViewXController webviewController;
2. 在构建方法中添加WebViewX
widget,并设置onWebViewCreated
回调以在WebView初始化时获取控制器
WebViewX(
initialContent: '<h2> Hello, world! </h2>',
initialSourceType: SourceType.HTML,
onWebViewCreated: (controller) => webviewController = controller,
...
... other options
);
3. 与控制器交互(运行示例应用查看一些用例)
webviewController.loadContent(
'https://flutter.dev',
SourceType.url,
);
webviewController.goBack();
webviewController.goForward();
...
...
关键功能和 属性
Widget 属性
String? initialContent
: 初始WebView内容SourceType initialSourceType
: 初始WebView内容类型(url, urlBypass or html
)String? userAgent
: 用户代理double width
: 组件宽度double height
: 组件高度Function(WebViewXController controller)? onWebViewCreated
: 初始化时执行的回调Set<EmbeddedJsContent>
jsContent: 包含嵌入JavaScript代码的对象Set<DartCallback>
dartCallBacks: 包含从JavaScript调用的Darts回调函数的对象bool ignoreAllGestures
: 是否忽略所有手势JavascriptMode javascriptMode
: 允许或禁止JavaScript执行AutoMediaPlaybackPolicy initialMediaPlaybackPolicy
: 规定是否允许媒体内容自动播放void Function(String src)? onPageStarted
: 页面开始加载时执行的回调void Function(String src)? onPageFinished
: 页面加载完成时执行的回调NavigationDelegate? navigationDelegate
: 点击WebView内容时执行的回调void Function(WebResourceError error)? onWebResourceError
: 加载资源错误时执行的回调WebSpecificParams webSpecificParams
: Web特定参数对象MobileSpecificParams mobileSpecificParams
: Mobile特定参数对象
Controller 属性
loadContent(URL, SourceType.URL)
: 加载URL并允许iframe嵌入loadContent(URL, SourceType.URL_BYPASS)
: 加载URL不支持iframe嵌入loadContent(URL, SourceType.URL_BYPASS, headers: {'x-something': 'value'})
: 加载URL不支持iframe嵌入,带headersloadContent(HTML, SourceType.HTML)
: 从字符串加载HTMLloadContent(HTML, SourceType.HTML, fromAssets: true)
: 从资产加载HTMLcanGoBack()
: 检查是否可以回退历史记录goBack()
: 回退历史记录canGoForward()
: 检查是否可以前进历史记录goForward()
: 前进历史记录reload()
: 重新加载当前内容ignoringAllGestures
: 获取是否忽略所有手势setIgnoreAllGestures(value)
: 设置是否忽略所有手势evalRaw Javascript(JS)
: 执行原始JavaScript代码evalRaw Javascript(JS, inGlobalContext: true)
: 在全局上下文中执行原始JavaScript代码callJsMethod(METHOD_NAME, PARAMS_LIST)
: 调用JavaScript方法getContent()
: 获取WebView内容getScrollX()
: 获取X轴滚动位置getScrollY()
: 获取Y轴滚动位置scrollBy(int x, int y)
: 按照指定坐标滚动scrollTo(int x, int y)
: 滚动到指定坐标getTitle()
: 获取内页标题clearCache()
: 清除缓存
限制和注意事项
- 这个包旨在结合移动和Web的最佳实践,但在Web和移动之间存在差异。
- 在开发过程中,默认渲染器是
html
。现在(Flutter 2, Dart 2.12),默认渲染器是canvaskit
。建议使用html
渲染器。 - 使用
--web-renderer html
命令来运行和构建。
示例代码
import 'package:flutter/material.dart';
import 'webview_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'WebViewX Example App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const WebViewXPage(),
);
}
}
更多关于Flutter网页视图展示插件webviewx2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网页视图展示插件webviewx2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,webviewx2
是一个用于展示网页内容的插件。它基于腾讯的 X5 内核,适用于 Android 平台,提供了更好的性能和兼容性。下面是一个如何在 Flutter 项目中使用 webviewx2
的示例代码。
首先,你需要在 pubspec.yaml
文件中添加 webviewx2
依赖:
dependencies:
flutter:
sdk: flutter
webviewx2: ^latest_version # 请替换为最新的版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在 Android 项目的 build.gradle
文件中添加对腾讯 X5 内核的支持。编辑 android/app/build.gradle
文件,确保你的 android
配置部分包含以下内容:
android {
...
defaultConfig {
...
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
...
}
并且,你需要在 android/app/src/main/AndroidManifest.xml
中添加必要的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
...
</manifest>
请注意,这些权限可能因应用需求而异,并且在实际应用中需要谨慎处理用户隐私。
现在,你可以在 Flutter 代码中使用 webviewx2
插件。以下是一个简单的示例,展示如何在 Flutter 应用中嵌入一个 WebView:
import 'package:flutter/material.dart';
import 'package:webviewx2/webviewx2.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter WebViewX2 Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: WebViewX2Page(),
);
}
}
class WebViewX2Page extends StatefulWidget {
@override
_WebViewX2PageState createState() => _WebViewX2PageState();
}
class _WebViewX2PageState extends State<WebViewX2Page> {
late WebViewX2Controller _controller;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('WebViewX2 Example'),
),
body: WebViewX2(
initialUrl: 'https://www.example.com',
onWebViewCreated: (WebViewX2Controller webViewController) {
_controller = webViewController;
},
javascriptMode: JavascriptMode.unrestricted,
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
// 示例:在WebView中加载新的URL
await _controller.loadUrl('https://www.google.com');
},
tooltip: 'Load new URL',
child: Icon(Icons.open_in_new),
),
);
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,其中包含一个 WebView,初始加载的 URL 是 https://www.example.com
。我们还添加了一个浮动操作按钮(FAB),点击它可以加载一个新的 URL(在这个例子中是 https://www.google.com
)。
请注意,由于 webviewx2
插件依赖于腾讯的 X5 内核,它可能不适用于所有设备和场景。确保在实际应用中充分测试,并根据需要进行适配。