From 5fd9e5bc0c89143487932e6522e50f377a8145cb Mon Sep 17 00:00:00 2001 From: Roman Cinis <52065414+tsinis@users.noreply.github.com> Date: Sun, 29 May 2022 19:02:23 +0200 Subject: [PATCH] Fix Flutter 3 Warnings --- flare_flutter/lib/flare_render_box.dart | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/flare_flutter/lib/flare_render_box.dart b/flare_flutter/lib/flare_render_box.dart index 753fc9c..a469c45 100644 --- a/flare_flutter/lib/flare_render_box.dart +++ b/flare_flutter/lib/flare_render_box.dart @@ -11,6 +11,14 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/scheduler.dart'; +/// This allows a value of type T or T? +/// to be treated as a value of type T?. +/// +/// We use this so that APIs that have become +/// non-nullable can still be used with `!` and `?` +/// to support older versions of the API as well. +T? _ambiguate(T? value) => value; + /// A render box for Flare content. abstract class FlareRenderBox extends RenderBox { static const double _notPlayingFlag = -1; @@ -164,10 +172,12 @@ abstract class FlareRenderBox extends RenderBox { if (isPlaying) { // Paint again if (_frameCallbackID != -1) { - SchedulerBinding.instance?.cancelFrameCallbackWithId(_frameCallbackID); + _ambiguate(SchedulerBinding.instance) + ?.cancelFrameCallbackWithId(_frameCallbackID); } - _frameCallbackID = - SchedulerBinding.instance?.scheduleFrameCallback(_beginFrame) ?? -1; + _frameCallbackID = _ambiguate(SchedulerBinding.instance) + ?.scheduleFrameCallback(_beginFrame) ?? + -1; } final Canvas canvas = context.canvas; @@ -269,7 +279,8 @@ abstract class FlareRenderBox extends RenderBox { } else { _lastFrameTime = _notPlayingFlag; if (_frameCallbackID != -1) { - SchedulerBinding.instance?.cancelFrameCallbackWithId(_frameCallbackID); + _ambiguate(SchedulerBinding.instance) + ?.cancelFrameCallbackWithId(_frameCallbackID); } } }