| // 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. |
| |
| import 'package:flutter/foundation.dart'; |
| |
| /// A task priority, as passed to [SchedulerBinding.scheduleTask]. |
| @immutable |
| class Priority { |
| const Priority._(this._value); |
| |
| /// Integer that describes this Priority value. |
| int get value => _value; |
| final int _value; |
| |
| /// A task to run after all other tasks, when no animations are running. |
| static const Priority idle = Priority._(0); |
| |
| /// A task to run even when animations are running. |
| static const Priority animation = Priority._(100000); |
| |
| /// A task to run even when the user is interacting with the device. |
| static const Priority touch = Priority._(200000); |
| |
| /// Maximum offset by which to clamp relative priorities. |
| /// |
| /// It is still possible to have priorities that are offset by more |
| /// than this amount by repeatedly taking relative offsets, but that |
| /// is generally discouraged. |
| static const int kMaxOffset = 10000; |
| |
| /// Returns a priority relative to this priority. |
| /// |
| /// A positive [offset] indicates a higher priority. |
| /// |
| /// The parameter [offset] is clamped to ±[kMaxOffset]. |
| Priority operator +(int offset) { |
| if (offset.abs() > kMaxOffset) { |
| // Clamp the input offset. |
| offset = kMaxOffset * offset.sign; |
| } |
| return Priority._(_value + offset); |
| } |
| |
| /// Returns a priority relative to this priority. |
| /// |
| /// A positive offset indicates a lower priority. |
| /// |
| /// The parameter [offset] is clamped to ±[kMaxOffset]. |
| Priority operator -(int offset) => this + (-offset); |
| } |