diff --git a/lib/filament_widget.dart b/lib/filament_widget.dart index 8e01a317..2abe8a3c 100644 --- a/lib/filament_widget.dart +++ b/lib/filament_widget.dart @@ -1,5 +1,6 @@ import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; +import 'dart:async'; import 'filament_controller.dart'; typedef ResizeCallback = void Function(Size oldSize, Size newSize); @@ -52,11 +53,14 @@ class FilamentWidget extends StatefulWidget { class _FilamentWidgetState extends State { bool _ready = false; + StreamSubscription? _listener; @override void initState() { - - widget.controller.onInitializationRequested.listen((_) { + _listener = widget.controller.onInitializationRequested.listen((_) { + if(_ready) { + return; + } WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { var size = ((context.findRenderObject()) as RenderBox).size; print("Requesting texture creation for Filament of size $size"); @@ -66,12 +70,23 @@ class _FilamentWidgetState extends State { setState(() { _ready = true; }); + _listener!.cancel(); + _listener = null; + }); + // we need to make sure a new frame is requested, otherwise the callback may not run + setState(() { + }); }); super.initState(); } + void dispose() { + _listener?.cancel(); + super.dispose(); + } + @override Widget build(BuildContext context) { if (!_ready) {