Flutter macOS WebView插件flutter_macos_webview的使用

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

Flutter macOS WebView插件 flutter_macos_webview 的使用

flutter_macos_webview 是一个用于在 macOS 平台上显示原生 WebView 的 Flutter 插件。通过这个插件,你可以在 macOS 应用中嵌入网页内容。

安装

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

dependencies:
  flutter_macos_webview: ^0.1.0

然后运行 flutter pub get 来安装插件。

示例代码

以下是一个完整的示例,展示了如何使用 flutter_macos_webview 插件来打开一个 WebView,并设置不同的展示样式(modal 或 sheet)。

完整的示例 Demo

import 'package:flutter/cupertino.dart';
import 'package:flutter_macos_webview/flutter_macos_webview.dart';

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

class App extends StatelessWidget {
  // 定义 WebView 打开按钮的回调函数
  Future<void> _onOpenPressed(PresentationStyle presentationStyle) async {
    final webview = FlutterMacOSWebView(
      onOpen: () => print('Opened'), // WebView 打开时的回调
      onClose: () => print('Closed'), // WebView 关闭时的回调
      onPageStarted: (url) => print('Page started: $url'), // 页面开始加载时的回调
      onPageFinished: (url) => print('Page finished: $url'), // 页面加载完成时的回调
      onWebResourceError: (err) {
        // 网页资源加载错误时的回调
        print(
          'Error: ${err.errorCode}, ${err.errorType}, ${err.domain}, ${err.description}',
        );
      },
    );

    // 打开 WebView
    await webview.open(
      url: 'https://google.com', // 要加载的 URL
      presentationStyle: presentationStyle, // 展示样式
      size: Size(400.0, 400.0), // WebView 的大小
      userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1', // 自定义 User-Agent
    );

    // 可选:延迟几秒后关闭 WebView
    // await Future.delayed(Duration(seconds: 5));
    // await webview.close();
  }

  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      debugShowCheckedModeBanner: false,
      home: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          // 按钮:以 modal 方式打开 WebView
          CupertinoButton(
            child: Text('Open as modal'),
            onPressed: () => _onOpenPressed(PresentationStyle.modal),
          ),
          SizedBox(height: 16.0),
          // 按钮:以 sheet 方式打开 WebView
          CupertinoButton(
            child: Text('Open as sheet'),
            onPressed: () => _onOpenPressed(PresentationStyle.sheet),
          ),
        ],
      ),
    );
  }
}

解释

  1. 导入插件

    import 'package:flutter_macos_webview/flutter_macos_webview.dart';
    
  2. 创建 WebView 实例

    • 使用 FlutterMacOSWebView 创建一个新的 WebView 实例。
    • 提供回调函数来处理 WebView 的生命周期事件,例如打开、关闭、页面加载开始和结束等。
  3. 打开 WebView

    • 使用 webview.open() 方法来打开 WebView。
    • 参数包括要加载的 URL、展示样式(modal 或 sheet)、WebView 的大小以及自定义的 User-Agent。
  4. 展示样式

    • PresentationStyle.modal:以模态窗口的形式展示 WebView。
    • PresentationStyle.sheet:以底部弹出表单的方式展示 WebView。
  5. 关闭 WebView

    • 你可以通过调用 webview.close() 方法来手动关闭 WebView。

总结

通过 flutter_macos_webview 插件,你可以轻松地在 macOS 应用中集成 WebView 功能。该插件提供了灵活的配置选项,允许你根据需求定制 WebView 的行为和外观。


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

1 回复

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


当然,以下是一个关于如何在Flutter macOS应用中使用flutter_macos_webview插件的示例代码。这个插件允许你在Flutter应用中嵌入一个WebView组件来显示网页内容。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_macos_webview: ^x.y.z  # 请替换为最新版本号

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

接下来,我们需要在macOS平台上进行一些特定的配置。打开ios/Runner/Info.plist(对于macOS应用,通常是macos/Runner/Info.plist,但注意flutter_macos_webview主要关注macOS平台,所以这里特指macOS的配置)并确保你的应用有权访问网络。通常,这不需要额外的配置,因为macOS应用默认允许网络访问。

然后,你可以在你的Flutter应用中创建并使用WebView。以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:flutter_macos_webview/flutter_macos_webview.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: WebViewDemo(),
    );
  }
}

class WebViewDemo extends StatefulWidget {
  @override
  _WebViewDemoState createState() => _WebViewDemoState();
}

class _WebViewDemoState extends State<WebViewDemo> {
  late WebViewController _controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WebView Demo'),
      ),
      body: WebView(
        initialUrl: 'https://flutter.dev',
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController webViewController) {
          _controller = webViewController;
        },
        onPageFinished: (String url) {
          print("Page finished loading: $url");
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          // 示例:在WebView中执行JavaScript代码
          String result = await _controller.evaluateJavascript('document.title');
          print('Page title is $result');
        },
        tooltip: 'Execute JS',
        child: Icon(Icons.code),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个WebView组件。这个WebView组件初始加载https://flutter.dev网页,并允许执行JavaScript代码。

  • WebView组件的initialUrl属性指定了要加载的初始URL。
  • javascriptMode属性设置为JavascriptMode.unrestricted以允许执行JavaScript。
  • onWebViewCreated回调允许我们获取WebViewController实例,这个实例可以用来控制WebView,例如执行JavaScript代码。
  • onPageFinished回调在页面加载完成时触发,这里我们简单地打印了加载完成的URL。

请确保你的开发环境已经正确配置了Flutter和Dart,并且你的macOS模拟器或物理设备已经连接并可用。运行这个Flutter应用,你应该能够看到一个包含WebView的窗口,它加载并显示了Flutter的官方网站。

这个示例应该能帮助你开始使用flutter_macos_webview插件。如果你有更具体的需求或问题,欢迎继续提问!

回到顶部