Skip to content

Commit

Permalink
Merge pull request SachinGanesh#104 from rignaneseleo/master
Browse files Browse the repository at this point in the history
Fix memory leak
  • Loading branch information
ritheshSalyan authored Jun 5, 2022
2 parents 34ea076 + c27a4d6 commit df7fa9e
Showing 1 changed file with 18 additions and 9 deletions.
27 changes: 18 additions & 9 deletions lib/screenshot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ library screenshot;
// import 'dart:io';
import 'dart:async';
import 'dart:typed_data';

// import 'package:path_provider/path_provider.dart';
import 'dart:ui' as ui;

Expand All @@ -19,6 +20,7 @@ import 'src/platform_specific/file_manager/file_manager.dart';
///
class ScreenshotController {
late GlobalKey _containerKey;

ScreenshotController() {
_containerKey = GlobalKey();
}
Expand Down Expand Up @@ -52,6 +54,8 @@ class ScreenshotController {
);
ByteData? byteData =
await image?.toByteData(format: ui.ImageByteFormat.png);
image?.dispose();

Uint8List? pngBytes = byteData?.buffer.asUint8List();

return pngBytes;
Expand Down Expand Up @@ -100,26 +104,25 @@ class ScreenshotController {
double? pixelRatio,
BuildContext? context,
Size? targetSize,

}) async {
ui.Image image = await widgetToUiImage(widget,
ui.Image image = await widgetToUiImage(widget,
delay: delay,
pixelRatio: pixelRatio,
context: context,
targetSize: targetSize);
final ByteData? byteData =
await image.toByteData(format: ui.ImageByteFormat.png);
image.dispose();

return byteData!.buffer.asUint8List();
}


static Future<ui.Image> widgetToUiImage(
Widget widget, {
Duration delay: const Duration(seconds: 1),
double? pixelRatio,
BuildContext? context,
Size? targetSize,
Size? targetSize,
}) async {
///
///Retry counter
Expand All @@ -136,18 +139,24 @@ class ScreenshotController {
///
child = InheritedTheme.captureAll(
context,
MediaQuery(data: MediaQuery.of(context), child: Material(child:child,color: Colors.transparent, )),
MediaQuery(
data: MediaQuery.of(context),
child: Material(
child: child,
color: Colors.transparent,
)),
);
}

final RenderRepaintBoundary repaintBoundary = RenderRepaintBoundary();
final RenderRepaintBoundary repaintBoundary = RenderRepaintBoundary();

Size logicalSize = targetSize ??
ui.window.physicalSize / ui.window.devicePixelRatio; // Adapted
Size imageSize = targetSize ?? ui.window.physicalSize; // Adapted

assert(logicalSize.aspectRatio.toStringAsPrecision(5) ==
imageSize.aspectRatio.toStringAsPrecision(5)); // Adapted (toPrecision was not available)
imageSize.aspectRatio
.toStringAsPrecision(5)); // Adapted (toPrecision was not available)

final RenderView renderView = RenderView(
window: ui.window,
Expand Down Expand Up @@ -238,14 +247,14 @@ class ScreenshotController {
} while (isDirty && retryCounter >= 0);


return image; // Adapted to directly return the image and not the Uint8List
return image; // Adapted to directly return the image and not the Uint8List
}
}

class Screenshot<T> extends StatefulWidget {
final Widget? child;
final ScreenshotController controller;

const Screenshot({
Key? key,
required this.child,
Expand Down

0 comments on commit df7fa9e

Please sign in to comment.