Flutter网页视图展示插件flutter_webview_pro的使用

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

Flutter WebView Pro 插件使用指南

flutter_webview_pro 是一个强大的 Flutter 插件,它提供了 WebView 组件,并且支持文件上传、相机拍照以及地理位置等功能。本文将详细介绍如何在 Flutter 项目中集成和使用 flutter_webview_pro

1. 安装插件

首先,在你的 pubspec.yaml 文件中添加 flutter_webview_pro 依赖:

dependencies:
  # 如果你使用的 Flutter 版本 >=2.5 并且 <2.8
  flutter_webview_pro: ^3.0.1+4
  
  # 如果你使用的 Flutter 版本 >=2.8
  flutter_webview_pro:
    git:
      url: https://github.com/wenzhiming/flutter-plugins.git
      ref: dev-3.0.4
      path: packages/webview_flutter/webview_flutter

然后运行以下命令来安装依赖:

flutter pub get

2. 导入插件

在需要使用 WebView 的 Dart 文件中导入插件:

import 'package:flutter_webview_pro/webview_flutter.dart';

3. 使用 WebView

接下来,我们可以通过创建一个 WebView 组件来展示网页内容。以下是一个简单的示例代码:

import 'package:flutter/material.dart';
import 'package:flutter_webview_pro/webview_flutter.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter WebView Example')),
        body: WebViewExample(),
      ),
    );
  }
}

class WebViewExample extends StatefulWidget {
  [@override](/user/override)
  _WebViewExampleState createState() => _WebViewExampleState();
}

class _WebViewExampleState extends State<WebViewExample> {
  final Completer<WebViewController> _controller = Completer<WebViewController>();

  [@override](/user/override)
  void initState() {
    super.initState();
    if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return WebView(
      initialUrl: 'https://www.example.com',
      javascriptMode: JavascriptMode.unrestricted,
      onWebViewCreated: (WebViewController webViewController) {
        _controller.complete(webViewController);
      },
      onProgress: (int progress) {
        print("WebView is loading (progress : $progress%)");
      },
      navigationDelegate: (NavigationRequest request) {
        if (request.url.startsWith('https://www.youtube.com/')) {
          print('Blocking navigation to $request}');
          return NavigationDecision.prevent;
        }
        print('Allowing navigation to $request');
        return NavigationDecision.navigate;
      },
      onPageStarted: (String url) {
        print('Page started loading: $url');
      },
      onPageFinished: (String url) {
        print('Page finished loading: $url');
      },
      gestureNavigationEnabled: true,
      geolocationEnabled: true, // 是否启用地理位置功能
    );
  }
}

示例说明:

  • initialUrl: 设置 WebView 初始加载的 URL。
  • javascriptMode: 设置 JavaScript 模式为 unrestricted,允许执行 JavaScript。
  • onWebViewCreated: 当 WebView 创建完成后回调,可以获取到 WebViewController 实例。
  • navigationDelegate: 控制页面跳转行为,例如阻止跳转到某些特定的 URL。
  • onPageStartedonPageFinished: 页面加载开始和结束时的回调函数。
  • geolocationEnabled: 是否启用地理位置功能。

Android 平台视图设置

该插件使用 Platform Views 来嵌入 Android 的 WebView 组件。有两种模式可以选择:Hybrid CompositionVirtual Display

使用 Hybrid Composition

这是当前默认的模式,适用于 Android SDK 19 及以上版本。你需要确保在 android/app/build.gradle 文件中设置了正确的 minSdkVersion

android {
    defaultConfig {
        minSdkVersion 19
    }
}

使用 Virtual Display

如果你选择使用 Virtual Display 模式,则需要设置 minSdkVersion 至少为 20,并在 initState() 方法中配置 WebView:

import 'dart:io';

import 'package:flutter_webview_pro/webview_flutter.dart';

class WebViewExample extends StatefulWidget {
  [@override](/user/override)
  WebViewExampleState createState() => WebViewExampleState();
}

class WebViewExampleState extends State<WebViewExample> {
  [@override](/user/override)
  void initState() {
    super.initState();
    if (Platform.isAndroid) WebView.platform = AndroidWebView();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return WebView(
      initialUrl: 'https://flutter.dev',
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 flutter_webview_pro 插件在 Flutter 应用中展示网页视图的示例代码。这个插件提供了许多高级功能,比如与 JavaScript 的交互、文件上传、下载等。这里是一个基础的展示网页视图的示例。

首先,确保你已经在 pubspec.yaml 文件中添加了 flutter_webview_pro 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_webview_pro: ^0.6.0  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

接下来,创建一个 Flutter 应用并展示一个 WebView。以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:flutter_webview_pro/flutter_webview_pro.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> {
  final WebViewController? _controller = WebViewController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter WebView Example'),
      ),
      body: WebView(
        initialUrl: 'https://www.example.com',
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController webViewController) {
          _controller!.complete(webViewController);
        },
        onPageFinished: (String url) {
          print('Page finished loading: $url');
        },
        gestureNavigationEnabled: true,
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          if (_controller!.value.canGoBack) {
            _controller!.goBack();
          } else {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('No back history!')),
            );
          }
        },
        tooltip: 'Go back',
        child: Icon(Icons.arrow_back),
      ),
    );
  }

  @override
  void dispose() {
    _controller!.dispose();
    super.dispose();
  }
}

代码解释

  1. 依赖添加:在 pubspec.yaml 中添加 flutter_webview_pro 依赖。

  2. 主应用MyApp 是一个简单的 Material 应用,设置了应用的主题和主页。

  3. WebView 页面WebViewExample 是一个有状态的 widget,它包含一个 WebView 和一个浮动操作按钮(FAB)。

  4. WebView 配置

    • initialUrl:初始加载的网页 URL。
    • javascriptMode:设置为 JavascriptMode.unrestricted 以允许 JavaScript 执行。
    • onWebViewCreated:当 WebView 创建完成时,将控制器完成。
    • onPageFinished:当页面加载完成时打印 URL。
    • gestureNavigationEnabled:启用手势导航(如滑动返回)。
  5. 浮动操作按钮:FAB 用于返回上一页。如果 WebView 没有上一页,则显示一个 snack bar 提示。

  6. 资源释放:在 dispose 方法中释放控制器资源。

注意事项

  • 确保 flutter_webview_pro 插件的最新版本与 Flutter SDK 兼容。
  • 在实际项目中,处理更多的事件和错误,比如加载错误、网络问题等。
  • 根据需求配置更多高级功能,比如与 JavaScript 的交互、文件上传等。

这个示例提供了一个基础的 WebView 集成方式,你可以根据需要进行扩展和自定义。

回到顶部