| // Copyright 2014 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. |
| |
| // This file defines basic widgets for use in tests for Widgets in `flutter/widgets`. |
| |
| import 'package:flutter/widgets.dart'; |
| |
| /// Get a color for use in a widget test. |
| /// |
| /// The returned color will be fully opaque, |
| /// but the [Color.r], [Color.g], and [Color.b] channels |
| /// will vary sequentially based on index, cycling every sixth integer. |
| Color getTestColor(int index) { |
| const colors = [ |
| Color(0xFFFF0000), |
| Color(0xFF00FF00), |
| Color(0xFF0000FF), |
| Color(0xFFFFFF00), |
| Color(0xFFFF00FF), |
| Color(0xFF00FFFF), |
| ]; |
| |
| return colors[index % colors.length]; |
| } |
| |
| // TODO(justinmc): replace with `RawButton` or equivalent when available. |
| /// A very basic button for use in widget tests. |
| class TestButton extends StatelessWidget { |
| const TestButton({ |
| required this.child, |
| this.focusNode, |
| this.autofocus = false, |
| this.onPressed, |
| super.key, |
| }); |
| |
| final bool autofocus; |
| final FocusNode? focusNode; |
| final VoidCallback? onPressed; |
| final Widget child; |
| |
| @override |
| Widget build(BuildContext context) { |
| return Semantics( |
| button: true, |
| enabled: onPressed != null, |
| onTap: onPressed, |
| child: FocusableActionDetector( |
| enabled: onPressed != null, |
| focusNode: focusNode, |
| autofocus: autofocus, |
| child: GestureDetector(onTap: onPressed, child: child), |
| ), |
| ); |
| } |
| } |