blob: a83bb1a88412d35c8f055bfa01ec21dd355ca3e5 [file] [log] [blame]
// Copyright 2019 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.
import 'package:cocoon_common/task_status.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
typedef ShowSnackBarCallback =
ScaffoldFeatureController<SnackBar, SnackBarClosedReason> Function(
SnackBar snackBar,
);
class TaskBox extends StatelessWidget {
const TaskBox({super.key, this.cellSize, required this.child});
final Widget child;
final double? cellSize;
static const double _kDefaultCellSize = 20;
static const double _kWebCellSize = 36;
/// A lookup table to define the background color for this TaskBox.
///
/// The status messages are based on the messages the backend sends.
///
/// These colors should map to the MILO color scheme.
static final statusColor = {
TaskStatus.cancelled: Colors.lightBlue,
TaskStatus.failed: Colors.red,
TaskStatus.waitingForBackfill: Colors.grey,
TaskStatus.skipped: Colors.grey.shade800,
TaskStatus.succeeded: Colors.green,
TaskStatus.infraFailure: Colors.purple,
TaskStatus.inProgress: Colors.yellow,
};
static const statusColorFailedAndRerunning = Color(0xFF8A3324);
static final statusColorInProgressButQueued = Colors.yellow.shade200;
/// Returns the cell size of the nearest task box, or null if there is no
/// nearest task box.
static double? maybeOf(BuildContext context) {
final box = context.dependOnInheritedWidgetOfExactType<_TaskBox>();
return box?.size;
}
/// Returns the cell size of the nearest task box.
static double of(BuildContext context) {
return maybeOf(context) ?? _kDefaultCellSize;
}
@override
Widget build(BuildContext context) {
final size = cellSize ?? (kIsWeb ? _kWebCellSize : _kDefaultCellSize);
return _TaskBox(size: TaskBox.maybeOf(context) ?? size, child: child);
}
}
class _TaskBox extends InheritedWidget {
const _TaskBox({required this.size, required super.child});
final double size;
@override
bool updateShouldNotify(covariant _TaskBox oldWidget) =>
size != oldWidget.size;
}