63 lines
2.0 KiB
Dart
63 lines
2.0 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:island/models/post.dart';
|
|
import 'package:island/pods/config.dart';
|
|
import 'package:island/widgets/alert.dart';
|
|
import 'package:island/widgets/post/post_item_screenshot.dart';
|
|
import 'package:path_provider/path_provider.dart' show getTemporaryDirectory;
|
|
import 'package:screenshot/screenshot.dart';
|
|
import 'package:share_plus/share_plus.dart';
|
|
|
|
/// Shares a post as a screenshot image
|
|
Future<void> sharePostAsScreenshot(
|
|
BuildContext context,
|
|
WidgetRef ref,
|
|
SnPost post,
|
|
) async {
|
|
if (kIsWeb) return;
|
|
|
|
final screenshotController = ScreenshotController();
|
|
|
|
showLoadingModal(context);
|
|
await screenshotController
|
|
.captureFromWidget(
|
|
ProviderScope(
|
|
overrides: [
|
|
sharedPreferencesProvider.overrideWithValue(
|
|
ref.watch(sharedPreferencesProvider),
|
|
),
|
|
],
|
|
child: Directionality(
|
|
textDirection: TextDirection.ltr,
|
|
child: SizedBox(
|
|
width: 520,
|
|
child: PostItemScreenshot(item: post, isFullPost: true),
|
|
),
|
|
),
|
|
),
|
|
context: context,
|
|
pixelRatio: MediaQuery.of(context).devicePixelRatio,
|
|
delay: const Duration(seconds: 1),
|
|
)
|
|
.then((Uint8List? image) async {
|
|
if (image == null) return;
|
|
final directory = await getTemporaryDirectory();
|
|
final imagePath = await File('${directory.path}/image.png').create();
|
|
await imagePath.writeAsBytes(image);
|
|
|
|
if (!context.mounted) return;
|
|
hideLoadingModal(context);
|
|
final box = context.findRenderObject() as RenderBox?;
|
|
await Share.shareXFiles([
|
|
XFile(imagePath.path),
|
|
], sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size);
|
|
})
|
|
.catchError((err) {
|
|
if (context.mounted) hideLoadingModal(context);
|
|
showErrorAlert(err);
|
|
});
|
|
}
|