Flutter分享功能插件scrumlab_flutter_share的使用

Flutter分享功能插件scrumlab_flutter_share的使用

scrumlab_flutter_share 是一个用于在 Flutter 应用中实现文件与文本分享功能的插件。

重要提示(针对iOS)

如果你正在创建一个新的 Flutter 应用程序,你需要使用 flutter create -i swift 来创建你的应用(参见 [flutter/flutter#13422 (comment)])。否则,你可能会遇到以下错误信息:

=== BUILD TARGET flutter_inappbrowser OF PROJECT Pods WITH CONFIGURATION Debug ===
The "Swift Language Version" (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. Supported values are: 3.0, 4.0, 4.2. This setting can be set in the build settings editor.

如果仍然存在问题,你可以尝试编辑 iOS 的 Podfile,如下所示(参见 #15):

target 'Runner' do
  use_frameworks!  # required by simple_permission
  ...
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '4.0'  # required by simple_permission
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

如果你已经有了一个非 Swift 项目,可以参考此问题来解决这个问题:Friction adding swift plugin to objective-c project

使用方法

导入插件

import 'package:scrumlab_flutter_share/scrumlab_flutter_share.dart';

分享文本

// 分享文本
Share.text('我的文本标题', '这是要分享给其他应用程序的文本。', 'text/plain');

分享文件

// 分享文件
final ByteData bytes = await rootBundle.load('assets/image1.png');
await Share.file('scrumlab 图像', 'scrumlab.png', bytes.buffer.asUint8List(), 'image/png', text: '可选的文本。');

分享多个文件

// 分享多个文件
final ByteData bytes1 = await rootBundle.load('assets/image1.png');
final ByteData bytes2 = await rootBundle.load('assets/image2.png');
final ByteData bytes3 = await rootBundle.load('assets/addresses.csv');

await Share.files(
    'scrumlab 图像',
    {
        'scrumlab.png': bytes1.buffer.asUint8List(),
        'bluedan.png': bytes2.buffer.asUint8List(),
        'addresses.csv': bytes3.buffer.asUint8List(),
    },
    '*/*',
    text: '可选的文本。');

从 URL 分享文件

// 从 URL 分享文件
var request = await HttpClient().getUrl(Uri.parse('https://shop.scrumlab.com.br/media/image/6f/8f/af/amlog_transport-berwachung.jpg'));
var response = await request.close();
Uint8List bytes = await consolidateHttpClientResponseBytes(response);
await Share.file('SCRUMLAB AMLOG', 'amlog.jpg', bytes, 'image/jpg');

完整示例代码

以下是完整的示例代码,展示了如何在 Flutter 应用中使用 scrumlab_flutter_share 插件。

import 'dart:async';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:scrumlab_flutter_share/scrumlab_flutter_share.dart';

void main() => runApp(MaterialApp(
      home: MaterialApp(
        home: MyHomePage(),
      ),
    ));

class MyHomePage extends StatefulWidget {
  MyHomePage();

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

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('分享示例'),
        ),
        body: Container(
            padding: const EdgeInsets.all(20.0),
            child: ListView(
              children: <Widget>[
                MaterialButton(
                  child: Text('分享文本'),
                  onPressed: () async => await _shareText(),
                ),
                MaterialButton(
                  child: Text('分享图像'),
                  onPressed: () async => await _shareImage(),
                ),
                MaterialButton(
                  child: Text('分享图像集'),
                  onPressed: () async => await _shareImages(),
                ),
                MaterialButton(
                  child: Text('分享 CSV 文件'),
                  onPressed: () async => await _shareCSV(),
                ),
                MaterialButton(
                  child: Text('分享混合文件'),
                  onPressed: () async => await _shareMixed(),
                ),
                MaterialButton(
                  child: Text('从 URL 分享图像'),
                  onPressed: () async => await _shareImageFromUrl(),
                ),
                MaterialButton(
                  child: Text('分享声音文件'),
                  onPressed: () async => await _shareSound(),
                ),
              ],
            )));
  }

  Future<void> _shareText() async {
    try {
      Share.text('我的文本标题',
          '这是要分享给其他应用程序的文本。', 'text/plain');
    } catch (e) {
      print('错误: $e');
    }
  }

  Future<void> _shareImage() async {
    try {
      final ByteData bytes = await rootBundle.load('assets/image1.png');
      await Share.file('scrumlab 图像', 'scrumlab.png',
          bytes.buffer.asUint8List(), 'image/png',
          text: '可选的文本。');
    } catch (e) {
      print('错误: $e');
    }
  }

  Future<void> _shareImages() async {
    try {
      final ByteData bytes1 = await rootBundle.load('assets/image1.png');
      final ByteData bytes2 = await rootBundle.load('assets/image2.png');

      await Share.files(
          'scrumlab 图像',
          {
            'scrumlab.png': bytes1.buffer.asUint8List(),
            'bluedan.png': bytes2.buffer.asUint8List(),
          },
          'image/png');
    } catch (e) {
      print('错误: $e');
    }
  }

  Future<void> _shareCSV() async {
    try {
      final ByteData bytes = await rootBundle.load('assets/addresses.csv');
      await Share.file(
          '地址', 'addresses.csv', bytes.buffer.asUint8List(), 'text/csv');
    } catch (e) {
      print('错误: $e');
    }
  }

  Future<void> _shareMixed() async {
    try {
      final ByteData bytes1 = await rootBundle.load('assets/image1.png');
      final ByteData bytes2 = await rootBundle.load('assets/image2.png');
      final ByteData bytes3 = await rootBundle.load('assets/addresses.csv');

      await Share.files(
          'scrumlab 图像',
          {
            'scrumlab.png': bytes1.buffer.asUint8List(),
            'bluedan.png': bytes2.buffer.asUint8List(),
            'addresses.csv': bytes3.buffer.asUint8List(),
          },
          '*/*',
          text: '可选的文本。');
    } catch (e) {
      print('错误: $e');
    }
  }

  Future<void> _shareImageFromUrl() async {
    try {
      var request = await HttpClient().getUrl(Uri.parse(
          'https://shop.scrumlab.com.br/media/image/6f/8f/af/amlog_transport-berwachung.jpg'));
      var response = await request.close();
      Uint8List bytes = await consolidateHttpClientResponseBytes(response);
      await Share.file('SCRUMLAB AMLOG', 'amlog.jpg', bytes, 'image/jpg');
    } catch (e) {
      print('错误: $e');
    }
  }

  Future<void> _shareSound() async {
    try {
      final ByteData bytes = await rootBundle.load('assets/cat.mp3');
      await Share.file(
          '声音', 'cat.mp3', bytes.buffer.asUint8List(), 'audio/*');
    } catch (e) {
      print('错误: $e');
    }
  }
}

更多关于Flutter分享功能插件scrumlab_flutter_share的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


scrumlab_flutter_share 是一个用于在 Flutter 应用中实现分享功能的插件。它允许你分享文本、文件、图片等内容到其他应用程序。以下是如何使用 scrumlab_flutter_share 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  scrumlab_flutter_share: ^1.0.0

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

2. 导入插件

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

import 'package:scrumlab_flutter_share/scrumlab_flutter_share.dart';

3. 使用分享功能

scrumlab_flutter_share 插件提供了几种分享方法,以下是常见的使用示例:

分享文本

你可以使用 Share.share 方法来分享纯文本:

void shareText() async {
  try {
    await Share.share('Check out this awesome text!');
  } catch (e) {
    print('Error sharing text: $e');
  }
}

分享文件

你可以使用 Share.shareFiles 方法来分享文件:

void shareFile() async {
  try {
    await Share.shareFiles(['/path/to/your/file.txt'], text: 'Check out this file!');
  } catch (e) {
    print('Error sharing file: $e');
  }
}

分享图片

你可以使用 Share.shareFiles 方法来分享图片:

void shareImage() async {
  try {
    await Share.shareFiles(['/path/to/your/image.png'], text: 'Check out this image!');
  } catch (e) {
    print('Error sharing image: $e');
  }
}

4. 在 UI 中使用

你可以将上述方法绑定到按钮的 onPressed 事件上,以便用户点击按钮时触发分享功能:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Share Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: shareText,
                child: Text('Share Text'),
              ),
              ElevatedButton(
                onPressed: shareFile,
                child: Text('Share File'),
              ),
              ElevatedButton(
                onPressed: shareImage,
                child: Text('Share Image'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void shareText() async {
    try {
      await Share.share('Check out this awesome text!');
    } catch (e) {
      print('Error sharing text: $e');
    }
  }

  void shareFile() async {
    try {
      await Share.shareFiles(['/path/to/your/file.txt'], text: 'Check out this file!');
    } catch (e) {
      print('Error sharing file: $e');
    }
  }

  void shareImage() async {
    try {
      await Share.shareFiles(['/path/to/your/image.png'], text: 'Check out this image!');
    } catch (e) {
      print('Error sharing image: $e');
    }
  }
}
回到顶部