mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

This makes HeroController ignore StateRoutes when deciding where to animate heroes to and from.
49 lines
1.6 KiB
Dart
49 lines
1.6 KiB
Dart
// Copyright 2015 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 'package:flutter/material.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
bool _hasAncestorOfType(Element element, Type targetType) {
|
|
expect(element, isNotNull);
|
|
bool result = false;
|
|
element.visitAncestorElements((Element ancestor) {
|
|
if (ancestor.widget.runtimeType == targetType) {
|
|
result = true;
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
return result;
|
|
}
|
|
|
|
class _IsOnStage extends Matcher {
|
|
const _IsOnStage();
|
|
bool matches(item, Map matchState) => !_hasAncestorOfType(item, OffStage);
|
|
Description describe(Description description) => description.add('onstage');
|
|
}
|
|
|
|
class _IsOffStage extends Matcher {
|
|
const _IsOffStage();
|
|
bool matches(item, Map matchState) => _hasAncestorOfType(item, OffStage);
|
|
Description describe(Description description) => description.add('offstage');
|
|
}
|
|
|
|
class _IsInCard extends Matcher {
|
|
const _IsInCard();
|
|
bool matches(item, Map matchState) => _hasAncestorOfType(item, Card);
|
|
Description describe(Description description) => description.add('in card');
|
|
}
|
|
|
|
class _IsNotInCard extends Matcher {
|
|
const _IsNotInCard();
|
|
bool matches(item, Map matchState) => !_hasAncestorOfType(item, Card);
|
|
Description describe(Description description) => description.add('not in card');
|
|
}
|
|
|
|
const Matcher isOnStage = const _IsOnStage();
|
|
const Matcher isOffStage = const _IsOffStage();
|
|
const Matcher isInCard = const _IsInCard();
|
|
const Matcher isNotInCard = const _IsNotInCard();
|