dynamic_intrinsics_test.dart 1.93 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4 5
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/rendering.dart';
6
import '../flutter_test_alternative.dart';
7 8 9 10 11 12 13 14 15 16 17

import 'rendering_tester.dart';

class RenderFixedSize extends RenderBox {
  double dimension = 100.0;

  void grow() {
    dimension *= 2.0;
    markNeedsLayout();
  }

18 19 20 21 22 23 24 25
  @override
  double computeMinIntrinsicWidth(double height) => dimension;
  @override
  double computeMaxIntrinsicWidth(double height) => dimension;
  @override
  double computeMinIntrinsicHeight(double width) => dimension;
  @override
  double computeMaxIntrinsicHeight(double width) => dimension;
26 27 28

  @override
  void performLayout() {
29
    size = Size.square(dimension);
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
  }
}

class RenderParentSize extends RenderProxyBox {
  RenderParentSize({ RenderBox child }) : super(child);

  @override
  bool get sizedByParent => true;

  @override
  void performResize() {
    size = constraints.biggest;
  }

  @override
  void performLayout() {
    child.layout(constraints);
  }
}

class RenderIntrinsicSize extends RenderProxyBox {
  RenderIntrinsicSize({ RenderBox child }) : super(child);

  @override
  void performLayout() {
    child.layout(constraints);
56
    size = Size(
57
      child.getMinIntrinsicWidth(double.infinity),
58
      child.getMinIntrinsicHeight(double.infinity),
59 60 61 62 63 64 65 66 67
    );
  }
}

void main() {
  test('Whether using intrinsics means you get hooked into layout', () {
    RenderBox root;
    RenderFixedSize inner;
    layout(
68 69 70
      root = RenderIntrinsicSize(
        child: RenderParentSize(
          child: inner = RenderFixedSize()
71 72
        )
      ),
73
      constraints: const BoxConstraints(
74 75 76
        minWidth: 0.0,
        minHeight: 0.0,
        maxWidth: 1000.0,
77 78
        maxHeight: 1000.0,
      ),
79 80 81 82 83 84 85 86
    );
    expect(root.size, equals(inner.size));

    inner.grow();
    pumpFrame();
    expect(root.size, equals(inner.size));
  });
}