Flutter网页视图插件webview_all的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter网页视图插件webview_all的使用

Webview for All Flutter Platform

English Doc     中文文档

webview_all 是一个支持所有Flutter平台的WebView小部件,基于现有的包。

平台 状态 备注
Android SDK 20+
iOS SDK 9+
Web Any
Windows Win 7+
macOS Any
Linux Any

⚠: Linux和macOS平台需要更多的测试。

Quick Start

步骤1:添加依赖

在你的pubspec.yaml文件中添加webview_all作为依赖。

dependencies:
  flutter:
    sdk: flutter
  webview_all: ^latest_version # 替换为最新版本号

然后运行flutter pub get来安装依赖。

步骤2:使用它

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

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Webview All',
      debugShowCheckedModeBanner: false,
      home: MyBrowser(),
    );
  }
}

class MyBrowser extends StatefulWidget {
  const MyBrowser({Key? key, this.title}) : super(key: key);
  final String? title;

  @override
  _MyBrowserState createState() => _MyBrowserState();
}

class _MyBrowserState extends State<MyBrowser> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title ?? "Webview Example"),
        ),
        body: Center(
            // Look here!
            child: Webview(url: "https://www.wechat.com/en")));
  }
}

运行flutter run -d windows(或替换为其他目标平台),你将看到如下效果:

example

Detail

  • 在iOS上,Webview小部件由 WKWebView 支持。
  • 在Android上,Webview小部件由 WebView 支持。
  • 在Web平台上,Webview小部件将使用 webview_flutter_web 插件。
  • 在桌面端(Windows、macOS、Linux),Webview小部件将使用 webf 插件,并且只支持较简单的网页。

以上是关于webview_all的基本介绍和快速入门指南。如果你有更复杂的需求或者遇到了问题,请参考官方文档获取更多信息。


更多关于Flutter网页视图插件webview_all的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网页视图插件webview_all的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用webview_all插件来显示网页视图的一个基本示例。webview_all是一个功能强大的插件,允许你在Flutter应用中嵌入和显示网页内容。

首先,你需要在你的pubspec.yaml文件中添加webview_all依赖项:

dependencies:
  flutter:
    sdk: flutter
  webview_all: ^0.0.6  # 请检查最新版本号

然后,运行flutter pub get来安装依赖项。

接下来,你可以在你的Flutter项目中创建一个简单的页面来使用webview_all插件。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter WebView Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: WebViewExample(),
    );
  }
}

class WebViewExample extends StatefulWidget {
  @override
  _WebViewExampleState createState() => _WebViewExampleState();
}

class _WebViewExampleState extends State<WebViewExample> {
  late WebViewController _controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WebView Example'),
      ),
      body: WebView(
        initialUrl: 'https://www.google.com',  // 初始加载的URL
        javascriptMode: JavascriptMode.UNRESTRICTED,  // 允许JavaScript执行
        onWebViewCreated: (WebViewController webViewController) {
          _controller = webViewController;

          // 示例:加载网页完成后可以执行的代码
          _controller.loadUrl('https://www.flutter.dev');  // 后续可以加载其他URL

          // 监听网页加载完成
          _controller.addJavaScriptHandler(
            name: 'handleDartMessage',
            handler: (args) {
              print('Received message from JavaScript: $args');
              // 可以在这里处理从JavaScript传来的消息
            },
          );

          // 示例:注入JavaScript代码
          _controller.evaluateJavascript('''
            (function() {
              window.postMessage('Hello from Dart!');
            })();
          ''');
        },
        onPageFinished: (String url) {
          print('Page finished loading: $url');
        },
        navigationDelegate: (NavigationRequest request) {
          if (request.url.startsWith('https://www.unwanted-site.com')) {
            print('Blocking navigation to ${request.url}');
            return NavigationDecision.prevent;
          }
          return NavigationDecision.navigate;
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          // 示例:使用控制器执行某些操作,比如前进或后退
          await _controller.goBack();
          // await _controller.goForward();
          // await _controller.reload();
        },
        tooltip: 'Go back',
        child: Icon(Icons.arrow_back),
      ),
    );
  }
}

解释

  1. 依赖项

    • pubspec.yaml中添加webview_all依赖项。
  2. WebViewExample

    • 创建一个包含WebView的页面。
    • 使用WebView组件,并设置初始URL和其他参数,如javascriptMode
  3. WebViewController

    • onWebViewCreated回调中获取WebViewController实例,以便后续与WebView进行交互。
    • 示例:使用loadUrl方法加载另一个URL。
    • 示例:使用addJavaScriptHandler方法监听JavaScript消息。
    • 示例:使用evaluateJavascript方法注入并执行JavaScript代码。
  4. 导航委托

    • 使用navigationDelegate来拦截并处理导航请求,例如阻止访问某些URL。
  5. 浮动操作按钮

    • 使用浮动操作按钮执行WebView控制器的方法,例如后退。

请注意,由于插件的版本和API可能会随时间变化,建议查阅最新的webview_all文档和示例代码,以确保兼容性和最佳实践。

回到顶部