From 9e8676e9cdb8a3005bdca8e4e5a94d349b378126 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Thu, 6 Jun 2024 22:17:52 +0800 Subject: [PATCH] don't destroy Texture on FilamentWidget disposal --- .../lib/filament/widgets/filament_widget.dart | 24 ++++--------------- 1 file changed, 5 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 15460167..2a1eece6 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 @@ -4,7 +4,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'dart:async'; -import 'package:flutter_filament_platform_interface/flutter_filament_platform_interface.dart'; import 'package:flutter_filament_platform_interface/flutter_filament_texture.dart'; import 'package:flutter_filament/flutter_filament.dart'; import 'resize_observer.dart'; @@ -26,14 +25,8 @@ class FilamentWidget extends StatefulWidget { } class _FilamentWidgetState extends State { - FlutterFilamentTexture? _texture; - Rect get _rect { - final renderBox = (context.findRenderObject()) as RenderBox; - final size = renderBox.size; - final translation = renderBox.getTransformTo(null).getTranslation(); - return Rect.fromLTWH(translation.x, translation.y, size.width, size.height); - } + FlutterFilamentTexture? _texture; @override void initState() { @@ -51,31 +44,24 @@ class _FilamentWidgetState extends State { super.initState(); } - @override - void dispose() { - if (_texture != null) { - widget.plugin.destroyTexture(_texture!); - } - - super.dispose(); - } - bool _resizing = false; Timer? _resizeTimer; Future _resizeTexture(Size newSize) async { _resizeTimer?.cancel(); - _resizeTimer = Timer(Duration(milliseconds: 100), () async { + _resizeTimer = Timer(Duration(milliseconds: 500), () async { if (_resizing) { return; } _resizeTimer!.cancel(); _resizing = true; + var oldTexture = _texture; + _texture = null; setState(() {}); var dpr = MediaQuery.of(context).devicePixelRatio; - _texture = await widget.plugin.resizeTexture(_texture!, + _texture = await widget.plugin.resizeTexture(oldTexture!, (dpr * newSize.width).ceil(), (dpr * newSize.height).ceil(), 0, 0); print( "Resized texture, new flutter ID is ${_texture!.flutterTextureId} (hardware ID ${_texture!.hardwareTextureId})");