Flutter macOS内嵌网页视图插件flutter_inappwebview_macos的使用

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

Flutter macOS内嵌网页视图插件flutter_inappwebview_macos的使用

简介

flutter_inappwebview_macosflutter_inappwebview 插件在 Apple macOS 平台上的实现。它基于 macOS 的 WKWebView,允许你在 Flutter 应用中嵌入和控制网页视图。

使用方法

这个包是官方推荐的联合插件(endorsed federated plugin),这意味着你可以像使用其他普通的 flutter_inappwebview 一样使用它。当你在项目中添加 flutter_inappwebview 时,flutter_inappwebview_macos 会自动包含在你的应用中,因此你不需要在 pubspec.yaml 中显式添加它。

但是,如果你需要直接使用 flutter_inappwebview_macos 提供的 API,你应该在 pubspec.yaml 中添加它。

完整示例 Demo

以下是一个完整的示例代码,展示了如何在 macOS 上使用 flutter_inappwebview_macos 内嵌网页视图。

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

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

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

class _WebViewExampleState extends State<WebViewExample> {
  late InAppWebViewController _webViewController;
  final GlobalKey webViewKey = GlobalKey();

  double progress = 0;

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("InAppWebView Example"),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.refresh),
            onPressed: () {
              _webViewController.reload();
            },
          ),
        ],
      ),
      body: Column(
        children: <Widget>[
          progress < 1.0
              ? LinearProgressIndicator(value: progress)
              : Container(),
          Expanded(
            child: InAppWebView(
              key: webViewKey,
              initialUrlRequest: URLRequest(url: Uri.parse("https://www.example.com")),
              onWebViewCreated: (controller) {
                _webViewController = controller;
              },
              onLoadStart: (controller, url) {
                print("onLoadStart $url");
              },
              onLoadStop: (controller, url) {
                print("onLoadStop $url");
              },
              onProgressChanged: (controller, progress) {
                setState(() {
                  this.progress = progress / 100;
                });
              },
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter macOS项目中内嵌网页视图并使用flutter_inappwebview_macos插件的示例代码。这个示例将展示如何集成该插件并在Flutter应用中显示一个网页。

步骤 1: 添加依赖

首先,在你的pubspec.yaml文件中添加flutter_inappwebview及其macOS平台的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_inappwebview: ^5.3.2  # 请确保使用最新版本

dependency_overrides:
  flutter_inappwebview_macos: ^0.0.1+7  # 根据最新版本调整

dev_dependencies:
  flutter_test:
    sdk: flutter

步骤 2: 更新Podfile(对于iOS)

如果你还打算在iOS上使用此插件,需要确保你的Podfile中启用了对Swift和Objective-C混合使用的支持。不过,由于你的问题专注于macOS,此步骤可以跳过。

步骤 3: 创建Flutter应用并集成WebView

接下来,在你的Flutter应用中创建一个页面来使用flutter_inappwebview插件。

main.dart

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

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

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

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

class _WebViewExampleState extends State<WebViewExample> {
  InAppWebViewController? _webViewController;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Expanded(
          child: InAppWebView(
            initialUrlRequest: URLRequest(url: Uri.parse("https://www.flutter.dev")),
            onWebViewCreated: (InAppWebViewController controller) {
              _webViewController = controller;
            },
          ),
        ),
        ElevatedButton(
          onPressed: () async {
            if (_webViewController != null) {
              _webViewController!.loadUrl(
                urlRequest: URLRequest(url: Uri.parse("https://www.google.com")),
              );
            }
          },
          child: Text('Load Google'),
        ),
      ],
    );
  }

  @override
  void dispose() {
    _webViewController?.dispose();
    super.dispose();
  }
}

步骤 4: 运行应用

确保你的Flutter开发环境已经设置好,并且你的macOS设备已经连接(通常是在你的本地Mac上进行开发)。然后运行以下命令来构建和运行你的应用:

flutter clean
flutter pub get
flutter run -d macos

注意事项

  • 确保你的Flutter和Dart环境是最新的,以避免兼容性问题。
  • flutter_inappwebview插件可能会定期更新,所以请查阅其官方文档以获取最新的使用指南和API变更。
  • 在实际项目中,你可能需要处理更多的WebView事件和配置,比如JavaScript交互、错误处理等,这些都可以参考插件的文档和示例代码来实现。

这个示例展示了如何在Flutter macOS应用中集成并使用flutter_inappwebview_macos插件来显示一个网页,并提供了加载另一个URL的按钮功能。希望这对你有所帮助!

回到顶部