Flutter Linux WebView插件flutter_linux_webview的使用
Flutter Linux WebView插件flutter_linux_webview的使用
flutter_linux_webview
是一个为 webview_flutter
(v3.0.4) 提供Linux桌面实现的插件,它使用CEF(Chromium Embedded Framework)来渲染WebView。以下是如何在Flutter项目中使用该插件的详细指南。
支持的平台
该插件已经在一些平台上进行了验证,但在其他平台上可能会出现挂起或崩溃的情况。具体可以查看 validation_report.md 文件了解不同平台上的验证结果。
运行示例项目
进入 example/
目录并运行项目以查看实际效果。
使用步骤
1. 添加依赖
在 pubspec.yaml
文件中添加 flutter_linux_webview
和 webview_flutter
作为依赖项:
dependencies:
webview_flutter: ^3.0.4
flutter_linux_webview: ^0.1.0
可以通过命令行添加这些依赖:
$ flutter pub add flutter_linux_webview:'^0.1.0'
$ flutter pub add webview_flutter:'^3.0.4'
2. 修改 linux/CMakeLists.txt
在你的应用的 linux/CMakeLists.txt
文件中添加以下命令:
include(flutter/ephemeral/.plugin_symlinks/flutter_linux_webview/linux/cmake/link_to_cef_library.cmake)
注意:此命令必须放在以下字符串之后:
add_executable(${BINARY_NAME})
如果未添加上述配置,插件将无法正常工作。
3. 导入并设置
在 Dart 代码中导入必要的包:
import 'package:webview_flutter/webview_flutter.dart';
import 'package:flutter_linux_webview/flutter_linux_webview.dart';
在创建第一个 WebView
之前,必须调用 LinuxWebViewPlugin.initialize()
方法,并且需要设置 WebView.platform = LinuxWebView();
来配置 WebView
使用Linux实现。
以下是完整的示例代码:
import 'dart:async';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:flutter_linux_webview/flutter_linux_webview.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化插件
LinuxWebViewPlugin.initialize(options: <String, String?>{
'user-agent': 'UA String',
'remote-debugging-port': '8888',
'autoplay-policy': 'no-user-gesture-required',
});
// 配置WebView使用Linux实现
WebView.platform = LinuxWebView();
runApp(const MaterialApp(home: _WebViewExample()));
}
class _WebViewExample extends StatefulWidget {
const _WebViewExample({Key? key}) : super(key: key);
[@override](/user/override)
_WebViewExampleState createState() => _WebViewExampleState();
}
class _WebViewExampleState extends State<_WebViewExample> with WidgetsBindingObserver {
final Completer<WebViewController> _controller = Completer<WebViewController>();
[@override](/user/override)
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
[@override](/user/override)
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
[@override](/user/override)
Future<AppExitResponse> didRequestAppExit() async {
await LinuxWebViewPlugin.terminate();
return AppExitResponse.exit;
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('flutter_linux_webview example'),
),
body: WebView(
initialUrl: 'https://flutter.dev',
initialCookies: const [
WebViewCookie(name: 'mycookie', value: 'foo', domain: 'flutter.dev')
],
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
javascriptMode: JavascriptMode.unrestricted,
),
floatingActionButton: favoriteButton(),
);
}
Widget favoriteButton() {
return FutureBuilder<WebViewController>(
future: _controller.future,
builder: (BuildContext context, AsyncSnapshot<WebViewController> controller) {
if (controller.hasData) {
return FloatingActionButton(
onPressed: () async {
final String useragent = await controller.data!.runJavascriptReturningResult('navigator.userAgent');
final String title = await controller.data!.getTitle();
final String url = await controller.data!.currentUrl();
final String cookies = await controller.data!.runJavascriptReturningResult('document.cookie');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('userAgent: $useragent, title: $title, url: $url, cookie: $cookies'),
),
);
},
child: const Icon(Icons.favorite),
);
}
return Container();
},
);
}
}
更多关于Flutter Linux WebView插件flutter_linux_webview的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Linux WebView插件flutter_linux_webview的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter Linux应用中使用flutter_linux_webview
插件的示例代码。这个示例展示了如何集成并使用WebView插件来加载一个网页。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加flutter_linux_webview
依赖:
dependencies:
flutter:
sdk: flutter
flutter_linux_webview: ^0.7.0 # 请检查最新版本号
2. 配置CMakeLists.txt
由于flutter_linux_webview
依赖于原生代码,你需要在Linux项目的CMakeLists.txt
文件中添加必要的配置。通常,这个文件位于linux
目录下。
cmake_minimum_required(VERSION 3.10)
project(your_project_name LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# Flutter
set(FLUTTER_ROOT "${CMAKE_SOURCE_DIR}/../flutter")
find_package(Flutter REQUIRED)
# WebView
include_directories(${FLUTTER_ROOT}/bin/cache/pkg/sky_engine/include/dart_ui)
add_subdirectory(plugins/flutter_linux_webview)
add_executable(your_project_name main.cpp)
target_link_libraries(
your_project_name
PRIVATE FlutterEngine
flutter_linux_webview
)
确保你的plugins
目录下有一个flutter_linux_webview
的符号链接,指向实际插件的位置。
3. 创建WebView页面
接下来,创建一个Flutter页面来使用WebView。首先,在lib
目录下创建一个新的Dart文件,例如webview_page.dart
:
import 'package:flutter/material.dart';
import 'package:flutter_linux_webview/flutter_linux_webview.dart';
class WebViewPage extends StatefulWidget {
final String url;
WebViewPage({required this.url});
@override
_WebViewPageState createState() => _WebViewPageState();
}
class _WebViewPageState extends State<WebViewPage> {
late WebViewController _controller;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('WebView Example'),
),
body: WebView(
initialUrl: widget.url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller = webViewController;
},
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
4. 使用WebView页面
最后,在你的主应用文件中(例如main.dart
),使用刚才创建的WebViewPage
:
import 'package:flutter/material.dart';
import 'webview_page.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter WebView Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Flutter WebView Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => WebViewPage(url: 'https://www.example.com')),
);
},
child: Text('Open WebView'),
),
),
),
);
}
}
5. 运行应用
确保你已经配置好Flutter开发环境,然后运行以下命令来构建和运行你的Flutter Linux应用:
flutter config --enable-linux-desktop
flutter run -d linux
这将启动你的Flutter应用,点击按钮后将会打开一个新的页面,其中包含一个加载了指定URL的WebView。
请根据实际情况调整代码中的项目名称和URL。希望这个示例对你有帮助!