diff --git a/.gitignore b/.gitignore
index 1ef5887..e613a81 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,7 +18,7 @@
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
-#.vscode/
+.vscode/settings.json
# Flutter/Dart/Pub related
**/doc/api/
diff --git a/lib/src/exporter.dart b/lib/src/exporter.dart
index d29742f..4e6f1f7 100644
--- a/lib/src/exporter.dart
+++ b/lib/src/exporter.dart
@@ -7,8 +7,19 @@ import 'package:screen_recorder/src/frame.dart';
class Exporter {
final List _frames = [];
+ Map framesMap = {};
void onNewFrame(Frame frame) {
_frames.add(frame);
+ onNewFrameAsync(frame, _frames.length - 1);
+ }
+
+ Future onNewFrameAsync(Frame frame, int index) async {
+ final bytes = await frame.image.toByteData(format: ui.ImageByteFormat.png);
+ if (bytes != null) {
+ framesMap[index] = RawFrame(16, bytes);
+ } else {
+ print('Skipped frame while enconding');
+ }
}
void clear() {
@@ -18,20 +29,7 @@ class Exporter {
bool get hasFrames => _frames.isNotEmpty;
Future?> exportFrames() async {
- if (_frames.isEmpty) {
- return null;
- }
- final bytesImages = [];
- for (final frame in _frames) {
- final bytesImage =
- await frame.image.toByteData(format: ui.ImageByteFormat.png);
- if (bytesImage != null) {
- bytesImages.add(RawFrame(16, bytesImage));
- } else {
- print('Skipped frame while enconding');
- }
- }
- return bytesImages;
+ return framesMap.values.toList();
}
Future?> exportGif() async {
diff --git a/test/screen_recorder_test.dart b/test/screen_recorder_test.dart
index eb427ff..d3f2090 100644
--- a/test/screen_recorder_test.dart
+++ b/test/screen_recorder_test.dart
@@ -2,11 +2,6 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:screen_recorder/screen_recorder.dart';
class CustomExporter extends Exporter {
- @override
- Future?> export() {
- throw UnimplementedError();
- }
-
@override
void onNewFrame(Frame frame) {}
}
@@ -20,6 +15,6 @@ void main() {
final exporter = CustomExporter();
final scrennRecorder = ScreenRecorderController(exporter: exporter);
- expect(scrennRecorder._exporter, equals(exporter));
+ expect(scrennRecorder.exporter, equals(exporter));
});
}