我知道从 flutter 应用程序分享的官方包。 https://pub.dartlang.org/packages/share
共享文本和 url 很容易,但我想共享来自服务器的图像意味着它是 URL 格式,所以可能首先我必须将 url 转换为图像,然后我必须将图像转换为 base64,然后我想我可以共享图像但我正在寻找简单的方法来共享图像+文本+网站。
如何使用官方分享包?还有其他维护良好的包吗?
官方的共享包在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',);
}
简单分享似乎就是您正在寻找的:
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!'),
),
],
),
),
);
}
}
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,
);
}