Я пытаюсь понять часть этого кода ниже, которая использует SchedulerBinding.instance.scheduleFrameCallback(beginFrame);
. beginFrame
указан в другом блоке кода ниже.
Код берется из здесь , который является анимированной временной шкалой для Flutter . Я не ожидаю, что кто-нибудь прочтет все это, очевидно. Но учитывая некоторый контекст, вы можете понять, для чего он используется?
Контекст: эта часть кода находится внутри функции с именем setViewport
. Окно просмотра временной шкалы - это просто видимая часть этой временной шкалы. Таким образом, как только задан видовой экран (указаны точки start
и end
на временной шкале), он завершает анимацию чего-либо на временной шкале. Вы можете видеть, что в процессе этого он вызывает SchedulerBinding.instance.scheduleFrameCallback
, и я хочу знать, для чего он используется. Я, очевидно, зашел на страницу для SchedulerBinding , но объяснение настолько обобщенно c, что я не представляю, для чего он используется.
if (!animate) {
_renderStart = start;
_renderEnd = end;
advance(0.0, false);
if (onNeedPaint != null) {
onNeedPaint();
}
} else if (!_isFrameScheduled) {
_isFrameScheduled = true;
_lastFrameTime = 0.0;
SchedulerBinding.instance.scheduleFrameCallback(beginFrame);
}
Вот beginFrame:
/// Make sure that all the visible assets are being rendered and advanced
/// according to the current state of the timeline.
void beginFrame(Duration timeStamp) {
_isFrameScheduled = false;
final double t =
timeStamp.inMicroseconds / Duration.microsecondsPerMillisecond / 1000.0;
if (_lastFrameTime == 0.0) {
_lastFrameTime = t;
_isFrameScheduled = true;
SchedulerBinding.instance.scheduleFrameCallback(beginFrame);
return;
}
double elapsed = t - _lastFrameTime;
_lastFrameTime = t;
if (!advance(elapsed, true) && !_isFrameScheduled) {
_isFrameScheduled = true;
SchedulerBinding.instance.scheduleFrameCallback(beginFrame);
}
if (onNeedPaint != null) {
onNeedPaint();
}
}