mocks_for_image_cache.dart 1.42 KB
Newer Older
1 2 3 4 5 6 7
// Copyright 2016 The Chromium 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:ui' as ui show Image;

8
import 'package:flutter/foundation.dart';
9
import 'package:flutter/painting.dart';
10 11

class TestImageInfo implements ImageInfo {
12
  const TestImageInfo(this.value, { this.image, this.scale });
13 14

  @override
15
  final ui.Image image;
16 17

  @override
18
  final double scale;
19 20 21 22 23 24 25

  final int value;

  @override
  String toString() => '$runtimeType($value)';
}

26
class TestImageProvider extends ImageProvider<int> {
27
  const TestImageProvider(this.key, this.imageValue, { this.image });
28
  final int key;
29
  final int imageValue;
30
  final ui.Image image;
31 32

  @override
33 34
  Future<int> obtainKey(ImageConfiguration configuration) {
    return new Future<int>.value(key);
35 36 37
  }

  @override
38 39
  ImageStreamCompleter load(int key) {
    return new OneFrameImageStreamCompleter(
40
      new SynchronousFuture<ImageInfo>(new TestImageInfo(imageValue, image: image))
41
    );
42 43 44
  }

  @override
45
  String toString() => '$runtimeType($key, $imageValue)';
46
}
47 48

Future<ImageInfo> extractOneFrame(ImageStream stream) {
49
  final Completer<ImageInfo> completer = new Completer<ImageInfo>();
50
  void listener(ImageInfo image, bool synchronousCall) {
51 52 53 54 55
    completer.complete(image);
    stream.removeListener(listener);
  }
  stream.addListener(listener);
  return completer.future;
56
}