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)); }); }