Flutter屏幕截图与分享插件native_screenshot_and_share的使用

Flutter屏幕截图与分享插件native_screenshot_and_share的使用

该插件适用于Android和iOS平台。

依赖项

pubspec.yaml文件中添加以下依赖项:

dependencies:
  flutter_native_screenshot: ^1.1.2
  share_plus: 4.5.0
  path_provider: 2.0.5
  permission_handler: 8.3.0

安装

  1. 打开pubspec.yaml文件,并在dependencies部分内添加以下行:

    native_screenshot_and_share: ^<latest_version>
    

    注意:请将<latest_version>替换为该插件的最新版本号。

  2. Android平台

    AndroidManifest.xml文件中添加以下权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    

    同时,在<application>标签中添加以下属性:

    android:requestLegacyExternalStorage="true"
    
  3. iOS平台

    Info.plist文件中添加以下权限描述:

    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>用于保存截图到照片库。</string>
    

使用方法

  1. 导入插件包:

    import 'package:native_screenshot_and_share/native_screenshot_and_share.dart';
    
  2. 调用函数进行截图并分享。通常在按钮点击事件中调用:

    await Screenshot(context).shareScreenShot();
    

示例代码

以下是完整的示例代码,展示了如何使用该插件来实现屏幕截图和分享功能。

import 'package:flutter/material.dart';
import 'package:native_screenshot_and_share/native_screenshot_and_share.dart';
import 'package:video_player/video_player.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const MyHomePage(title: '截图并分享'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String title;

  const MyHomePage({Key? key, required this.title}) : super(key: key);

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late VideoPlayerController _controller;
  final String videoUrl =
      "https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4";

  [@override](/user/override)
  void initState() {
    // 初始化视频控制器
    _controller = VideoPlayerController.network(videoUrl)
      ..initialize().then((_) => setState(() {}));
    super.initState();
  }

  Widget _playPauseButton() {
    final bool isPlaying = _controller.value.isPlaying;
    return Padding(
      padding: const EdgeInsets.only(left: 30.0),
      child: FloatingActionButton(
        child: Icon(isPlaying ? Icons.pause : Icons.play_arrow),
        onPressed: () {
          setState(() {
            isPlaying ? _controller.pause() : _controller.play();
          });
        },
      ),
    );
  }

  Widget _screenshotAndShareButton() {
    return FloatingActionButton(
      onPressed: () async {
        await Screenshot(context).shareScreenShot();
      },
      child: Stack(
        children: const [
          Icon(
            Icons.camera,
            size: 50,
          ),
          Icon(
            Icons.share,
            color: Colors.blueGrey,
            size: 50,
          )
        ],
      ),
    );
  }

  Widget _floatingActionButton() {
    return Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        _playPauseButton(),
        _screenshotAndShareButton(),
      ],
    );
  }

  Widget _body() {
    return SingleChildScrollView(
      child: Column(
        children: [
          const Text('网络视频'),
          AspectRatio(
            aspectRatio: _controller.value.aspectRatio,
            child: VideoPlayer(_controller),
          ),
        ],
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        appBar: AppBar(title: Text(widget.title)),
        body: _body(),
        floatingActionButton: _floatingActionButton(),
      ),
    );
  }
}

更多关于Flutter屏幕截图与分享插件native_screenshot_and_share的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter屏幕截图与分享插件native_screenshot_and_share的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


native_screenshot_and_share 是一个 Flutter 插件,它允许你捕获当前屏幕的截图并将其分享到其他应用程序。以下是如何使用这个插件的详细步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  native_screenshot_and_share: ^1.0.0  # 请确保使用最新版本

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

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:native_screenshot_and_share/native_screenshot_and_share.dart';

3. 捕获屏幕截图并分享

你可以使用 NativeScreenshotAndShare.takeScreenshotAndShare() 方法来捕获屏幕截图并立即分享它。这个方法会返回一个 Future<String?>,表示截图文件的路径(如果成功的话)。

以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Screenshot and Share Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 捕获屏幕截图并分享
              String? screenshotPath = await NativeScreenshotAndShare.takeScreenshotAndShare();
              if (screenshotPath != null) {
                print('Screenshot saved at: $screenshotPath');
              } else {
                print('Failed to take screenshot');
              }
            },
            child: Text('Take Screenshot and Share'),
          ),
        ),
      ),
    );
  }
}

4. 运行你的应用

运行你的 Flutter 应用,点击按钮即可捕获屏幕截图并分享它。

5. 处理权限

在某些设备上,捕获屏幕截图可能需要特定的权限。确保你在 AndroidManifest.xmlInfo.plist 文件中添加了必要的权限。

Android

AndroidManifest.xml 中添加以下权限:

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

iOS

Info.plist 中添加以下键值对:

<key>NSPhotoLibraryAddUsageDescription</key>
<string>We need access to save screenshots to your photo library.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to save screenshots to your photo library.</string>

6. 处理异常

在实际使用中,可能会遇到一些异常情况,比如用户拒绝了权限请求或者截图失败。你可以使用 try-catch 来捕获这些异常并进行处理:

onPressed: () async {
  try {
    String? screenshotPath = await NativeScreenshotAndShare.takeScreenshotAndShare();
    if (screenshotPath != null) {
      print('Screenshot saved at: $screenshotPath');
    } else {
      print('Failed to take screenshot');
    }
  } catch (e) {
    print('Error: $e');
  }
},

7. 自定义分享内容

如果你想自定义分享的内容,可以在捕获截图后使用 share 包来分享文件:

import 'package:share/share.dart';

onPressed: () async {
  try {
    String? screenshotPath = await NativeScreenshotAndShare.takeScreenshot();
    if (screenshotPath != null) {
      await Share.shareFiles([screenshotPath], text: 'Check out this screenshot!');
    } else {
      print('Failed to take screenshot');
    }
  } catch (e) {
    print('Error: $e');
  }
},
回到顶部