Flutter屏幕录制插件wingetscreen的使用

简介

wingetscreen 是一个用于在 Windows 上捕获屏幕并保存 BMP 文件的 Flutter 插件。通过该插件,您可以轻松实现屏幕录制功能。


使用步骤

以下是一个完整的示例代码,展示如何使用 wingetscreen 插件进行屏幕录制并显示捕获的图像。


示例代码

main.dart

import 'dart:io';

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

import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:wingetscreen/wingetscreen.dart'; // 引入 wingetscreen 插件

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown'; // 记录平台版本信息
  Image? _capturedimage; // 存储捕获的图像

  [@override](/user/override)
  void initState() {
    initPlatformState(); // 初始化插件状态
    super.initState();
  }

  // 初始化插件状态
  Future<void> initPlatformState() async {
    String result;

    try {
      result = await Wingetscreen.rawBMPFile ?? 'Unknown platform version'; // 调用插件方法
    } on PlatformException {
      result = 'Failed'; // 捕获异常
    }

    if (!mounted) return; // 如果组件已从树中移除,返回
    setState(() {
      _platformVersion = result; // 更新平台版本信息
      _capturedimage = Image.file(File("sss.bmp"), fit: BoxFit.contain, width: 640, key: UniqueKey()); // 显示捕获的图像
    });
  }

  // 屏幕录制方法
  Future<void> capture() async {
    String result;

    try {
      result = await Wingetscreen.rawBMPFile ?? 'Unknown platform version'; // 调用插件方法
      print("capture()"); // 打印日志
    } on PlatformException {
      result = 'Failed'; // 捕获异常
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Screen Capture Example'), // 设置标题
        ),
        body: Column(
          children: [
            Text('测试插件:'), // 显示测试插件文本
            Text('消息:$_platformVersion\n'), // 显示平台版本信息
            _capturedimage ??
                Image.file(File("error.png"), fit: BoxFit.contain, width: 640), // 显示捕获的图像或错误图像
            ElevatedButton(
              onPressed: () async {
                await capture(); // 调用屏幕录制方法
                setState(() {
                  print("setState()"); // 打印日志
                  _capturedimage = Image.file(File("sss.bmp"), fit: BoxFit.contain, width: 640); // 更新显示的图像
                });
              },
              child: Text('开始录制'), // 按钮文本
              style: ElevatedButton.styleFrom(
                shadowColor: Colors.green,
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(12),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter屏幕录制插件wingetscreen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


wingetscreen 是一个用于在 Flutter 应用中实现屏幕录制的插件。它允许你捕获设备的屏幕内容并将其保存为视频文件。以下是如何在 Flutter 项目中使用 wingetscreen 插件的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 wingetscreen 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  wingetscreen: ^1.0.0  # 请使用最新版本

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

2. 导入插件

在你的 Dart 文件中导入 wingetscreen 插件。

import 'package:wingetscreen/wingetscreen.dart';

3. 初始化插件

在使用 wingetscreen 之前,你需要初始化它。

void initScreenRecorder() async {
  await WingetScreen.initialize();
}

4. 开始屏幕录制

你可以使用 startRecording 方法来开始屏幕录制。你需要指定输出文件的路径。

void startRecording() async {
  String outputPath = "/sdcard/record.mp4";  // 你可以根据需要更改路径
  await WingetScreen.startRecording(outputPath);
}

5. 停止屏幕录制

使用 stopRecording 方法来停止屏幕录制。

void stopRecording() async {
  await WingetScreen.stopRecording();
}

6. 检查录制状态

你可以使用 isRecording 方法来检查当前是否正在录制。

void checkRecordingStatus() async {
  bool isRecording = await WingetScreen.isRecording();
  print("Is recording: $isRecording");
}

7. 处理权限

屏幕录制需要特定的权限。你需要在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>

此外,你还需要在运行时请求这些权限。可以使用 permission_handler 插件来处理运行时权限。

8. 完整示例

以下是一个完整的示例,展示了如何在 Flutter 应用中使用 wingetscreen 插件进行屏幕录制。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScreenRecorderPage(),
    );
  }
}

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

class _ScreenRecorderPageState extends State<ScreenRecorderPage> {
  bool isRecording = false;

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

  void initScreenRecorder() async {
    await WingetScreen.initialize();
  }

  void startRecording() async {
    String outputPath = "/sdcard/record.mp4";
    await WingetScreen.startRecording(outputPath);
    setState(() {
      isRecording = true;
    });
  }

  void stopRecording() async {
    await WingetScreen.stopRecording();
    setState(() {
      isRecording = false;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Screen Recorder'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: isRecording ? null : startRecording,
              child: Text('Start Recording'),
            ),
            ElevatedButton(
              onPressed: isRecording ? stopRecording : null,
              child: Text('Stop Recording'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部