在flutter中分享图片+文字+url的便捷方式

问题描述 投票:0回答:3

我知道从 flutter 应用程序分享的官方包。 https://pub.dartlang.org/packages/share

共享文本和 url 很容易,但我想共享来自服务器的图像意味着它是 URL 格式,所以可能首先我必须将 url 转换为图像,然后我必须将图像转换为 base64,然后我想我可以共享图像但我正在寻找简单的方法来共享图像+文本+网站。

如何使用官方分享包?还有其他维护良好的包吗?

dart flutter share
3个回答
5
投票

官方的共享包在v0.6.5中添加了对共享文件的支持,因此现在您可以将图像保存到文件并共享该文件。请参阅下面的示例,其中包含从互联网下载的图像:

import 'package:http/http.dart';
import 'package:share/share.dart';
import 'package:path_provider/path_provider.dart';

void shareImage() async {
    final response = await get(imageUrl);
    final bytes = response.bodyBytes;
    final Directory temp = await getTemporaryDirectory();
    final File imageFile = File('${temp.path}/tempImage');
    imageFile.writeAsBytesSync(response.bodyBytes);
    Share.shareFiles(['${temp.path}/tempImage'], text: 'text to share',);
}

2
投票

简单分享似乎就是您正在寻找的:

    import 'package:flutter/material.dart';
    import 'package:file_picker/file_picker.dart';
    import 'package:simple_share/simple_share.dart';
    import 'package:flutter/services.dart';

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

    class SimpleShareApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            showPerformanceOverlay: false,
            title: 'Simple Share App',
            home: MyHomePage()
        );
      }
    }

    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => new _MyHomePageState();
    }

    class _MyHomePageState extends State<MyHomePage> {
      Future<String> getFilePath() async {
        try {
          String filePath = await FilePicker.getFilePath(type: FileType.ANY);
          if (filePath == '') {
            return "";
          }
          print("File path: " + filePath);
          return filePath;
        } on PlatformException catch (e) {
          print("Error while picking the file: " + e.toString());
          return null;
        }
      }

      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text('File Picker Example'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                RaisedButton(
                  onPressed: () {
                    SimpleShare.share(
                      title: "Share my message",
                      msg:
                          "Lorem ipsum dolor sit amet, consectetur adipisci elit, sed eiusmod " +
                              "tempor incidunt ut labore et dolore magna aliqua.",
                    );
                  },
                  child: Text('Share text!'),
                ),
                RaisedButton(
                  onPressed: () async {
                    final path = await getFilePath();
                    if (path != null && path.isNotEmpty) {
                      final uri = Uri.file(path);
                      SimpleShare.share(
                          uri: uri.toString(),
                          title: "Share my file",
                          msg: "My message");
                    }
                  },
                  child: Text('Share file!'),
                ),
              ],
            ),
          ),
        );
      }
    }

来源


0
投票

pubspec.yaml 依赖项:

share_plus: 7.1.0
path_provider: 2.1.0
http: 0.13.5

功能

import 'dart:io';

import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';

Future<void> shareNetworkImage(String imageUrl, String text) async {
  final http.Response response = await http.get(Uri.parse(imageUrl));
  final Directory directory = await getTemporaryDirectory();
  final File file = await File('${directory.path}/Image.png').writeAsBytes(response.bodyBytes);
  await Share.shareXFiles(
    [
      XFile(file.path),
    ],
    text: text,
  );
}
© www.soinside.com 2019 - 2024. All rights reserved.