1// Copyright 2014 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5import 'dart:async';
6import 'dart:ui' as ui;
7
8import 'package:flutter/material.dart';
9import 'package:flutter_test/flutter_test.dart';
10import 'package:integration_test/integration_test.dart';
11
12// This class allows loadImage, a protected method, to be called with a custom
13// ImageDecoderCallback function.
14class LoadTestImageProvider extends ImageProvider<Object> {
15 LoadTestImageProvider(this.provider);
16
17 final ImageProvider provider;
18
19 ImageStreamCompleter testLoad(Object key, ImageDecoderCallback decode) {
20 return provider.loadImage(key, decode);
21 }
22
23 @override
24 Future<Object> obtainKey(ImageConfiguration configuration) {
25 throw UnimplementedError();
26 }
27
28 @override
29 ImageStreamCompleter loadImage(Object key, ImageDecoderCallback decode) {
30 throw UnimplementedError();
31 }
32}
33
34void main() {
35 IntegrationTestWidgetsFlutterBinding.ensureInitialized();
36
37 testWidgets('Image.network uses cacheWidth and cacheHeight', (WidgetTester tester) async {
38 const int expectedCacheHeight = 9;
39 const int expectedCacheWidth = 11;
40 await tester.pumpAndSettle();
41
42 final Image image = Image.network(
43 'assets/packages/flutter_gallery_assets/assets/icons/material/material.png',
44 cacheHeight: 9,
45 cacheWidth: 11,
46 );
47
48 bool called = false;
49
50 Future<ui.Codec> decode(
51 ui.ImmutableBuffer buffer, {
52 ui.TargetImageSizeCallback? getTargetSize,
53 }) {
54 return PaintingBinding.instance.instantiateImageCodecWithSize(
55 buffer,
56 getTargetSize: (int intrinsicWidth, int intrinsicHeight) {
57 expect(getTargetSize, isNotNull);
58 final ui.TargetImageSize targetSize = getTargetSize!(intrinsicWidth, intrinsicHeight);
59 expect(targetSize.width, expectedCacheWidth);
60 expect(targetSize.height, expectedCacheHeight);
61 called = true;
62 return targetSize;
63 },
64 );
65 }
66
67 final ImageProvider resizeImage = image.image;
68 expect(image.image, isA<ResizeImage>());
69
70 final LoadTestImageProvider testProvider = LoadTestImageProvider(image.image);
71 final ImageStreamCompleter streamCompleter = testProvider.testLoad(
72 await resizeImage.obtainKey(ImageConfiguration.empty),
73 decode,
74 );
75
76 final Completer<void> completer = Completer<void>();
77 int? imageInfoCachedWidth;
78 int? imageInfoCachedHeight;
79 streamCompleter.addListener(
80 ImageStreamListener((ImageInfo imageInfo, bool syncCall) {
81 imageInfoCachedWidth = imageInfo.image.width;
82 imageInfoCachedHeight = imageInfo.image.height;
83 completer.complete();
84 }),
85 );
86 await completer.future;
87
88 expect(imageInfoCachedHeight, isNotNull);
89 expect(imageInfoCachedHeight, expectedCacheHeight);
90 expect(imageInfoCachedWidth, isNotNull);
91 expect(imageInfoCachedWidth, expectedCacheWidth);
92 expect(called, true);
93 });
94}
95

Provided by KDAB

Privacy Policy
Learn more about Flutter for embedded and desktop on industrialflutter.com