diff --git a/lib/animations/animation_builder.dart b/lib/animations/animation_builder.dart index 083b4070..d87712a1 100644 --- a/lib/animations/animation_builder.dart +++ b/lib/animations/animation_builder.dart @@ -25,8 +25,9 @@ class AnimationBuilder { } MorphAnimationData build() { - if (availableMorphs.isEmpty == 0 || _duration == 0 || _frameLengthInMs == 0) + if (availableMorphs.isEmpty || _duration == 0 || _frameLengthInMs == 0) { throw Exception(); + } int numFrames = _duration * 1000 ~/ _frameLengthInMs; @@ -64,10 +65,10 @@ class AnimationBuilder { AnimationBuilder interpolateMorphWeights( double start, double end, double startValue, double endValue) { - this._interpMorphStart = start; - this._interpMorphEnd = end; - this._interpMorphStartValue = startValue; - this._interpMorphEndValue = endValue; + _interpMorphStart = start; + _interpMorphEnd = end; + _interpMorphStartValue = startValue; + _interpMorphEndValue = endValue; return this; } @@ -124,7 +125,7 @@ class AnimationBuilder { // _BoneAnimationDatas!.add(DartBoneAnimationData([boneName], [meshName], animData)); - return this; + // return this; } } diff --git a/lib/filament_controller.dart b/lib/filament_controller.dart index d9c52430..4b5825b7 100644 --- a/lib/filament_controller.dart +++ b/lib/filament_controller.dart @@ -234,7 +234,7 @@ abstract class FilamentController { Future rotateEnd(); /// - /// Set the weights for all morph targets under node [meshName] in [asset] to [weights]. + /// Set the weights for all morph targets under node [meshName] in [entity] to [weights]. /// Future setMorphTargetWeights( FilamentEntity entity, String meshName, List weights); @@ -269,7 +269,7 @@ abstract class FilamentController { /// /// Removes/destroys the specified entity from the scene. - /// [asset] will no longer be a valid handle after this method is called; ensure you immediately discard all references once this method is complete. + /// [entity] will no longer be a valid handle after this method is called; ensure you immediately discard all references once this method is complete. /// Future removeAsset(FilamentEntity entity); @@ -295,7 +295,7 @@ abstract class FilamentController { Future zoomEnd(); /// - /// Schedules the glTF animation at [index] in [asset] to start playing on the next frame. + /// Schedules the glTF animation at [index] in [entity] to start playing on the next frame. /// Future playAnimation(FilamentEntity entity, int index, {bool loop = false, @@ -308,7 +308,7 @@ abstract class FilamentController { Future stopAnimation(FilamentEntity entity, int animationIndex); /// - /// Sets the current scene camera to the glTF camera under [name] in [asset]. + /// Sets the current scene camera to the glTF camera under [name] in [entity]. /// Future setCamera(FilamentEntity entity, String? name); @@ -358,7 +358,7 @@ abstract class FilamentController { Future getCameraRotation(); /// - /// Repositions the camera to the last vertex of the bounding box of [asset], looking at the penultimate vertex. + /// Repositions the camera to the last vertex of the bounding box of [entity], looking at the penultimate vertex. /// Future moveCameraToAsset(FilamentEntity entity); @@ -390,12 +390,12 @@ abstract class FilamentController { FilamentEntity entity, String meshName, int materialIndex, Color color); /// - /// Scale [asset] to fit within the unit cube. + /// Scale [entity] to fit within the unit cube. /// Future transformToUnitCube(FilamentEntity entity); /// - /// Sets the world space position for [asset] to the given coordinates. + /// Sets the world space position for [entity] to the given coordinates. /// Future setPosition(FilamentEntity entity, double x, double y, double z); diff --git a/lib/filament_controller_ffi.dart b/lib/filament_controller_ffi.dart index 6516ab09..9a8dc411 100644 --- a/lib/filament_controller_ffi.dart +++ b/lib/filament_controller_ffi.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'dart:ffi'; import 'dart:io'; -import 'dart:typed_data'; import 'dart:ui' as ui; +import 'dart:developer' as dev; import 'package:flutter/services.dart'; import 'package:ffi/ffi.dart'; import 'package:flutter/widgets.dart'; @@ -69,7 +69,7 @@ class FilamentControllerFFI extends FilamentController { _resizingWidth = call.arguments[0]; _resizingHeight = call.arguments[1]; _resizeTimer = Timer(const Duration(milliseconds: 500), () async { - this.rect.value = Offset.zero & + rect.value = Offset.zero & ui.Size(_resizingWidth!.toDouble(), _resizingHeight!.toDouble()); await resize(); }); @@ -115,10 +115,10 @@ class FilamentControllerFFI extends FilamentController { } @override - Future setDimensions(Rect rect, double ratio) async { + Future setDimensions(Rect rect, double pixelRatio) async { this.rect.value = Rect.fromLTWH(rect.left, rect.top, rect.width * _pixelRatio, rect.height * _pixelRatio); - _pixelRatio = ratio; + _pixelRatio = pixelRatio; } @override @@ -147,7 +147,7 @@ class FilamentControllerFFI extends FilamentController { await _channel.invokeMethod( "destroyTexture", textureDetails.value!.textureId); } - print("Texture destroyed"); + dev.log("Texture destroyed"); } /// @@ -188,16 +188,16 @@ class FilamentControllerFFI extends FilamentController { var renderingSurface = await _createRenderingSurface(); - print("Got rendering surface"); + dev.log("Got rendering surface"); _viewer = _lib.create_filament_viewer_ffi( - Pointer.fromAddress(renderingSurface.sharedContext ?? 0), + Pointer.fromAddress(renderingSurface.sharedContext), _driver, uberArchivePath?.toNativeUtf8().cast() ?? nullptr, loader, renderCallback, renderCallbackOwner); - print("Created viewer"); + dev.log("Created viewer"); if (_viewer!.address == 0) { throw Exception("Failed to create viewer. Check logs for details"); } @@ -206,19 +206,19 @@ class FilamentControllerFFI extends FilamentController { _lib.create_swap_chain_ffi(_viewer!, renderingSurface.surface, rect.value!.width.toInt(), rect.value!.height.toInt()); - print("Created swap chain"); + dev.log("Created swap chain"); if (renderingSurface.textureHandle != 0) { - print( + dev.log( "Creating render target from native texture ${renderingSurface.textureHandle}"); _lib.create_render_target_ffi(_viewer!, renderingSurface.textureHandle, rect.value!.width.toInt(), rect.value!.height.toInt()); } textureDetails.value = TextureDetails( - textureId: renderingSurface.flutterTextureId!, + textureId: renderingSurface.flutterTextureId, width: rect.value!.width.toInt(), height: rect.value!.height.toInt()); - print("texture details ${textureDetails.value}"); + dev.log("texture details ${textureDetails.value}"); _lib.update_viewport_and_camera_projection_ffi( _viewer!, rect.value!.width.toInt(), rect.value!.height.toInt(), 1.0); hasViewer.value = true; @@ -322,7 +322,7 @@ class FilamentControllerFFI extends FilamentController { "destroyTexture", textureDetails.value!.textureId); } } else if (Platform.isWindows) { - print("Resizing window with rect $rect"); + dev.log("Resizing window with rect $rect"); await _channel.invokeMethod("resizeWindow", [ rect.value!.width, rect.value!.height, @@ -345,14 +345,14 @@ class FilamentControllerFFI extends FilamentController { } if (renderingSurface.textureHandle != 0) { - print( + dev.log( "Creating render target from native texture ${renderingSurface.textureHandle}"); _lib.create_render_target_ffi(_viewer!, renderingSurface.textureHandle, rect.value!.width.toInt(), rect.value!.height.toInt()); } textureDetails.value = TextureDetails( - textureId: renderingSurface.flutterTextureId!, + textureId: renderingSurface.flutterTextureId, width: rect.value!.width.toInt(), height: rect.value!.height.toInt()); @@ -558,7 +558,7 @@ class FilamentControllerFFI extends FilamentController { @override Future setMorphTargetWeights( - FilamentEntity asset, String meshName, List weights) async { + FilamentEntity entity, String meshName, List weights) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } @@ -567,23 +567,23 @@ class FilamentControllerFFI extends FilamentController { for (int i = 0; i < weights.length; i++) { weightsPtr.elementAt(i).value = weights[i]; } - _lib.set_morph_target_weights_ffi(_assetManager!, asset, + _lib.set_morph_target_weights_ffi(_assetManager!, entity, meshName.toNativeUtf8().cast(), weightsPtr, weights.length); calloc.free(weightsPtr); } @override Future> getMorphTargetNames( - FilamentEntity asset, String meshName) async { + FilamentEntity entity, String meshName) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } var names = []; var count = _lib.get_morph_target_name_count_ffi( - _assetManager!, asset, meshName.toNativeUtf8().cast()); + _assetManager!, entity, meshName.toNativeUtf8().cast()); var outPtr = calloc(255); for (int i = 0; i < count; i++) { - _lib.get_morph_target_name(_assetManager!, asset, + _lib.get_morph_target_name(_assetManager!, entity, meshName.toNativeUtf8().cast(), outPtr, i); names.add(outPtr.cast().toDartString()); } @@ -592,15 +592,15 @@ class FilamentControllerFFI extends FilamentController { } @override - Future> getAnimationNames(FilamentEntity asset) async { + Future> getAnimationNames(FilamentEntity entity) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } - var animationCount = _lib.get_animation_count(_assetManager!, asset); + var animationCount = _lib.get_animation_count(_assetManager!, entity); var names = []; var outPtr = calloc(255); for (int i = 0; i < animationCount; i++) { - _lib.get_animation_name_ffi(_assetManager!, asset, outPtr, i); + _lib.get_animation_name_ffi(_assetManager!, entity, outPtr, i); names.add(outPtr.cast().toDartString()); } @@ -609,12 +609,12 @@ class FilamentControllerFFI extends FilamentController { @override Future getAnimationDuration( - FilamentEntity asset, int animationIndex) async { + FilamentEntity entity, int animationIndex) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } var duration = - _lib.get_animation_duration(_assetManager!, asset, animationIndex); + _lib.get_animation_duration(_assetManager!, entity, animationIndex); return duration; } @@ -644,7 +644,7 @@ class FilamentControllerFFI extends FilamentController { calloc.free(dataPtr); calloc.free(idxPtr); throw Exception( - "Morph target ${animation.morphTargets[i]} is specified in the animation but could not be found in the mesh ${animation.meshName} under entity ${entity}"); + "Morph target ${animation.morphTargets[i]} is specified in the animation but could not be found in the mesh ${animation.meshName} under entity $entity"); } idxPtr.elementAt(i).value = index; } @@ -664,7 +664,7 @@ class FilamentControllerFFI extends FilamentController { @override Future setBoneAnimation( - FilamentEntity asset, BoneAnimationData animation) async { + FilamentEntity entity, BoneAnimationData animation) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } @@ -701,11 +701,11 @@ class FilamentControllerFFI extends FilamentController { } @override - Future removeAsset(FilamentEntity asset) async { + Future removeAsset(FilamentEntity entity) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } - _lib.remove_asset_ffi(_viewer!, asset); + _lib.remove_asset_ffi(_viewer!, entity); } @override @@ -741,7 +741,7 @@ class FilamentControllerFFI extends FilamentController { } @override - Future playAnimation(FilamentEntity asset, int index, + Future playAnimation(FilamentEntity entity, int index, {bool loop = false, bool reverse = false, bool replaceActive = true, @@ -750,33 +750,33 @@ class FilamentControllerFFI extends FilamentController { throw Exception("No viewer available, ignoring"); } _lib.play_animation_ffi( - _assetManager!, asset, index, loop, reverse, replaceActive, crossfade); + _assetManager!, entity, index, loop, reverse, replaceActive, crossfade); } @override Future setAnimationFrame( - FilamentEntity asset, int index, int animationFrame) async { + FilamentEntity entity, int index, int animationFrame) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } - _lib.set_animation_frame(_assetManager!, asset, index, animationFrame); + _lib.set_animation_frame(_assetManager!, entity, index, animationFrame); } @override - Future stopAnimation(FilamentEntity asset, int animationIndex) async { + Future stopAnimation(FilamentEntity entity, int animationIndex) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } - _lib.stop_animation(_assetManager!, asset, animationIndex); + _lib.stop_animation(_assetManager!, entity, animationIndex); } @override - Future setCamera(FilamentEntity asset, String? name) async { + Future setCamera(FilamentEntity entity, String? name) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } var result = _lib.set_camera( - _viewer!, asset, name?.toNativeUtf8()?.cast() ?? nullptr); + _viewer!, entity, name?.toNativeUtf8().cast() ?? nullptr); if (!result) { throw Exception("Failed to set camera"); } @@ -833,11 +833,11 @@ class FilamentControllerFFI extends FilamentController { } @override - Future moveCameraToAsset(FilamentEntity asset) async { + Future moveCameraToAsset(FilamentEntity entity) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } - _lib.move_camera_to_asset(_viewer!, asset); + _lib.move_camera_to_asset(_viewer!, entity); } @override @@ -880,75 +880,76 @@ class FilamentControllerFFI extends FilamentController { } @override - Future setMaterialColor(FilamentEntity asset, String meshName, + Future setMaterialColor(FilamentEntity entity, String meshName, int materialIndex, Color color) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } var result = _lib.set_material_color( _assetManager!, - asset, + entity, meshName.toNativeUtf8().cast(), materialIndex, color.red.toDouble() / 255.0, color.green.toDouble() / 255.0, color.blue.toDouble() / 255.0, color.alpha.toDouble() / 255.0); - if (result != 1) { + if (!result) { throw Exception("Failed to set material color"); } } @override - Future transformToUnitCube(FilamentEntity asset) async { + Future transformToUnitCube(FilamentEntity entity) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } - _lib.transform_to_unit_cube(_assetManager!, asset); + _lib.transform_to_unit_cube(_assetManager!, entity); } @override - Future setPosition(FilamentEntity asset, double x, double y, double z) async { + Future setPosition( + FilamentEntity entity, double x, double y, double z) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } - _lib.set_position(_assetManager!, asset, x, y, z); + _lib.set_position(_assetManager!, entity, x, y, z); } @override - Future setScale(FilamentEntity asset, double scale) async { + Future setScale(FilamentEntity entity, double scale) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } - _lib.set_scale(_assetManager!, asset, scale); + _lib.set_scale(_assetManager!, entity, scale); } @override Future setRotation( - FilamentEntity asset, double rads, double x, double y, double z) async { + FilamentEntity entity, double rads, double x, double y, double z) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } - _lib.set_rotation(_assetManager!, asset, rads, x, y, z); + _lib.set_rotation(_assetManager!, entity, rads, x, y, z); } @override - Future hide(FilamentEntity asset, String meshName) async { + Future hide(FilamentEntity entity, String meshName) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } if (_lib.hide_mesh( - _assetManager!, asset, meshName.toNativeUtf8().cast()) != + _assetManager!, entity, meshName.toNativeUtf8().cast()) != 1) {} } @override - Future reveal(FilamentEntity asset, String meshName) async { + Future reveal(FilamentEntity entity, String meshName) async { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } if (_lib.reveal_mesh( - _assetManager!, asset, meshName.toNativeUtf8().cast()) != + _assetManager!, entity, meshName.toNativeUtf8().cast()) != 1) { throw Exception("Failed to reveal mesh $meshName"); } diff --git a/lib/generated_bindings.dart b/lib/generated_bindings.dart index c7f35881..55e43d0c 100644 --- a/lib/generated_bindings.dart +++ b/lib/generated_bindings.dart @@ -1,7 +1,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. // // Generated by `package:ffigen`. -// ignore_for_file: type=lint +// ignore_for_file: type=lint, unused_element, unused_field import 'dart:ffi' as ffi; class NativeLibrary { diff --git a/lib/rendering_surface.dart b/lib/rendering_surface.dart index ccc138b8..730d9d2e 100644 --- a/lib/rendering_surface.dart +++ b/lib/rendering_surface.dart @@ -1,4 +1,5 @@ import 'dart:ffi'; +import 'dart:developer' as dev; class RenderingSurface { final int flutterTextureId; @@ -15,22 +16,23 @@ class RenderingSurface { // null on iOS/Android, void* on MacOS (pointer to metal texture), GLuid on Windows/Linux var nativeTexture = platformMessage[2] as int? ?? 0; - if(nativeTexture != 0) { + if (nativeTexture != 0) { assert(surfaceAddress == 0); } var sharedContext = platformMessage[3] as int? ?? 0; - print( + dev.log( "Using flutterTextureId $flutterTextureId, surface $surfaceAddress nativeTexture $nativeTexture and sharedContext $sharedContext"); return RenderingSurface( - sharedContext: sharedContext, + sharedContext: sharedContext, flutterTextureId: flutterTextureId, surface: Pointer.fromAddress(surfaceAddress), textureHandle: nativeTexture); } - RenderingSurface({required this.sharedContext, + RenderingSurface( + {required this.sharedContext, required this.flutterTextureId, required this.surface, required this.textureHandle}); diff --git a/lib/widgets/filament_gesture_detector.dart b/lib/widgets/filament_gesture_detector.dart index 5a6f2669..a9d89ace 100644 --- a/lib/widgets/filament_gesture_detector.dart +++ b/lib/widgets/filament_gesture_detector.dart @@ -1,14 +1,12 @@ -import 'dart:async'; import 'dart:io'; import 'package:flutter/foundation.dart'; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_filament/widgets/filament_gesture_detector_desktop.dart'; import 'package:flutter_filament/widgets/filament_gesture_detector_mobile.dart'; import '../filament_controller.dart'; -enum GestureType { RotateCamera, PanCamera, PanBackground } +enum GestureType { rotateCamera, panCamera, panBackground } /// /// A widget that translates finger/mouse gestures to zoom/pan/rotate actions. diff --git a/lib/widgets/filament_gesture_detector_desktop.dart b/lib/widgets/filament_gesture_detector_desktop.dart index a2088313..40157e32 100644 --- a/lib/widgets/filament_gesture_detector_desktop.dart +++ b/lib/widgets/filament_gesture_detector_desktop.dart @@ -49,7 +49,8 @@ class _FilamentGestureDetectorDesktopState /// /// /// - bool _scaling = false; + // ignore: unused_field + final bool _scaling = false; bool _pointerMoving = false; @@ -78,7 +79,7 @@ class _FilamentGestureDetectorDesktopState // we don't want to end the zoom in the same frame, because this will destroy the camera manipulator (and cancel the zoom update). // here, we just defer calling [zoomEnd] for 100ms to ensure the update is propagated through. - _scrollTimer = Timer(Duration(milliseconds: 100), () async { + _scrollTimer = Timer(const Duration(milliseconds: 100), () async { await widget.controller.zoomEnd(); }); } diff --git a/lib/widgets/filament_gesture_detector_mobile.dart b/lib/widgets/filament_gesture_detector_mobile.dart index c00f98fe..117bdc9f 100644 --- a/lib/widgets/filament_gesture_detector_mobile.dart +++ b/lib/widgets/filament_gesture_detector_mobile.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import '../filament_controller.dart'; -enum GestureType { RotateCamera, PanCamera, PanBackground } +enum GestureType { rotateCamera, panCamera, panBackground } /// /// A widget that translates finger/mouse gestures to zoom/pan/rotate actions. @@ -49,12 +49,12 @@ class FilamentGestureDetectorMobile extends StatefulWidget { class _FilamentGestureDetectorMobileState extends State { - GestureType gestureType = GestureType.PanCamera; + GestureType gestureType = GestureType.panCamera; final _icons = { - GestureType.PanBackground: Icons.image, - GestureType.PanCamera: Icons.pan_tool, - GestureType.RotateCamera: Icons.rotate_90_degrees_ccw + GestureType.panBackground: Icons.image, + GestureType.panCamera: Icons.pan_tool, + GestureType.rotateCamera: Icons.rotate_90_degrees_ccw }; // on mobile, we can't differentiate between pointer down events like we do on desktop with primary/secondary/tertiary buttons @@ -69,8 +69,11 @@ class _FilamentGestureDetectorMobileState // to avoid duplicating code for pan/rotate (panStart, panUpdate, panEnd, rotateStart, rotateUpdate etc) // we have only a single function for start/update/end. // when the gesture type is changed, these properties are updated to point to the correct function. + // ignore: unused_field late Function(double x, double y) _functionStart; + // ignore: unused_field late Function(double x, double y) _functionUpdate; + // ignore: unused_field late Function() _functionEnd; @override @@ -81,18 +84,18 @@ class _FilamentGestureDetectorMobileState void _setFunction() { switch (gestureType) { - case GestureType.RotateCamera: + case GestureType.rotateCamera: _functionStart = widget.controller.rotateStart; _functionUpdate = widget.controller.rotateUpdate; _functionEnd = widget.controller.rotateEnd; break; - case GestureType.PanCamera: + case GestureType.panCamera: _functionStart = widget.controller.panStart; _functionUpdate = widget.controller.panUpdate; _functionEnd = widget.controller.panEnd; break; // TODO - case GestureType.PanBackground: + case GestureType.panBackground: _functionStart = (x, y) async {}; _functionUpdate = (x, y) async {}; _functionEnd = () async {}; @@ -109,6 +112,7 @@ class _FilamentGestureDetectorMobileState super.didUpdateWidget(oldWidget); } + // ignore: unused_field Timer? _scrollTimer; double _lastScale = 0; diff --git a/lib/widgets/filament_widget.dart b/lib/widgets/filament_widget.dart index fa1bc504..49d9bb6a 100644 --- a/lib/widgets/filament_widget.dart +++ b/lib/widgets/filament_widget.dart @@ -1,5 +1,6 @@ import 'dart:io'; import 'dart:math'; +import 'dart:developer' as dev; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -110,8 +111,7 @@ class _SizedFilamentWidget extends StatefulWidget { final FilamentController controller; const _SizedFilamentWidget( - {super.key, - required this.width, + {required this.width, required this.height, this.initial, required this.controller}); @@ -145,7 +145,7 @@ class _SizedFilamentWidgetState extends State<_SizedFilamentWidget> { _pixelRatio = MediaQuery.of(context).devicePixelRatio; widget.controller.setDimensions(_rect, _pixelRatio); } catch (err) { - print("Fatal error : $err"); + dev.log("Fatal error : $err"); _error = err.toString(); } setState(() {}); @@ -158,7 +158,7 @@ class _SizedFilamentWidgetState extends State<_SizedFilamentWidget> { bool _resizing = false; Future _resize() { - print("Resizing widget"); + dev.log("Resizing widget"); final completer = Completer(); // resizing the window can be sluggish (particular in debug mode), exacerbated when simultaneously recreating the swapchain and resize the window. // to address this, whenever the widget is resized, we set a timer for Xms in the future. @@ -186,7 +186,7 @@ class _SizedFilamentWidgetState extends State<_SizedFilamentWidget> { setState(() {}); _resizing = false; } catch (err) { - print("Error resizing FilamentWidget: $err"); + dev.log("Error resizing FilamentWidget: $err"); } finally { completer.complete(); } @@ -215,21 +215,21 @@ class _SizedFilamentWidgetState extends State<_SizedFilamentWidget> { void _handleStateChange(AppLifecycleState state) async { switch (state) { case AppLifecycleState.detached: - print("Detached"); + dev.log("Detached"); if (!_wasRenderingOnInactive) { _wasRenderingOnInactive = widget.controller.rendering; } await widget.controller.setRendering(false); break; case AppLifecycleState.hidden: - print("Hidden"); + dev.log("Hidden"); if (!_wasRenderingOnInactive) { _wasRenderingOnInactive = widget.controller.rendering; } await widget.controller.setRendering(false); break; case AppLifecycleState.inactive: - print("Inactive"); + dev.log("Inactive"); if (!_wasRenderingOnInactive) { _wasRenderingOnInactive = widget.controller.rendering; } @@ -238,14 +238,14 @@ class _SizedFilamentWidgetState extends State<_SizedFilamentWidget> { await widget.controller.setRendering(false); break; case AppLifecycleState.paused: - print("Paused"); + dev.log("Paused"); if (!_wasRenderingOnInactive) { _wasRenderingOnInactive = widget.controller.rendering; } await widget.controller.setRendering(false); break; case AppLifecycleState.resumed: - print("Resumed"); + dev.log("Resumed"); await widget.controller.setRendering(_wasRenderingOnInactive); break; }