| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| import 'dart:typed_data'; |
| import 'dart:ui'; |
| |
| final Completer<bool> _completer = Completer<bool>(); |
| |
| Future<void> main() async { |
| channelBuffers.setListener('flutter/lifecycle', _lifecycle); |
| final bool success = await _completer.future; |
| final Uint8List? message = success ? null : Uint8List.fromList(const <int>[1]); |
| PlatformDispatcher.instance.sendPlatformMessage('finish', message?.buffer.asByteData(), null); |
| } |
| |
| Future<void> _lifecycle(ByteData? data, PlatformMessageResponseCallback? callback) async { |
| final String lifecycleState = String.fromCharCodes(data!.buffer.asUint8List()); |
| if (lifecycleState == AppLifecycleState.paused.toString()) { |
| await _testImage(); |
| } |
| } |
| |
| Future<void> _testImage() async { |
| // A single pixel image. |
| final Uint8List pixels = Uint8List.fromList(const <int>[0, 1, 2, 3]); |
| |
| // As long as we're using the GL backend, this will go down a path that uses |
| // a cross context image. |
| final Completer<Image> imageCompleter = Completer<Image>(); |
| decodeImageFromPixels( |
| pixels, |
| 1, |
| 1, |
| PixelFormat.rgba8888, |
| (Image image) { |
| imageCompleter.complete(image); |
| }, |
| ); |
| final Image image = await imageCompleter.future; |
| final PictureRecorder recorder = PictureRecorder(); |
| final Canvas canvas = Canvas(recorder); |
| canvas.drawImage(image, Offset.zero, Paint()); |
| final Picture picture = recorder.endRecording(); |
| final Image newImage = await picture.toImage(1, 1); |
| final ByteData imageData = (await newImage.toByteData())!; |
| final Uint32List newPixels = imageData.buffer.asUint32List(); |
| |
| if (pixels.buffer.asUint32List()[0] != newPixels[0]) { |
| print('Pixels do not match'); |
| print('original pixels: $pixels'); |
| print('new pixels: ${newPixels.buffer.asUint8List()}'); |
| _completer.complete(false); |
| } else { |
| print('Images are identical!'); |
| _completer.complete(true); |
| } |
| } |