From df777585e2e89cd88911f27909a2cca0e1b47e1b Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Sat, 1 Jun 2024 12:50:27 +0800 Subject: [PATCH] re-add resize timer to FilamentWidget return initial widget when resizing --- .../lib/filament/widgets/filament_widget.dart | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/flutter_filament_federated/flutter_filament/lib/filament/widgets/filament_widget.dart b/flutter_filament_federated/flutter_filament/lib/filament/widgets/filament_widget.dart index bb209703..15460167 100644 --- a/flutter_filament_federated/flutter_filament/lib/filament/widgets/filament_widget.dart +++ b/flutter_filament_federated/flutter_filament/lib/filament/widgets/filament_widget.dart @@ -28,7 +28,6 @@ class FilamentWidget extends StatefulWidget { class _FilamentWidgetState extends State { FlutterFilamentTexture? _texture; - Rect get _rect { final renderBox = (context.findRenderObject()) as RenderBox; final size = renderBox.size; @@ -44,7 +43,7 @@ class _FilamentWidgetState extends State { var width = (dpr * size.width).ceil(); var height = (dpr * size.height).ceil(); _texture = await widget.plugin.createTexture(width, height, 0, 0); - + if (mounted) { setState(() {}); } @@ -61,32 +60,33 @@ class _FilamentWidgetState extends State { super.dispose(); } - bool _resizing = false; + Timer? _resizeTimer; Future _resizeTexture(Size newSize) async { - if (_resizing) { - return; - } - await Future.delayed(Duration.zero); - if (_resizing) { - return; - } - _resizing = true; + _resizeTimer?.cancel(); + _resizeTimer = Timer(Duration(milliseconds: 100), () async { + if (_resizing) { + return; + } + _resizeTimer!.cancel(); + _resizing = true; + setState(() {}); - var dpr = MediaQuery.of(context).devicePixelRatio; + var dpr = MediaQuery.of(context).devicePixelRatio; - _texture = await widget.plugin.resizeTexture(_texture!, - (dpr * newSize.width).ceil(), (dpr * newSize.height).ceil(), 0, 0); - print( - "Resized texture, new flutter ID is ${_texture!.flutterTextureId} (hardware ID ${_texture!.hardwareTextureId})"); - setState(() {}); - _resizing = false; + _texture = await widget.plugin.resizeTexture(_texture!, + (dpr * newSize.width).ceil(), (dpr * newSize.height).ceil(), 0, 0); + print( + "Resized texture, new flutter ID is ${_texture!.flutterTextureId} (hardware ID ${_texture!.hardwareTextureId})"); + setState(() {}); + _resizing = false; + }); } @override Widget build(BuildContext context) { - if (_texture == null) { + if (_texture == null || _resizing) { return widget.initial ?? Container(color: kIsWeb ? Colors.transparent : Colors.red); }